`
kidiaoer
  • 浏览: 805744 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

自己扩展 标题带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); 
	}

}



效果请看附件









  • 大小: 41.9 KB
分享到:
评论

相关推荐

    lanlan2017#JavaReadingNotes#12.2.3 为组件设置边框1

    // 使用静态工厂方法创建EtchedBorder// 直接创建TitledBorder,TitledBorder边框就是为原有的边框增加标题TitledBor

    Java Swing自定义标签边界.rar

    可以实现空边界(EmptyBorder)、斜切边界(BevelBorder)、蚀刻边界(EtchedBorder)、线条边界(LineBorder)、带标题的边界(TitledBorder)和复合边界(CompoundBorder)等多种的JLable边界效果。

    Java自定义标签的边界效果

    本例将实现如空边界(EmptyBorder)、斜切边界(BevelBorder)、蚀刻边界(EtchedBorder)、线条边界(LineBorder)、带标题的边界(TitledBorder)和复合边界(CompoundBorder)等边界效果。 运行环境:Java/...

    编程技能训练与等级考试辅导:容器组件与辅助组件.pptx

    带标题的边界:new TitledBorder(字符串) 线边界::new LineBorder(颜色,粗细值) 以上两个边界修饰不能同时设置;4;5;6;7;8;JScrollPane(即滚动条面板)是swing中很常用的一种中间级容器,它和JPanel的差别在于...

    java聊天工具源代码

    import javax.swing.border.TitledBorder; import javax.swing.event.*; public class ChatServer extends JFrame { // used to read Username and Password from users.data file private final String fileName...

    Java实现图片旋转功能.rar

     jSlider.setBorder(new javax.swing.border.TitledBorder(BorderFactory.createEmptyBorder(), "图像的旋转度")); //设置边框  jSlider.addChangeListener(new ChangeListener() { //滑动条jSlider事件处理   ...

    JAva拖动滑块旋转图片.rar

     jSlider.setBorder(new javax.swing.border.TitledBorder(BorderFactory.createEmptyBorder(), "图像的旋转度")); //设置边框  jSlider.addChangeListener(new ChangeListener() { //滑动条jSlider事件处理   ...

    Java实现图片透明效果.rar

      jSlider.setBorder(new TitledBorder(BorderFactory.createEmptyBorder(), "图像的透明度(%)")); //设置边框   jSlider.addChangeListener(new ChangeListener() { //滑动条jSlider事件处理   public ...

Global site tag (gtag.js) - Google Analytics