打开另一个 JFrame 时 JFrame 卡住了
JFrame stuck when opening another JFrame
EDIT2:测试过。这绝对是新 JPanel 的问题。
解决方案:
正如建议的那样,答案是我忘记明确地将我的 JPanel 设置到我的 JFrame 上。变化:
setContentPane(contentPanetagesliste);
至
frame.setContentPane(contentPanetagesliste);
对我有用!
我的问题是 JFrame 的一个奇怪行为。
在我的代码中,我的主框架上有一个单选按钮。按下它会打开另一个框架。
RadioBTNtagesliste.addActionListener (new ActionListener () {
public void actionPerformed(ActionEvent e) {
frame.setSize(590, 450); ...
在我的新框架中,我制作了一个 JPanel。在添加 JPanel 之前,另一个框架没有冻结,所以我相信这个问题与新的 JPanel 有关。
JPanel contentPanetagesliste;
contentPanetagesliste = new JPanel();
contentPanetagesliste.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPanetagesliste);
最后,我将一个 JScrollPane 添加到 JPanel(这就是我必须制作一个的原因)并使 JFrame 可见。
JScrollPane jsp = new JScrollPane(contentPanetagesliste);
frame.add(jsp);
frame.setVisible(true);
我完全不知道新的 JPanel 会如何干扰 Main JFrame 或位于 MainJFrame 之上的 JPanel。我希望你们中的一些人能帮助我。
编辑:因为有些人不清楚:卡住我的意思是没有反应,当我移动它时,它变成空白灰色。
上图:当我按下最右上角的单选按钮时,新的 window 打开,功能齐全,但旧的 window 卡住了。
image
有关其他信息,我将 post 来自我的动作侦听器的完整代码以及解释。
RadioBTNtagesliste.addActionListener (new ActionListener () {
public void actionPerformed(ActionEvent e) {
try {
if(RadioBTNtagesliste.isSelected() == true){
String Eintrag = HttpClass.httpRequestEintrag(usernamevar,EintragStringPK,"eintragTABLE");
JSONObject jsonObjectEintrag = new JSONObject(Eintrag);
int ProjektJSONlength = jsonObjectEintrag.length() - 1;
frame.setSize(590, 450);
JPanel contentPanetagesliste;
contentPanetagesliste = new JPanel();
contentPanetagesliste.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPanetagesliste);
double[] temp = new double[ProjektJSONlength+2];
temp[0] = 10;
temp[1] = 30;
for(int i = 0; i < ProjektJSONlength; i++){
temp[i+2] = 25;
}
double size[][] = {{2, 90, 90, 90, 90, 90,90, 2}, // Columns
temp}; // Rows
contentPanetagesliste.setLayout(new TableLayout(size));
String label[] = {"Eintrag Nr.", "Projekt", "Aktivität", "Dauer", "Beschreibung", "Symbol"};
JButton button[] = new JButton[label.length];
JTextField textfield[] = new JTextField[label.length];
for (int i = 0; i < label.length; i++) {
button[i] = new JButton(label[i]);
}
contentPanetagesliste.add(button[0], "1, 1");
contentPanetagesliste.add(button[1], "2, 1");
contentPanetagesliste.add(button[2], "3, 1");
contentPanetagesliste.add(button[3], "4, 1");
contentPanetagesliste.add(button[4], "5, 1");
contentPanetagesliste.add(button[5], "6, 1");
EintragStringPK = "Neu";
for (int key=0; key<=ProjektJSONlength;key++) {
JSONObject jsonObjectProjekteObjekt0 = jsonObjectEintrag.getJSONObject(String.valueOf(key));
String Eintraege = jsonObjectProjekteObjekt0.toString();
String EintragStringDauer = jsonObjectProjekteObjekt0.getString("dauer"); // String auslesen!!!
String EintragStringBEschreibung = jsonObjectProjekteObjekt0.getString("beschreibung"); // String auslesen!!!
String EintragStringProjektname = jsonObjectProjekteObjekt0.getString("projektname"); // String auslesen!!!
String EintragStringAktivitaet = jsonObjectProjekteObjekt0.getString("kategorie"); // String auslesen!!!
EintragStringPK = jsonObjectProjekteObjekt0.getString("pk_ei_id"); // String auslesen!!!
System.out.println("test" + key);
System.out.println(ProjektJSONlength);
String labelCONTENT[] = {EintragStringPK, EintragStringProjektname, EintragStringAktivitaet, EintragStringDauer, EintragStringBEschreibung, "Symbol"};
for (int i = 0; i < labelCONTENT.length; i++) {
textfield[i] = new JTextField(labelCONTENT[i]);
}
int keypone = key+2;
String keyString = Integer.toString(keypone);
contentPanetagesliste.add(textfield[0], "1, "+keyString);
contentPanetagesliste.add(textfield[1], "2, "+keyString);
contentPanetagesliste.add(textfield[2], "3, "+keyString);
contentPanetagesliste.add(textfield[3], "4, "+keyString);
contentPanetagesliste.add(textfield[4], "5, "+keyString);
contentPanetagesliste.add(textfield[5], "6, "+keyString);
}
JScrollPane jsp = new JScrollPane(contentPanetagesliste);
frame.add(jsp);
frame.setVisible(true);
System.out.println("ende");
}else{
frame.setVisible(false);
System.out.println("ende2");
}
System.out.println("ende3");
} catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.println("ende4");
}
});
解释:
我创建了 JFrame,然后是 JPanel。
创建一个数组和我的 Table 所需的其余部分,因为目标是使用来自 SQL 数据库的数据生成一个 table。
还有一个 HTTP 请求和一个循环来获取数据并将其放入 table 字段。
仍然在循环中,填充的 table 字段被添加到内容窗格中,并且 Jpanel 得到他的 JScrollPane 并且框架设置为可见。
我真的希望有人能帮助我,如果你有提出更好问题的提示,我会很高兴。
setContentPane(contentPanetagesliste);
应该明确设置为您创建的新框架,如下所示:frame.setContentPane(contentPanetagesliste);
。
EDIT2:测试过。这绝对是新 JPanel 的问题。
解决方案: 正如建议的那样,答案是我忘记明确地将我的 JPanel 设置到我的 JFrame 上。变化:
setContentPane(contentPanetagesliste);
至
frame.setContentPane(contentPanetagesliste);
对我有用!
我的问题是 JFrame 的一个奇怪行为。
在我的代码中,我的主框架上有一个单选按钮。按下它会打开另一个框架。
RadioBTNtagesliste.addActionListener (new ActionListener () {
public void actionPerformed(ActionEvent e) {
frame.setSize(590, 450); ...
在我的新框架中,我制作了一个 JPanel。在添加 JPanel 之前,另一个框架没有冻结,所以我相信这个问题与新的 JPanel 有关。
JPanel contentPanetagesliste;
contentPanetagesliste = new JPanel();
contentPanetagesliste.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPanetagesliste);
最后,我将一个 JScrollPane 添加到 JPanel(这就是我必须制作一个的原因)并使 JFrame 可见。
JScrollPane jsp = new JScrollPane(contentPanetagesliste);
frame.add(jsp);
frame.setVisible(true);
我完全不知道新的 JPanel 会如何干扰 Main JFrame 或位于 MainJFrame 之上的 JPanel。我希望你们中的一些人能帮助我。
编辑:因为有些人不清楚:卡住我的意思是没有反应,当我移动它时,它变成空白灰色。
上图:当我按下最右上角的单选按钮时,新的 window 打开,功能齐全,但旧的 window 卡住了。
image
有关其他信息,我将 post 来自我的动作侦听器的完整代码以及解释。
RadioBTNtagesliste.addActionListener (new ActionListener () {
public void actionPerformed(ActionEvent e) {
try {
if(RadioBTNtagesliste.isSelected() == true){
String Eintrag = HttpClass.httpRequestEintrag(usernamevar,EintragStringPK,"eintragTABLE");
JSONObject jsonObjectEintrag = new JSONObject(Eintrag);
int ProjektJSONlength = jsonObjectEintrag.length() - 1;
frame.setSize(590, 450);
JPanel contentPanetagesliste;
contentPanetagesliste = new JPanel();
contentPanetagesliste.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPanetagesliste);
double[] temp = new double[ProjektJSONlength+2];
temp[0] = 10;
temp[1] = 30;
for(int i = 0; i < ProjektJSONlength; i++){
temp[i+2] = 25;
}
double size[][] = {{2, 90, 90, 90, 90, 90,90, 2}, // Columns
temp}; // Rows
contentPanetagesliste.setLayout(new TableLayout(size));
String label[] = {"Eintrag Nr.", "Projekt", "Aktivität", "Dauer", "Beschreibung", "Symbol"};
JButton button[] = new JButton[label.length];
JTextField textfield[] = new JTextField[label.length];
for (int i = 0; i < label.length; i++) {
button[i] = new JButton(label[i]);
}
contentPanetagesliste.add(button[0], "1, 1");
contentPanetagesliste.add(button[1], "2, 1");
contentPanetagesliste.add(button[2], "3, 1");
contentPanetagesliste.add(button[3], "4, 1");
contentPanetagesliste.add(button[4], "5, 1");
contentPanetagesliste.add(button[5], "6, 1");
EintragStringPK = "Neu";
for (int key=0; key<=ProjektJSONlength;key++) {
JSONObject jsonObjectProjekteObjekt0 = jsonObjectEintrag.getJSONObject(String.valueOf(key));
String Eintraege = jsonObjectProjekteObjekt0.toString();
String EintragStringDauer = jsonObjectProjekteObjekt0.getString("dauer"); // String auslesen!!!
String EintragStringBEschreibung = jsonObjectProjekteObjekt0.getString("beschreibung"); // String auslesen!!!
String EintragStringProjektname = jsonObjectProjekteObjekt0.getString("projektname"); // String auslesen!!!
String EintragStringAktivitaet = jsonObjectProjekteObjekt0.getString("kategorie"); // String auslesen!!!
EintragStringPK = jsonObjectProjekteObjekt0.getString("pk_ei_id"); // String auslesen!!!
System.out.println("test" + key);
System.out.println(ProjektJSONlength);
String labelCONTENT[] = {EintragStringPK, EintragStringProjektname, EintragStringAktivitaet, EintragStringDauer, EintragStringBEschreibung, "Symbol"};
for (int i = 0; i < labelCONTENT.length; i++) {
textfield[i] = new JTextField(labelCONTENT[i]);
}
int keypone = key+2;
String keyString = Integer.toString(keypone);
contentPanetagesliste.add(textfield[0], "1, "+keyString);
contentPanetagesliste.add(textfield[1], "2, "+keyString);
contentPanetagesliste.add(textfield[2], "3, "+keyString);
contentPanetagesliste.add(textfield[3], "4, "+keyString);
contentPanetagesliste.add(textfield[4], "5, "+keyString);
contentPanetagesliste.add(textfield[5], "6, "+keyString);
}
JScrollPane jsp = new JScrollPane(contentPanetagesliste);
frame.add(jsp);
frame.setVisible(true);
System.out.println("ende");
}else{
frame.setVisible(false);
System.out.println("ende2");
}
System.out.println("ende3");
} catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.println("ende4");
}
});
解释:
我创建了 JFrame,然后是 JPanel。
创建一个数组和我的 Table 所需的其余部分,因为目标是使用来自 SQL 数据库的数据生成一个 table。
还有一个 HTTP 请求和一个循环来获取数据并将其放入 table 字段。 仍然在循环中,填充的 table 字段被添加到内容窗格中,并且 Jpanel 得到他的 JScrollPane 并且框架设置为可见。
我真的希望有人能帮助我,如果你有提出更好问题的提示,我会很高兴。
setContentPane(contentPanetagesliste);
应该明确设置为您创建的新框架,如下所示:frame.setContentPane(contentPanetagesliste);
。