gpt4 book ai didi

java - GUI、JComboBox 和打开新窗口

转载 作者:行者123 更新时间:2023-12-02 04:21:09 24 4
gpt4 key购买 nike

我是 Java 新手,尤其是 GUI 新手,现在对我来说非常困惑。

我正在为类制作一个程序,该程序应该有一个菜单(我假设是 JComboBox),当选择一个选项时,该菜单会打开一个新窗口。我正在研究第一个选项,您单击“矩阵”,然后会弹出一个新窗口,其中包含两个名为“红色药丸”和“蓝色药丸”的按钮,这就是我碰壁的地方。

我已经能够创建一个新窗口(不确定这是否是打开新窗口的正确路线),但是,当我尝试将按钮添加到新弹出窗口时窗口什么也没有显示...

感谢您提供任何帮助或正确方向的指示!

public class MultiForm extends JFrame{

private JComboBox menu;
private JButton bluePill;
private JButton redPill;

private static String[] fileName = {"", "The Matrix", "Another Option"};

public MultiForm() {
super("Multi Form Program");
setLayout(new FlowLayout());
menu = new JComboBox(fileName);
add(menu);

TheHandler handler = new TheHandler();
menu.addActionListener(handler);
}

private class TheHandler implements ActionListener{
public void actionPerformed(ActionEvent event) {
********************************************************************
//Create a new window when "The Matrix" is clicked in the JCB
JFrame newFrame = new JFrame();
JPanel panel = new JPanel();
newFrame.setLayout(new FlowLayout());
newFrame.setSize(500, 300);
newFrame.setDefaultCloseOperation(newFrame.EXIT_ON_CLOSE);

Icon bp = new ImageIcon(getClass().getResource("Blue Pill.png"));
bluePill = new JButton("Blue Pill", bp);
newFrame.add(bluePill);

Icon rp = new ImageIcon(getClass().getResource("Red Pill.png"));
redPill = new JButton("Red Pill", rp);
newFrame.add(redPill);

add(panel);
newFrame.setVisible(true);

}
}

public static void main(String[] args) {
MultiForm go = new MultiForm();
go.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
go.setSize(400, 200);
go.setVisible(true);
}
}

最佳答案

I tried doing newFrame.add(BluePill) and it created a button that was the size of the entire window and it would not allow me to add both buttons that way

这是因为框架默认使用 BorderLayout。除非您另外指定,否则组件将添加到 CENTER 位置,但是,BorderLayout 只允许在其五个可用位置中的每个位置管理一个组件,所以您只能看到最后添加的组件。

参见How to Use BorderLayout了解更多详情

so I figured that wasn't the correct way

这是正确的方法,您只需要使用布局管理器,它可以容纳更多组件或更改添加按钮的位置

在这个小例子中,我只使用了 FlowLayout,但您可以使用任何能够给您带来所需效果的内容

JFrame newFrame = new JFrame();
newFrame.setLayout(new FlowLayout());
newFrame.setDefaultCloseOperation(newFrame.EXIT_ON_CLOSE);

bluePill = new JButton("Blue Pill");
newFrame.add(bluePill);
redPill = new JButton("Red Pill");
newFrame.add(redPill);

newFrame.pack();
newFrame.setVisible(true);

作为一般经验法则,我不喜欢将这样的组件直接添加到顶级容器中,我更喜欢使用中间容器,例如 JPanel,这给了我更多可能性以便重复使用,但这就是我。

您还应该仅在框架实际准备好时才使其可见,否则您可能会发现有时组件不会显示

参见Laying Out Components Within a Container了解更多详情

关于java - GUI、JComboBox 和打开新窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32750611/

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