打开另一个 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);