自己扩展 标题带Radio的TitledBorder

[code]


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);
}

}


效果请看附件


[/code]
您可以使用Java Swing库中的布局管理器来实现将按钮并排排列的效果。以下是修改后的示例代码: ``` import javax.swing.*; import javax.swing.border.TitledBorder; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class ButtonExample extends JFrame { public ButtonExample() { setTitle("Button Example"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(500, 200); // 创建按钮和布局管理器 JToggleButton searchUserButton = new JToggleButton("搜索新用户"); JButton stopSearchButton = new JButton("终止搜索"); FlowLayout layout = new FlowLayout(); // 创建搜索用户面板 JPanel searchUserPanel = new JPanel(); searchUserPanel.setBorder(new TitledBorder("搜索用户")); // 创建搜索控制面板 JPanel searchControlPanel = new JPanel(); searchControlPanel.setLayout(layout); searchControlPanel.add(searchUserButton); searchControlPanel.add(stopSearchButton); // 将搜索控制面板添加到搜索用户面板 searchUserPanel.add(searchControlPanel); // 添加进度条到搜索控制面板 JProgressBar progressBar = new JProgressBar(); searchControlPanel.add(progressBar); // 点击终止搜索按钮后,调用SearchUserActionListener中的stopSearch方法 stopSearchButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { ActionListener[] actionListeners = searchUserButton.getActionListeners(); if (actionListeners.length > 0 && actionListeners[0] instanceof SearchUserActionListener) { ((SearchUserActionListener) actionListeners[0]).stopSearch(); } } }); // 添加搜索用户面板到窗口 add(searchUserPanel); setVisible(true); } public static void main(String[] args) { new ButtonExample(); } } ``` 在这个示例中,我们使用FlowLayout布局管理器,并将搜索控制面板中的搜索新用户按钮和终止搜索按钮添加到同一个布局中,这样它们就可以并排排列了。我们还将搜索控制面板添加到了搜索用户面板中,然后将搜索用户面板添加到了窗口中。点击终止搜索按钮后,我们获取搜索新用户按钮中的ActionListener,并调用其中的stopSearch方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值