日期:2014-05-16 浏览次数:20490 次
1.首先自己扩展一个TitledBorder ,源码如下: public class ComponentTitledBorder implements Border, MouseListener, SwingConstants { int offset = 5; Component comp; JComponent container; Rectangle rect; Border border; public ComponentTitledBorder(Component comp, JComponent container, Border border) { this.comp = comp; this.container = container; this.border = border; container.addMouseListener(this); } public boolean isBorderOpaque() { return true; } public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { Insets borderInsets = border.getBorderInsets(c); Insets insets = getBorderInsets(c); int temp = (insets.top - borderInsets.top) / 2; border.paintBorder(c, g, x, y + temp, width, height - temp); Dimension size = comp.getPreferredSize(); rect = new Rectangle(offset, 0, size.width, size.height); SwingUtilities.paintComponent(g, comp, (Container) c, rect); } public Insets getBorderInsets(Component c) { Dimension size = comp.getPreferredSize(); Insets insets = border.getBorderInsets(c); insets.top = Math.max(insets.top, size.height); return insets; } private void dispatchEvent(MouseEvent me) { if (rect != null && rect.contains(me.getX(), me.getY())) { Point pt = me.getPoint(); pt.translate(-offset, 0); comp.setBounds(rect); comp.dispatchEvent(new MouseEvent(comp, me.getID(), me.getWhen(), me.getModifiers(), pt.x, pt.y, me.getClickCount(), me .isPopupTrigger(), me.getButton())); if (!comp.isValid()) container.repaint(); } } public void mouseClicked(MouseEvent me) { dispatchEvent(me); } public void mouseEntered(MouseEvent me) { dispatchEvent(me); } public void mouseExited(MouseEvent me) { dispatchEvent(me); } public void mousePressed(MouseEvent me) { dispatchEvent(me); } public void mouseReleased(MouseEvent me) { dispatchEvent(me); } } 2.测试运行,测试代码如下 public class MyBorder { public static void main(String[] args) { try{ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch(Exception e){ e.printStackTrace(); } final JPanel proxyPanel = new JPanel(); proxyPanel.add(new JLabel("google: ")); proxyPanel.add(new JTextField("www.google.com.hk")); proxyPanel.add(new JLabel("google Port")); proxyPanel.add(new JTextField("8080")); final JCheckBox checkBox = new JCheckBox("测试标题带Checkbox的TitledBorder", true); final JRadioButton radio = new JRadioButton("测试标题带Radio的TitledBorder", true); checkBox.setFocusPainted(false); ComponentTitledBorder componentBorder = new ComponentTitledBorder(radio, proxyPanel , BorderFactory.createEtchedBorder()); checkBox.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ boolean enable = checkBox.isSelected(); Component comp[] = proxyPanel.getComponents(); for(int i = 0; i<comp.length; i++){ comp[i].setEnabled(enable); } } }); radio.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ boolean enable = radio.isSelected(); Component comp[] = proxyPanel.getComponents(); for(int i = 0; i<comp.length; i++){ comp[i].setEnabled(enable); } } }); proxyPanel.setBorder(componentBorder); JFrame frame = new JFrame("ComponentTitledBorder - santhosh@in.fiorano.com"); Container contents = frame.getContentPane(); contents.setLayout(new FlowLayout()); contents.add(proxyPanel); frame.pack(); frame.setBounds(200, 200, 400, 400);