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
分享到:
相关推荐
- **带标题的边框**(`TitledBorder`): ```java p5.setBorder(BorderFactory.createTitledBorder("")); // 带有空标题的边框 TitledBorder tb = BorderFactory.createTitledBorder(""); tb....
// 使用静态工厂方法创建EtchedBorder// 直接创建TitledBorder,TitledBorder边框就是为原有的边框增加标题TitledBor
`TitledBorder`允许你为组件添加一个带标题的边框,这对于分组相关的组件非常有用。你可以自定义边框的颜色、样式以及标题文字等属性。下面展示一个简单的例子: ```java import javax.swing.*; import java.awt.*;...
可以实现空边界(EmptyBorder)、斜切边界(BevelBorder)、蚀刻边界(EtchedBorder)、线条边界(LineBorder)、带标题的边界(TitledBorder)和复合边界(CompoundBorder)等多种的JLable边界效果。
这个简单的`BorderTest.java`程序演示了如何使用`TitledBorder`为面板添加带标题的边框。 以上就是关于Java中`Border`使用的详细知识点。理解并熟练应用这些概念,可以帮助开发者创建更加丰富和易用的图形用户界面...
本例将实现如空边界(EmptyBorder)、斜切边界(BevelBorder)、蚀刻边界(EtchedBorder)、线条边界(LineBorder)、带标题的边界(TitledBorder)和复合边界(CompoundBorder)等边界效果。 运行环境:Java/...
6.TitledBorder:创建一个标题边框,该边框可以设置标题文本和样式。 ```java p5.setBorder(BorderFactory.createTitledBorder("标题")); ``` 7.MatteBorder:创建一个花色边框,该边框可以设置边框的颜色和宽度。...
- `TitledBorder` 是一种边框类型,用于给组件添加带标题的边框。 - `GridBagLayout` 和 `BoxLayout` 等布局管理器可以帮助开发者更好地组织GUI组件。 总的来说,这个Java时钟日历项目涉及到了GUI编程的基本概念...
5. `TitledBorder`: 在其他边框之上添加一个带有文字标题的边框。 6. `BevelBorder`: 创建斜面边框,有升起和凹下的效果。 7. `CompoundBorder`: 结合两个边框,形成复合边框。 8. `EmptyBorder`: 只设置边距,没有...
用 Swing 创建图形界面 (6) 为组件增加边框– Swing 提供了多种边框类,如 TitledBorder、EmptyBorder 等,可以为组件添加边框效果。例如:Border border = BorderFactory.createTitledBorder(" 边框标题 ");...
- `TitledBorder`:在边框上添加文本标题。 3. **边框事件处理**:Swing并没有直接提供专门的边框事件类,但可以通过添加组件的鼠标监听器(`MouseListener`)或鼠标移动监听器(`MouseMotionListener`)来捕获...
- `TitledBorder`:创建一个带标题的边框,例如`new TitledBorder("标题")`。 - `LineBorder`:创建一个线性边框,如`new LineBorder(Color.color, thickness)`,其中`Color`是边框颜色,`thickness`是边框的宽度...
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()`方法负责初始化图片路径数组。 - 通过循环为每个按钮设置图标...
Border对象可以是各种不同的边框样式,例如BevelBorder、LineBorder、EmptyBorder、EtchedBorder、TitledBorder等。这些边框可以单独使用,也可以组合使用以创建复杂的边框样式。 在Swing中,组件的边框可以通过...
### 使用JScrollPane、JTable与DefaultTableModel实现动态表格管理 #### 一、引言 在开发桌面应用程序时,经常会遇到...在实际应用中,还可以根据需求进一步扩展功能,比如添加搜索过滤、排序等功能,提高用户体验。
jSlider.setBorder(new javax.swing.border.TitledBorder(BorderFactory.createEmptyBorder(), "图像的旋转度")); //设置边框 jSlider.addChangeListener(new ChangeListener() { //滑动条jSlider事件处理 ...
jSlider.setBorder(new javax.swing.border.TitledBorder(BorderFactory.createEmptyBorder(), "图像的旋转度")); //设置边框 jSlider.addChangeListener(new ChangeListener() { //滑动条jSlider事件处理 ...
`Border`接口有许多实现,例如`EmptyBorder`、`TitledBorder`、`EtchedBorder`和`LineBorder`等。`BorderDemo.jnlp`和`BorderDemo.java`文件可能包含展示不同边框类型的示例代码,帮助理解如何设置和自定义组件的...
为了提升用户体验,代码示例中使用了BorderLayout布局管理器和TitledBorder边框来设置窗口的布局和美化窗口标题边框。此外,通过try-catch块设置了异常捕获,以确保程序在遇到问题时不会直接崩溃,而是给出错误信息...