2011-05-13 4 views
1

HY!Java의 TabbedPane 문제

jbed을 사용하여 TabbedPane을 만들고 싶습니다.

디자이너 : JForm에서 enter image description here

생성자 코드 :

initComponents(); 
    this.add(jTabbedPane1); 
    jTabbedPane1.addTab("Test", jPanel1); 
    jPanel1.add(jTable1); 

자동 세대 - 코드 :

private void initComponents() { 

     jTabbedPane1 = new javax.swing.JTabbedPane(); 
     jPanel1 = new javax.swing.JPanel(); 
     jScrollPane1 = new javax.swing.JScrollPane(); 
     jTable1 = new javax.swing.JTable(); 
     jButton_add = new javax.swing.JButton(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

     jPanel1.setMinimumSize(new java.awt.Dimension(550, 300)); 

     jTable1.setModel(new javax.swing.table.DefaultTableModel(
      new Object [][] { 
       {"dddsds", null, null, null}, 
       {null, null, null, null}, 
       {null, null, null, null}, 
       {null, null, null, null} 
      }, 
      new String [] { 
       "Title 1", "Title 2", "Title 3", "Title 4" 
      } 
     )); 
     jScrollPane1.setViewportView(jTable1); 

     javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); 
     jPanel1.setLayout(jPanel1Layout); 
     jPanel1Layout.setHorizontalGroup(
      jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(jPanel1Layout.createSequentialGroup() 
       .addContainerGap() 
       .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 530, Short.MAX_VALUE) 
       .addContainerGap()) 
     ); 
     jPanel1Layout.setVerticalGroup(
      jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(jPanel1Layout.createSequentialGroup() 
       .addContainerGap() 
       .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 287, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addContainerGap(27, Short.MAX_VALUE)) 
     ); 

     jButton_add.setText("add"); 
     jButton_add.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); 
     jButton_add.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       jButton_addActionPerformed(evt); 
      } 
     }); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) 
        .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() 
         .addGap(39, 39, 39) 
         .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
        .addGroup(layout.createSequentialGroup() 
         .addContainerGap() 
         .addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 579, Short.MAX_VALUE)) 
        .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() 
         .addGap(31, 31, 31) 
         .addComponent(jButton_add))) 
       .addContainerGap()) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addContainerGap() 
       .addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addGap(28, 28, 28) 
       .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addGap(18, 18, 18) 
       .addComponent(jButton_add) 
       .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
     ); 

     pack(); 
    }// </editor-fold> 

문제 :

jTable1가 보이지 않는 버튼입니다 jTabbedPane의 언데드가 아닌 jPanel.

답변

2

jPanel1jTable1을 두 번 추가하지 마십시오. initComponents()은 이미 jPanel1Layout을 사용하여 jPanel1jScrollPane1 (jTable1 포함)을 추가합니다. 그러나 귀하의 생성자에서 에 명시 적으로 jTable1을 추가하십시오.

initComponents(); 
this.add(jTabbedPane1); 
jTabbedPane1.addTab("Test", jPanel1); 

참고 그쪽으로 난 당신이 내용 창에 두 번 추가 jTabbedPane1와 같은 문제가 그런 줄 jPanel1.add(jTable1);

을 제거 한 다음과 같이 따라서 생성자는해야한다.

jTable1jTabbedPane1 안에 있지 않지만 프레임의 내용 창 안에 직접 있기 때문에 내가 만든 코드에서 Netbeans GUI 디자이너를 잘못 조작했다고 말할 수 있습니다. 패널을 처음부터 새로 디자인하거나 적어도 디자이너의 UI를 수정해야한다고 생각합니다.

중요한 점은 GroupLayout API를 사용하면 구성 요소가 자동으로 해당 컨테이너에 추가되므로 explcitily 추가해서는 안된다는 점입니다.

실제로 NetBeands UI 디자이너를 사용하지 말고 손으로 UI를 코딩하십시오. (수동으로 코딩하기에는 너무 복잡한 GroupLayout이 아니라).

+1

안녕하세요, 그냥 GUI가 netbeans와 함께 잘 작동합니다, 당신은 그것을 사용할 수 있습니다, 그리고 GUI가 다소 복잡한 경우 수동으로 작성하면 매우 복잡한 것입니다, 그럼 당신은 편집기를 다시 사용할 수 있습니다 나는 그것이 "손으로 UI 작성"에 대한 일반적인 조언이라고 생각하지 않는다. –

+0

"GUI가 단순하다면"실제 프로젝트에서 거의 발생하지 않는 사실을 제외하고 나는 완전히 당신의 의견을 두 번째로 ... 그러므로 , 항상 손으로 GUI를 코딩해야합니다. – jfpoilpret

1

여러 가지 이유가있을 수 있습니다 도와주세요 : 1. jPanel1는 잘못 컨테이너 잘못된 레이아웃을 가지고 있습니다. 3. jTable1이 제대로 초기화되지 않았습니다. 는 또한 순서 layout.setHorizontalGroup() 당신이 jPanel1, JTabbedPane1, JButton_add 추가를 참조하십시오 당신은 jScrollPane1를 추가해야하지 테이블 :

은 더 많은 코드 (sscce 가능한 경우)

편집을 게시 할 수 있습니다.