`
kidiaoer
  • 浏览: 822650 次
  • 性别: 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
分享到:
评论

相关推荐

    各种java边框的使用

    - **带标题的边框**(`TitledBorder`): ```java p5.setBorder(BorderFactory.createTitledBorder("")); // 带有空标题的边框 TitledBorder tb = BorderFactory.createTitledBorder(""); tb....

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

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

    添加边框的方法

    `TitledBorder`允许你为组件添加一个带标题的边框,这对于分组相关的组件非常有用。你可以自定义边框的颜色、样式以及标题文字等属性。下面展示一个简单的例子: ```java import javax.swing.*; import java.awt.*;...

    Java Swing自定义标签边界.rar

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

    java Border的使用

    这个简单的`BorderTest.java`程序演示了如何使用`TitledBorder`为面板添加带标题的边框。 以上就是关于Java中`Border`使用的详细知识点。理解并熟练应用这些概念,可以帮助开发者创建更加丰富和易用的图形用户界面...

    Java自定义标签的边界效果

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

    Swing编程边框(Border)的用法总结.doc

    6.TitledBorder:创建一个标题边框,该边框可以设置标题文本和样式。 ```java p5.setBorder(BorderFactory.createTitledBorder("标题")); ``` 7.MatteBorder:创建一个花色边框,该边框可以设置边框的颜色和宽度。...

     java时钟日历 java时钟日历.doc

    - `TitledBorder` 是一种边框类型,用于给组件添加带标题的边框。 - `GridBagLayout` 和 `BoxLayout` 等布局管理器可以帮助开发者更好地组织GUI组件。 总的来说,这个Java时钟日历项目涉及到了GUI编程的基本概念...

    Swing的border使用

    5. `TitledBorder`: 在其他边框之上添加一个带有文字标题的边框。 6. `BevelBorder`: 创建斜面边框,有升起和凹下的效果。 7. `CompoundBorder`: 结合两个边框,形成复合边框。 8. `EmptyBorder`: 只设置边距,没有...

    java程序设计PPT第五章

    用 Swing 创建图形界面 (6) 为组件增加边框– Swing 提供了多种边框类,如 TitledBorder、EmptyBorder 等,可以为组件添加边框效果。例如:Border border = BorderFactory.createTitledBorder(" 边框标题 ");...

    java swing 边框事件

    - `TitledBorder`:在边框上添加文本标题。 3. **边框事件处理**:Swing并没有直接提供专门的边框事件类,但可以通过添加组件的鼠标监听器(`MouseListener`)或鼠标移动监听器(`MouseMotionListener`)来捕获...

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

    - `TitledBorder`:创建一个带标题的边框,例如`new TitledBorder("标题")`。 - `LineBorder`:创建一个线性边框,如`new LineBorder(Color.color, thickness)`,其中`Color`是边框颜色,`thickness`是边框的宽度...

    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...

    拼图游戏源码

    - 设置窗口标题、大小、不可调整大小等属性。 - 初始化中央面板`centerPanel`,并为其设置`GridLayout`布局。 4. **图片初始化** - `initPicture()`方法负责初始化图片路径数组。 - 通过循环为每个按钮设置图标...

    Java-GUI编程之Swing组件.doc

    Border对象可以是各种不同的边框样式,例如BevelBorder、LineBorder、EmptyBorder、EtchedBorder、TitledBorder等。这些边框可以单独使用,也可以组合使用以创建复杂的边框样式。 在Swing中,组件的边框可以通过...

    学会用JScrollPane和Jtable以及table的Defaulttablemodel*

    ### 使用JScrollPane、JTable与DefaultTableModel实现动态表格管理 #### 一、引言 在开发桌面应用程序时,经常会遇到...在实际应用中,还可以根据需求进一步扩展功能,比如添加搜索过滤、排序等功能,提高用户体验。

    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事件处理   ...

    使用Swing的实例

    `Border`接口有许多实现,例如`EmptyBorder`、`TitledBorder`、`EtchedBorder`和`LineBorder`等。`BorderDemo.jnlp`和`BorderDemo.java`文件可能包含展示不同边框类型的示例代码,帮助理解如何设置和自定义组件的...

    java利用数组随机抽取幸运观众

    为了提升用户体验,代码示例中使用了BorderLayout布局管理器和TitledBorder边框来设置窗口的布局和美化窗口标题边框。此外,通过try-catch块设置了异常捕获,以确保程序在遇到问题时不会直接崩溃,而是给出错误信息...

Global site tag (gtag.js) - Google Analytics