打开另一个JFrame时,JFrame卡住

时间:2017-05-05 09:10:06

标签: java arrays jframe jpanel

EDIT2 :经过测试。它定义为新JPanel的一个问题。

: 提出的答案是,我忘了明确地将我的JPanel设置到我的JFrame上。变化

setContentPane(contentPanetagesliste);

frame.setContentPane(contentPanetagesliste);

对我有用!

我的问题是JFrame的奇怪行为。

在我的代码中,我的MainFrame上有一个radioButton。按下它时会打开另一个框架。

RadioBTNtagesliste.addActionListener (new ActionListener () {
    public void actionPerformed(ActionEvent e) {
                    frame.setSize(590, 450); ...

在我的新框架中,我制作了一个JPanel。在添加JPanel之前,另一个Frame没有冻结,所以我认为这个问题与新的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如何干扰主JFrame或位于MainJFrame上方的JPanel。我希望你们中的一些人可以帮助我。

编辑:因为对某些人来说并不清楚:卡住我的意思是没有反应,当我移动它时,它会变成灰色。

对于图像:当我按下单选按钮到最右上方时,新窗口打开,功能完全正常但旧窗口卡住了。

image

有关其他信息,我会发布动作监听器中的完整代码并附上说明。

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。

创建一个数组以及我的表所需的其余部分,因为目标是使用来自SQL DB的数据生成一个生成的表。

还有一个HTTPrequest和一个循环来获取数据并将其放入表字段中。 仍然在循环中,填充的表格字段被添加到内容窗格中,并且在Jpanel处获得他的JScrollPane并且框架被设置为可见。

我真的希望有人可以帮助我,如果你有提出更好问题的提示,我会有一个开放的耳朵。

1 个答案:

答案 0 :(得分:0)

setContentPane(contentPanetagesliste);应明确设置为您创建的新框架,如下所示:frame.setContentPane(contentPanetagesliste);