gpt4 book ai didi

java - 从 JButton Issue 打开一个新类 (JFrame)

转载 作者:太空宇宙 更新时间:2023-11-04 10:39:13 27 4
gpt4 key购买 nike

只是免责声明:我已经检查了 Stack Overflow 的大部分内容,但在网站上找不到答案。我也在 Reddit 上问了一些好人,但只修复了一半。

所以,我正在尝试创建一个 GUI 应用程序,而且我对 Java 语言很陌生(非常非常新 - 所以我很有可能犯了一个菜鸟错误)。我已经为我的“StartScreen”设计了界面,我想让button1来打开我的第二个类(class)(“NewUsers”)。

我正在使用 GUI 编辑器,我认为这可能是我的问题的原因,作为我在线问题的答案,我刚刚看到人们添加

this.dispose();
new JFrame().setVisible(true);

但这对我不起作用。我设法修复了它,直到某个点,现在我可以通过单击关闭框架,但我仍然不知道如何从按钮打开另一个框架:(。这是我的 Frame1('StartScreen') 代码。Frame2 目前只是一个空窗口,但用于测试目的。

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;


public class StartScreen {
private final JFrame frame;
private JButton newUserButton;
private JButton existingUserButton;
private JButton nonUserBookingButton;
private JPanel panell;

public StartScreen() {
this.frame = new JFrame("StartScreen");
frame.setContentPane(panell);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
newUserButton.addActionListener(this::onNewUserClicked);
}

public static void newuserscall

() {
NewUsers newuserscall = new NewUsers();
}


private void onNewUserClicked(ActionEvent event) {
frame.setVisible(false);

}

public static void main(String[] args) {
new StartScreen();
}

{
// GUI initializer generated by IntelliJ IDEA GUI Designer
// >>> IMPORTANT!! <<<
// DO NOT EDIT OR ADD ANY CODE HERE!
$$$setupUI$$$();
}

/**
* Method generated by IntelliJ IDEA GUI Designer
* >>> IMPORTANT!! <<<
* DO NOT edit this method OR call it in your code!
*
* @noinspection ALL
*/
private void $$$setupUI$$$() {
panell = new JPanel();
panell.setLayout(new GridBagLayout());
panell.setPreferredSize(new Dimension(600, 400));
final JPanel spacer1 = new JPanel();
GridBagConstraints gbc;
gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 4;
gbc.fill = GridBagConstraints.VERTICAL;
gbc.insets = new Insets(30, 0, 0, 0);
panell.add(spacer1, gbc);
newUserButton = new JButton();
newUserButton.setText("Button");
gbc = new GridBagConstraints();
gbc.gridx = 1;
gbc.gridy = 2;
gbc.gridwidth = 2;
gbc.fill = GridBagConstraints.BOTH;
panell.add(newUserButton, gbc);
existingUserButton = new JButton();
existingUserButton.setText("Button");
gbc = new GridBagConstraints();
gbc.gridx = 1;
gbc.gridy = 4;
gbc.gridwidth = 2;
gbc.fill = GridBagConstraints.BOTH;
panell.add(existingUserButton, gbc);
nonUserBookingButton = new JButton();
nonUserBookingButton.setText("Button");
gbc = new GridBagConstraints();
gbc.gridx = 1;
gbc.gridy = 6;
gbc.gridwidth = 2;
gbc.fill = GridBagConstraints.BOTH;
panell.add(nonUserBookingButton, gbc);
final JPanel spacer2 = new JPanel();
gbc = new GridBagConstraints();
gbc.gridx = 1;
gbc.gridy = 3;
gbc.gridwidth = 2;
gbc.fill = GridBagConstraints.VERTICAL;
panell.add(spacer2, gbc);
final JPanel spacer3 = new JPanel();
gbc = new GridBagConstraints();
gbc.gridx = 2;
gbc.gridy = 5;
gbc.fill = GridBagConstraints.VERTICAL;
gbc.insets = new Insets(0, 250, 0, 0);
panell.add(spacer3, gbc);
final JPanel spacer4 = new JPanel();
gbc = new GridBagConstraints();
gbc.gridx = 1;
gbc.gridy = 5;
gbc.fill = GridBagConstraints.VERTICAL;
panell.add(spacer4, gbc);
final JPanel spacer5 = new JPanel();
gbc = new GridBagConstraints();
gbc.gridx = 2;
gbc.gridy = 1;
gbc.fill = GridBagConstraints.VERTICAL;
gbc.insets = new Insets(25, 0, 0, 0);
panell.add(spacer5, gbc);
final JLabel label1 = new JLabel();
label1.setText("Label");
gbc = new GridBagConstraints();
gbc.gridx = 2;
gbc.gridy = 0;
panell.add(label1, gbc);
final JPanel spacer6 = new JPanel();
gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 6;
gbc.fill = GridBagConstraints.VERTICAL;
gbc.insets = new Insets(30, 0, 0, 0);
panell.add(spacer6, gbc);
final JPanel spacer7 = new JPanel();
gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 2;
gbc.fill = GridBagConstraints.VERTICAL;
gbc.insets = new Insets(30, 0, 0, 0);
panell.add(spacer7, gbc);
}

/**
* @noinspection ALL
*/
public JComponent $$$getRootComponent$$$() {
return panell;
}
}

提前致谢!我希望你们中的一些人能找到一种方法来修复我的代码:(

问候

最佳答案

好吧,我首先要说的是,你是对的:永远不要使用 GUI 生成器。我什至不是说当你试图学习时,我的意思是永远不要使用它。它主要用于构建概念原型(prototype),而不是让您将其用于学习或生产代码。下面是一个为您清理的更精确的示例,但在您的特定示例中,您需要添加您的

new JFrame().setVisible(true);

onNewUserClicked 函数内。另外,请注意,当您这样做时,您正在创建一个空框架,这将是您的操作系统创建它所需的绝对最小大小,因为其中没有任何内容,您从未打包该框架,也从未手动和显式设置大小,因此请检查显示器的左上角区域 - 它就在那里。

就清洁度而言,这里可能更接近您想要的。

public class Foo {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
final JFrame jf = new JFrame();
JPanel jp = new JPanel();
JButton jb = new JButton("New Frame");
jb.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jf.setVisible(false);
new JFrame().setVisible(true);
}
});
jp.setLayout(new FlowLayout());
jp.add(jb);
jf.setContentPane(jp);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
jf.pack();
}
}
}
}

我之所以说更干净,是因为 LayoutManager 的控制。 GUI 构建器(例如您使用的 GUI 构建器)总是倾向于使用 GridBagLayout,因为它更容易动态(根据用户输入)精确地放置内容。但它生成的代码难以管理。当您考虑到如果扩展或收缩 GUI,GridBagLayout 对此不灵活时,情况会变得更糟,因此现在您的组件在从 GUI 生成器拖动它们时完全卡在放置它们的位置。正确使用正确的 LayoutManager 将为您提供灵活且可管理的 GUI。查看此 Oracle 指南以获取更多信息和帮助:https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html

关于java - 从 JButton Issue 打开一个新类 (JFrame),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49184572/

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