我正在创建一个测验并创建了一个带有JFrame的类,其类似于主菜单 . 在这个菜单上,我创建了一个JButton,我想打开单独的JDialog(它将包含问题等) .
JDialog是一个名为questionDialog.java的独立类
我相信你必须实现一个调用setVisible(true)的动作监听器,但是当我这样做时,我得到一个无法对非静态方法setvisible错误进行静态引用 .
任何帮助将不胜感激,我正在使用eclipse和Jigloo进行GUI
这是我的主菜单JFrame类中的代码,特别是按钮的代码我要打开新的JDialog public static void main(String [] args){SwingUtilities.invokeLater(new Runnable(){public void run(){ 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();
}
}
}
3 回答
我认为当你在main(这是一个静态方法)时,你可能正在尝试对非静态成员做某事 . 您应该只使用main来创建一个实例,然后调用该实例的某个方法 . 我在下面放了一些工作代码:
这是你应该做的 .
摆脱
JDialog
类中的main
方法 . 您的应用程序应该只有一个main
方法,并且应该在您的JFrame
类中 .不要创建新的
JFrame
将其传递给对话框 .要在按钮上打开它,只需创建一个
new questionDialog()
将当前帧传递给它 . 像这样的东西Bonus
您正在收到
questionDialog.setVisible(true)
的错误,因为setVisible
是一个实例方法,并且您尝试以静态方式调用它 . 您需要创建对话框类的new
实例来调用它 .使用Java命名约定 . class 名称以大写字母开头 .
questionDialog
→QuestionDialog
在主菜单中写下以下内容