我目前正在尝试为学校建立一个小型计划。如果单击复选框,则应显示其他元素。我在python中学到了你需要一个while循环,因为程序需要再次检查相同的行,你检查框是否被选中,但如果我放了一个循环,整个程序就不会启动。我不明白为什么。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class test extends JFrame {
private JCheckBox moredetailscheck;
private JTextField inputfielduser;
public static void main(String[] args) {
test venster = new test();
venster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
venster.setSize(800, 600);
venster.setVisible(true);
venster.setTitle("true");
venster.setResizable(false);
}
public test() {
setLayout(new FlowLayout());
moredetailscheck = new JCheckBox("checkbox", false);
add(moredetailscheck);
inputfielduser = new JTextField(15);
while(true) { // you want to let the program keep going over these lines
if(moredetailscheck.isSelected()) {
add(inputfielduser);
}
}
}
答案 0 :(得分:1)
如果单击复选框,则应显示其他元素。
因此,您可以将一个侦听器附加到JCheckBox,这里是一个ItemListener,它在JCheckBox的状态发生变化时响应。
我在python中学到了你需要一个while循环,因为程序需要再次检查相同的行,你检查框是否被选中
这称为"民意调查"并且需要线性控制台程序,您需要不断地从用户那里获得输入,再次使用线性控制台程序。时尚。在这些类型的程序中,程序员可以完全控制程序代码流,但这不是你想要的。
但如果我放一个循环,整个程序就不会开始。我不明白为什么。
那是因为你现在正在使用一个事件驱动的GUI库,那里有Swing库,并且通过在事件线程上调用while (true)
循环,你完全阻止它,渲染你的GUI无用。您的程序正在启动,但它无法构建GUI,绘制自己或监听事件。
解决方案:
while (true)
循环。同样,它对于简单的控制台程序很有用,但在这种情况下却不行。另外,您需要学习并使用Java naming conventions。变量名都应以较低的字母开头,而类名以大写字母开头。了解并遵循这一点将使我们能够更好地理解您的代码,并使您能够更好地理解其他代码。
例如:
import java.awt.event.ItemEvent;
import javax.swing.*;
public class TestCheckBox extends JPanel {
private static final long serialVersionUID = 1L;
private JCheckBox moreDetailsCheck = new JCheckBox("More Details", false);
private JTextField inputFieldUser = new JTextField(15);
public TestCheckBox() {
inputFieldUser.setEnabled(false);
add(moreDetailsCheck);
add(inputFieldUser);
// add a listener to the JCheckBox
moreDetailsCheck.addItemListener(e -> {
// if checkbox selected, enable the text field. else disable it
inputFieldUser.setEnabled(e.getStateChange() == ItemEvent.SELECTED);
});
}
private static void createAndShowGui() {
TestCheckBox mainPanel = new TestCheckBox();
JFrame frame = new JFrame("Test CheckBox");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> createAndShowGui());
}
}
答案 1 :(得分:0)
在Java中,AWT启动一个线程来自动处理事件;你只需让main
完成,程序就会继续运行,直到你拨打System.exit
。但是,您确实需要事件处理程序,其中存在任意数量的教程。
(顺便提一下,你的无限循环甚至在展示你的JFrame
之前就会出现。)