gpt4 book ai didi

java - 使 JButton 在一个类中打开单独的 JDialog 类

转载 作者:行者123 更新时间:2023-12-01 23:06:33 26 4
gpt4 key购买 nike

我正在创建一个测验,并创建了一个带有 JFrame 的类,其行为类似于主菜单。在此菜单上,我创建了一个 JButton,我想打开单独的 JDialog(其中包含问题等)。

JDialog 是一个名为 QuestionDialog.java 的独立类

我相信您必须实现一个调用 setVisible(true) 的操作监听器,但是当我这样做时,我收到无法对非静态方法 setvisible 进行静态引用的错误。

任何帮助将不胜感激,我正在使用 eclipse 和 Jigloo 作为 GUI

这是我的主菜单 JFrame 类中的代码,特别是我想要打开新 JDialog 的按钮的代码 公共(public)静态无效主(字符串[] args){ SwingUtilities.invokeLater(new Runnable() { 公共(public)无效运行(){ NewJFrame inst = new NewJFrame(); inst.setLocationRelativeTo(null); inst.setVisible(true); } }); }

 startButton = new JButton();
getContentPane().add(startButton);
startButton.setText("Start Quiz");
startButton.setBounds(454, 239, 65, 23);

这是给我错误的代码

startButton = new JButton();
getContentPane().add(startButton);
startButton.setText("Start Quiz");
startButton.setBounds(454, 239, 65, 23);
startButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionevent)
{
questionDialog.setVisible(true);
}
});

这是单独的 JDialog 类的代码

package ZillionaireGUI;

import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class questionDialog extends javax.swing.JDialog {

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame frame = new JFrame();
questionDialog inst = new questionDialog(frame);
inst.setVisible(true);
}
});
}

public questionDialog(JFrame frame) {
super(frame);
initGUI();
}

private void initGUI() {
try {
setSize(400, 300);
} catch (Exception e) {
e.printStackTrace();
}
}
}

最佳答案

这是你应该做的。

  1. 删除 JDialog 类中的 main 方法。您的应用程序应该只有一个 main 方法,并且应该位于您的 JFrame 类中。

  2. 不要创建新的 JFrame 将其传递到对话框。

  3. 要通过单击按钮打开它,只需创建一个将当前框架传递给它的new QuestionDialog()。像这样的事情

    public class MyFrame extends JFrame {
    public MyFrame() {
    JButton but = new JButton("but");
    but.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e) {
    QuestionDialog dialog = new QuestionDialog(MyFrame.this);
    dialog.setVisible(true);
    }
    });
    }

    public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable(){
    public void run() {
    new MyFrame();
    }
    });
    }
    }

    public class QuestionDialog extends JDialog {
    public QuestionDialog(Frame parent) {
    super(parent);
    }
    }
<小时/>

奖金

  • 您在执行 questionDialog.setVisible(true) 时遇到错误,因为 setVisible 是一个实例方法,而您尝试以静态方式调用它。您需要创建对话框类的实例来调用它。

  • 使用 Java 命名约定。类名以大写字母开头。
    questionDialogQuestionDialog

关于java - 使 JButton 在一个类中打开单独的 JDialog 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22662285/

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