Class Tracker设置为Hide_on_Close,这是创建我的表单的原因。 我有一个开关,我试图首先打开表单,如果它从未打开过,然后在第二次调用开关时重新显示包含所有数据的SAME表单。
我只是在学习编码而且我不知道如何重新打开相同的表格。我可以打开它的新实例,但所有数据都已消失。
`public class Zoner extends JFrame {
public JTextPane pane;
public JMenuBar menuBar;
public JToolBar toolBar;
Tracker tracker1 = null;
`Globals.comboBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
switch (i){
case 0 :
if(tracker1 == null) {
tracker1 = new Tracker();
} else {
JOptionPane.showMessageDialog(null, "Same form");
tracker1.setVisible(true);
}
break;
The code for Class Tracker is as follows... Removed all the swing ui stuff..
class Tracker {
private Integer wHitCounter = 0 ;
private Integer COCCounter = 0 ;
private JFrame frame1;
public Tracker()
{
// Create form
Object choice =(Globals.comboBox )
.getSelectedItem();
JFrame frame = new JFrame("Zoner: " + choice);
frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
frame.setSize(1024,850);
Container contentPane = frame.getContentPane();
//Set up Gui form
SpringLayout layout = new SpringLayout();
contentPane.setLayout(layout);
pack();
frame.setVisible(true);
}
public void setVisible(boolean bool) {
frame1.setVisible(bool);
}
}
更新了行frame1.setVisible(bool)上的崩溃; 代码中的代码异常" AWT-EventQueue-0"显示java.lang.NullPointerException
答案 0 :(得分:1)
首先,您应该知道有2个JFrame
个对象:
JFrame
。当您创建Tracker
的实例时,您还要创建新的JFrame
Tracker
在其中构建了JFrame
。这意味着当您创建Tracker
对象时,您将创建2个JFrame
个对象(Tracker
对象,即JFrame
,以及{{1在JFrame
)内。
首先删除Tracker
,然后在字段中指定您的框架:
extends JFrame
您现在可以公开一种方法class Tracker {
private JFrame frame;
public Tracker() {
//...
}
}
,允许您随意显示/隐藏您的框架:
setVisible
这会修复你的class Tracker {
private JFrame frame;
public Tracker() {
//...
}
public void setVisible(boolean bool) {
frame.setVisible(bool);
}
}
课程。现在为switch语句。
您可以使用布尔值代替Tracker
。您可以int RunTracker1
而不是RunTracker1 = 1
。您还应该将该变量的第一个字母设为小写:
RunTracker1 = true
但这个变量根本不需要。相反,将if(!runTracker1) {
//...
runTracker1 = true;
}
变量放在开关之前,可能在您所在的类的字段中:
Tracker tracker1
然后您可以查看Tracker tracker1 = null;
switch(i) {
case 0:
break;
}
是否tracker1
来确定是否已创建表单:
null
请注意我如何将Tracker tracker1 = null;
switch(i) {
case 0:
if(tracker1 == null) {
tracker1 = new Tracker();
} else {
//display
}
break;
}
更改为Tracker1
,以避免变量和类型之间存在歧义。变量应以小写字母开头,类型(classes / interfaces / enums)以大写字母开头。
现在您正在保留tracker1
(可能在字段中),如果已经创建了它,可以调用它上面的方法:
Tracker