2011-05-13 8 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の下にあり、undeではありませんjPanelです。

複数の理由が考えられます

答えて

2

jPanel1にはjTable1を2回追加しないでください。 initComponents()は、すでにjPanel1Layoutを使用してjPanel1jScrollPane1(これにはjTable1を含む)を追加します。しかし、あなたのコンストラクタでは、jTable1をもう一度jPanel1に明示的に追加します。したがって、次のようにあなたのコンストラクタは単に次のようになります。

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

注意股関節私は、あなたがコンテンツ・ペインに二度追加されjTabbedPane1、同じ問題を抱えているラインjPanel1.add(jTable1);

を削除しました。

jTable1jTabbedPane1の中ではなく、フレームのコンテンツペインのすぐ内側にあるため、おそらくNetbeans GUIデザイナーの操作を悪くしたと言います。私はあなたのパネルをゼロから再設計するか、少なくともデザイナーのUIを変更する必要があると思います。

重要なポイントは、GroupLayout APIを使用すると、コンポーネントが自動的にそのコンテナに追加されるため、明示的に追加しないでください。

実際には、NetBeands UIデザイナーを使用せず、手作業でUIをコーディングしてください(手動でコード化するには複雑すぎるGroupLayoutでは使用できません)。

+1

こんにちは、単純にguiがシンプルであれば、ネットビーンでうまく動作します。あなたはそれを使うことができます。guiがかなり複雑な場合は、手で書くことは非常に複雑になります。私はそれが "UIを手で書く"という一般的なアドバイスだとは思わないが、 –

+0

「GUIがシンプルなら実際のプロジェクトではほとんど起こりえない」という事実を除いて私はあなたのコメントを完全に2番目にしている。手作業でGUIをコード化する必要があります。 – jfpoilpret

1

を助けてください: 1. jPanel1間違ったレイアウト 2. thisが間違っコンテナでいます。 3. jTable1が正しく初期化されていません。

だけ(sscce可能な場合)をより多くのコードを投稿

EDIT: あなたがいないテーブル jScrollPane1を追加する必要があります。またオーダーlayout.setHorizo​​ntalGroup(参照) あなたはjPanel1、JTabbedPane1、JButton_addを追加します。