gpt4 book ai didi

Java Swing GUI 未显示使用多个类

转载 作者:行者123 更新时间:2023-11-30 06:04:14 24 4
gpt4 key购买 nike

我正在使用 gridbaglayout 制作一个 GUI 类,这很好。我想创建这个类的一个对象并从我的主类中“生成”它。然而,当我运行我的主课时,什么也没有发生。当我运行 GUI 类时,GUI 就会出现。这是怎么回事?

public class GUI extends JFrame {

JButton btnStart;
JPanel pnlRadio, pnlMain;
JLabel lblUsername, lblPassword, lblHerb;
JTextField txtUsername, txtPassword;
ButtonGroup btngrHerbs;
JRadioButton rdbHarralander, rdbRanarr, rdbToadflax;
GridBagConstraints gbc;

public GUI() {
pnlMain = new JPanel();
pnlMain.setLayout(new GridBagLayout());
gbc = new GridBagConstraints();

pnlRadio = new JPanel();

btnStart = new JButton("Start");
lblUsername = new JLabel("Username");
lblPassword = new JLabel("Password");
txtUsername = new JTextField();
txtPassword = new JTextField();
btngrHerbs = new ButtonGroup();
rdbHarralander = new JRadioButton("Harralander");
rdbRanarr = new JRadioButton("Ranarr");
rdbToadflax = new JRadioButton("Toadflax");

// Some layout stuff for gridbagconstraints, etc

gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 3;
gbc.gridwidth = 2;
pnlMain.add(btnStart, gbc);

btnStart.addActionListener(e ->{
synchronized(Main.lock){
Main.lock.notify();
}
this.setVisible(false);
});

}

public JPanel getUI() {
return pnlMain;
}

public static void main(String[] args) throws InvocationTargetException, InterruptedException {

JFrame frame = new JFrame("Example");
frame.getContentPane().add(new GUI().getUI());
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setVisible(true);
frame.pack();

}
}

然后是主类:

public class Main {

static Object lock = new Object();
static GUI gui = new GUI();

public static void main(String[] args) {

synchronized(lock) {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}

System.out.println("A");

}
}

所以当我运行 GUI 类时,什么也没有发生。 GUI 按预期显示,但是当我单击按钮时当然没有任何反应。当我启动主类时,GUI 甚至没有出现,并且我也没有在控制台上打印“A”。所以它似乎被困在等待那个锁对象了?

我想要的是主类等待按钮被按下,然后将 GUI 可见设置为 false 并在变量中保存一些值。我怎样才能实现这个目标?

最佳答案

首先要做的是完成 GUI 类,以便它显示一个 JFrame。这个

    setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(pnlMain); //need to add the panel to make it show
pack();
setVisible(true); //need to make frame visible

应该在构造函数中调用(添加为构造函数中的最后一行),并通过

进行测试
public static void main(String[] args) {
new GUI();
}

关于Java Swing GUI 未显示使用多个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51695763/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com