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 + -
显示快捷键?