我想创建一个简单的框架,如果我点击一个按钮就会显示一个文本字段,如果我点击另一个按钮就显示一个JLabel,但它不起作用,我不知道为什么?
我尝试将变量设置为public但结果是一样的,我也在按钮命令中尝试了另一个命令,它就像showMessageDialog一样,所以我很困惑为什么它不能工作
import java.awt.*;
import javax.swing.*;
public class CheckBoxFrame extends JFrame
{
private JTextField textField1;
private JLabel label1;
private JButton txt;
private JButton label;
public CheckBoxFrame()
{
super ("JCheckBox Test" );
textField1= new JTextField ("Text Field 1", 20 );
textField1.setFont ( new Font ("Serif", Font.PLAIN,14));
add(textField1);
textField1.setVisible(false);
label1 = new JLabel("Label1", JLabel.CENTER);
add(label1);
label1.setVisible(false);
txt = new JButton ("Text Field");
ButtonHandler b1 = new ButtonHandler();
txt.addActionListener(b1);
add(txt);
label = new JButton ("label ");
add(label);
setLayout( new FlowLayout() );
setVisible(true);
setSize(400,400);
}
private class ButtonHandler implements ActionListener
{
public void actionPerformed (ActionEvent a)
{
if (a.getSource() == txt)
{
label1.setVisible(false);
textField1.setVisible(true);
}
if (a.getSource() == label)
{
label1.setVisible(true);
textField1.setVisible(false);
}
}
}
}
答案 0 :(得分:1)
这里有两件事 1.您尚未为标签按钮添加动作侦听器。 2.设置可见性后,尝试调用JFrame的repaint()。由于您使用的是单独的操作处理程序类,因此可能必须通过构造函数或setter方法将JFrame实例传递给操作处理程序。
始终建议将控件放在JPanel上而不是直接放在JFrame上
答案 1 :(得分:1)
请务必将ButtonHandler
ActionListener
添加到label
...
label = new JButton("label ");
add(label);
label.addActionListener(b1);
将revalidate
添加到ButtonHandler
的末尾(或修改容器的位置)以强制布局管理器更新布局。您可能还需要使用repaint
private class ButtonHandler implements ActionListener {
public void actionPerformed(ActionEvent a) {
if (a.getSource() == txt) {
label1.setVisible(false);
textField1.setVisible(true);
}
if (a.getSource() == label) {
label1.setVisible(true);
textField1.setVisible(false);
}
revalidate();
}
}