首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

自各儿扩展 标题带Radio的TitledBorder

2012-09-03 
自己扩展标题带Radio的TitledBorder1.首先自己扩展一个TitledBorder,源码如下:public class ComponentTitl

自己扩展 标题带Radio的TitledBorder

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);        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);         frame.setVisible(true); }}效果请看附件

热点排行