2017-05-05 43 views
1

EDIT2:測試它。這是新的JPanel定義的一個問題。當打開另一個JFrame時JFrame卡住

SOLUTION: 所提出的答案是,我忘了明確地設置我的JPanel到我的JFrame。變化:

setContentPane(contentPanetagesliste); 

frame.setContentPane(contentPanetagesliste); 

,它爲我的作品!


我的問題是一個奇怪的JFrame行爲。

在我的代碼中,我的MainFrame上有一個radioButton。當它被按下時,它會打開另一個Frame。

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數據庫中的數據生成一個表。

還有一個HTTP請求和一個循環來獲取數據並將其放入表字段。 仍然在循環中,已填充的表字段將添加到內容窗格中,並且Jpanel將獲取其JScrollPane並將框架設置爲可見。

我真的很希望有人能幫助我,如果您有提出更好的問題的提示,我會有一個開放的耳朵。

+1

我建議你創建一個JTable來保存數據並將JTable添加到滾動窗格和滾動窗格到JPanel和jpanel到JFrame – XtremeBaumer

+0

「卡住」是否意味着你不能移動窗口?或者窗口變得沒有反應?只是爲了澄清 – DCON

+0

我這樣做了,但我得到的錯誤:無效的佈局鍵,因爲我不能將按鈕添加到滾動面板似乎 – MansNotHot

回答

0

setContentPane(contentPanetagesliste);應顯式設置爲您創建的新框架,如下所示:frame.setContentPane(contentPanetagesliste);

+0

謝謝,但你以前的評論有幫助,只是沒有正確設置的JPanel導致了問題。也許你可以改變/編輯你的答案,所以我可以接受它? :) – MansNotHot

+0

@CoffeineConverter完成 – XtremeBaumer