当前位置: 首页 > 知识库问答 >
问题:

打开另一个JFrame时JFrame卡住

闾丘坚诚
2023-03-14

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);

最后,我向JPanel添加了一个JScrollPane(这就是我必须创建一个JScrollPane的原因),并使JFrame可见。

JScrollPane jsp = new JScrollPane(contentPanetagesliste);
frame.add(jsp);


frame.setVisible(true);

我完全不知道新的JPanel如何干扰主JFrame或位于主JFrame之上的JPanel。我希望你们中的一些人能帮助我。

编辑:因为有些人不清楚:我说的卡住是指没有反应,当我移动它时,它变成了空白灰色。

图片:当我按下右上角的单选按钮时,新窗口打开,功能齐全,但旧窗口被卡住了。

图像

为了获得更多信息,我将发布我的动作监听器的完整代码,并给出解释。

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数据库中的数据生成一个生成的表。

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

我真的希望有人能帮我,如果你有提出更好问题的建议,我愿意倾听。

共有1个答案

董俊
2023-03-14

setContentPane(contentPaneTageListe)应该显式设置为您创建的新框架,如下所示:frame。setContentPane(ContentPaneTageListe)

 类似资料:
  • 问题内容: 我有一个JFrame和JPanel, 里面装满了 带有 动作监听器的Jsomethings 。当用户单击一个对象时,我想打开另一个JFrame。这是我所做的: (RejectApp调用一个新的JFrame。)因此,另一个JFrame在屏幕上打开,带有更多选项。它可以正常工作(到目前为止),但是我想知道这个标准吗?我的意思是这样调用main方法?另一个问题是,不使用cardlayout(

  • 我有3个不同的JFrames。一个是一个登录页面,另一个有,第三个是主页。现在我想要的是,当我们登录时,我想在登录页面上方显示,并在完成进度到100%时,我想关闭两个框架并打开第三个,这是主页。请好心帮我完成这项工作。谢谢//这是代码部分。 }//这打开我的进度条的第二个JFrame //在Progressbar页面的下一页,我有这个代码 //现在我想要的是,在进度条完成后,我想处理登录页面和只打

  • 问题内容: 我下棋。我写了3节课。如果是游戏则为第一。(棋盘,棋子等),另外一个用于菜单。(新,打开,设置时间等按钮) 他们两个都使用JFrame。 我想将上述两个类都放在第3类中。例如,“游戏”窗口在左侧,菜单在右侧。第三类还将通过JFrame显示整个应用程序。 怎么做? 问题答案: 您不能将一个JFrame放入另一个。您在这里有几个设计选择。您可以将JFrames更改为JPanels。这可能是

  • 问题内容: 我有一JFrame堂课,它是在Netbeans的设计部分制作的。我正在尝试创建一个登录按钮,该按钮将关闭当前框架并打开另一个框架,无论如何我可以这样做吗? 我努力了: 但我希望它在设计部分中可编辑! 问题答案: 双击NETBEANS中的“登录”按钮,或在Click事件上添加事件监听器(ActionListener)

  • 问题内容: 我有一个主JFrame,其中具有用于不同功能的各种面板,人们可以在其中进行计算。我想在用户单击第一个计算按钮时打开一个新的JFrame并用作“输出”窗口(如果您熟悉它们,则类似于SPSS输出窗口)。 New JFrame将是完全独立的,并且将具有其自己的菜单栏。简单的JDialog并不是解决之道。 问题答案: 无法抗拒,简单地不同意答案); 和 我想在用户单击第一个计算按钮时打开一个新

  • 问题内容: 我试图在弹出新框架时禁用“主” 。我想要它,所以您不能在该框架上单击或拖动任何东西。我尝试将新框架设为a ,但这并没有禁用其他框架。我还查看了有关此的另一篇文章,建议将其设置为a,但仍然无法正常工作。我真的需要帮助。谢谢。这是我正在使用的代码,他们有什么问题吗? 代表“主”框架。 问题答案: 您已经设置了JDialog#setModal或JDialog#ModalityTypes,可能