elegantpanel.java
来自「Hibernate开发及整合应用大全 蔡雪焘编著 本书用典型的示例剖析Hiber」· Java 代码 · 共 144 行
JAVA
144 行
package net.sf.hibernate.console.docking;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Component;import java.awt.Font;import java.awt.GradientPaint;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Insets;import java.awt.event.ActionEvent;import javax.swing.AbstractAction;import javax.swing.Action;import javax.swing.JButton;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.border.EmptyBorder;import net.eleritec.docking.Dockable;import net.eleritec.docking.DockingPort;public class ElegantPanel extends JPanel { private Dockable dockable; private JLabel titleLabel; private final String id; public String getViewId() { return id; } static class GradientPanel extends JPanel { private static final Color GRAD_MID = new Color(168, 203, 239); private static final Color GRAD_START = new Color(10, 36, 106); public GradientPanel() { super(new BorderLayout()); } protected void paintComponent(Graphics g) { super.paintComponent(g); Insets in = getInsets(); int mid = getWidth()/2; int y = in.top + 13; int farRight = getWidth()-in.right; int w = farRight - in.left; GradientPaint firstHalf = new GradientPaint(in.left, y, GRAD_START, mid, y, GRAD_MID); GradientPaint secondHalf = new GradientPaint(mid, y, GRAD_MID, farRight, y, getBackground()); Graphics2D g2 = (Graphics2D)g; g2.setPaint(firstHalf); g2.fillRect(in.left, in.top, w/2, 25); g2.setPaint(secondHalf); g2.fillRect(mid-1, in.top, w/2, 25); g.setColor(getBackground().brighter()); g.drawLine(in.left, in.top, farRight, in.top); g.drawLine(in.left, in.top, in.left, in.top+25); g.setColor(getBackground().darker()); g.drawLine(in.left, in.top+25, farRight, in.top+25); } } public ElegantPanel(String title) { this(title,null,null); } public ElegantPanel(String id, String title, Component container) { super(new BorderLayout()); this.id = id; JPanel top = new GradientPanel(); top.add(getTitleLabel(), BorderLayout.CENTER); AbstractAction close = new AbstractAction() { public void actionPerformed(ActionEvent ae) { // can't use DockingManager.undock() since it does not perform a proper repaint ;( Component p = getParent(); while(!(p instanceof DockingPort)) { p = p.getParent(); } if(p!=null) { DockingPort dockingPort = ((DockingPort)p); dockingPort.undock(ElegantPanel.this); //p.invalidate(); p.repaint(); } } }; JButton button = new JButton(close); button.setOpaque(false); button.setBorder(new EmptyBorder(2,2,2,2)); button.setLabel("X"); top.add(button, BorderLayout.EAST); add(top, BorderLayout.NORTH); if(container!=null) { add(container, BorderLayout.CENTER); } setTitle(title); dockable = getDockable(); } public Dockable getDockable() { if(dockable==null) { dockable = new DockableImpl(id,this, getTitleLabel()); } return dockable; } public String getTitle() { return getTitleLabel().getText(); } private JLabel getTitleLabel() { if(titleLabel!=null) return titleLabel; titleLabel = new JLabel(); titleLabel.setForeground(Color.white); titleLabel.setBackground(Color.blue); titleLabel.setFont(titleLabel.getFont().deriveFont(Font.PLAIN)); titleLabel.setBorder(new EmptyBorder(4,4,4,4)); return titleLabel; } public void paintComponent(Graphics g) { super.paintComponent(g); } public void setTitle(String title) { if(title==null) title = ""; title = title.trim(); getTitleLabel().setText(title); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?