按下按钮时出现复选框,java
checkbox appears when button pressed, java
我的代码显示了一个纹理,您可以在其中键入内容,并且它应该显示在带有复选框的标签下方。我想要的是只有通过文本字段设置标题时复选框才会出现。我找不到关于这个主题的任何内容 cb.validate();但这并没有真正帮助我。我也试过 this.add(cb);当按下按钮 ks 但它也不起作用。
public class ToDoPage extends JFrame implements ActionListener {
int height = 300 ;
int width = 450;
JTextField tf = new JTextField("Tip here");
JLabel l1 = new JLabel();
JLabel l2 = new JLabel("");
JLabel l3 = new JLabel("");
JLabel l4 = new JLabel("");
JLabel l5 = new JLabel("");
JCheckBox cb = new JCheckBox();
JLabel l = new JLabel("Daily Goals");
JButton b = new JButton();
Date date = new Date();
public ToDoPage() {
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(height, width); //NICHT HARDCODEN
this.setLayout(null);
this.setLocationRelativeTo(null);
this.setResizable(false);
SimpleDateFormat DateFor = new SimpleDateFormat("dd MMMM yyyy");
String stringDate = DateFor.format(date);
tf.setBounds(50, 130, 170, 25);
cb.setBounds(60, 150, 260, 40);
l3.setBounds(60, 180, 260, 40);
l4.setBounds(60, 210, 260, 40);
l5.setBounds(60, 240, 260, 40);
l1.setText("Today is: " + stringDate);
l1.setBounds(70, 10, 300, 40);
l.setBounds(87, 90, 260, 40);
l.setFont(new Font(null, Font.ITALIC, 20));
b.setBounds(230, 130, 25, 25);
b.addActionListener(this);
this.add(tf);
this.add(l2);
this.add(b);
this.add(l);
this.add(l1);
this.add(l3);
this.add(l4);
this.add(l5);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == b) {
String userInput = tf.getText();
cb.setText(userInput);
this.add(cb);
}
}
}
}
简答
Swing 是懒惰的,它不会自动更新 UI,当你可以更新时,相反,当你完成时,你需要触发一个新的布局和绘制通道。
添加...
getContentPane().revalidate();
getContentPane().repaint();
在this.add(cb);
之后
长答案
不要从 JFrame
扩展,您不会向 class 添加任何新功能,您只是将自己锁定在一个用例中。
避免 null
布局,它们对您没有帮助。相反,花时间了解如何使用提供的布局管理 API。参见 Laying Out Components Within a Container
如果您打算生成一个值列表,那么您应该考虑使用 JTable
或 JList
。
有关详细信息,请参阅 How to Use Tables and How to Use Lists
我的代码显示了一个纹理,您可以在其中键入内容,并且它应该显示在带有复选框的标签下方。我想要的是只有通过文本字段设置标题时复选框才会出现。我找不到关于这个主题的任何内容 cb.validate();但这并没有真正帮助我。我也试过 this.add(cb);当按下按钮 ks 但它也不起作用。
public class ToDoPage extends JFrame implements ActionListener {
int height = 300 ;
int width = 450;
JTextField tf = new JTextField("Tip here");
JLabel l1 = new JLabel();
JLabel l2 = new JLabel("");
JLabel l3 = new JLabel("");
JLabel l4 = new JLabel("");
JLabel l5 = new JLabel("");
JCheckBox cb = new JCheckBox();
JLabel l = new JLabel("Daily Goals");
JButton b = new JButton();
Date date = new Date();
public ToDoPage() {
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(height, width); //NICHT HARDCODEN
this.setLayout(null);
this.setLocationRelativeTo(null);
this.setResizable(false);
SimpleDateFormat DateFor = new SimpleDateFormat("dd MMMM yyyy");
String stringDate = DateFor.format(date);
tf.setBounds(50, 130, 170, 25);
cb.setBounds(60, 150, 260, 40);
l3.setBounds(60, 180, 260, 40);
l4.setBounds(60, 210, 260, 40);
l5.setBounds(60, 240, 260, 40);
l1.setText("Today is: " + stringDate);
l1.setBounds(70, 10, 300, 40);
l.setBounds(87, 90, 260, 40);
l.setFont(new Font(null, Font.ITALIC, 20));
b.setBounds(230, 130, 25, 25);
b.addActionListener(this);
this.add(tf);
this.add(l2);
this.add(b);
this.add(l);
this.add(l1);
this.add(l3);
this.add(l4);
this.add(l5);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == b) {
String userInput = tf.getText();
cb.setText(userInput);
this.add(cb);
}
}
}
}
简答
Swing 是懒惰的,它不会自动更新 UI,当你可以更新时,相反,当你完成时,你需要触发一个新的布局和绘制通道。
添加...
getContentPane().revalidate();
getContentPane().repaint();
在this.add(cb);
长答案
不要从 JFrame
扩展,您不会向 class 添加任何新功能,您只是将自己锁定在一个用例中。
避免 null
布局,它们对您没有帮助。相反,花时间了解如何使用提供的布局管理 API。参见 Laying Out Components Within a Container
如果您打算生成一个值列表,那么您应该考虑使用 JTable
或 JList
。
有关详细信息,请参阅 How to Use Tables and How to Use Lists