2010-10-14 44 views
1

我想在Netbeans 6.9.1中使用JSplitPane,但由于某种原因,我无法正确配置它。例如。 我在jframe中添加了一个jtree和一个jtable。然后我使用“分隔窗格”。 然后我将方向设置为垂直(从水平方向)。
问题,当我尝试调整分隔位置时,我无法将其放在我想要的位置。要么它一路向上 或一路下降。手动扩展一边后,我得到一个接近我想要的格式。 我尝试做同样的事情,并在同一个jform中创建第二个jsplitpane。 然后我尝试将两个jsplitpane都放入另一个分割面板中,但分割面板的顺序相反。 我做错了什么或splitpanes工作不正常?jsplitpane in netbeans

感谢

UPDATE

public class Testing extends javax.swing.JFrame { 

    /** Creates new form Testing */ 
    public Testing() { 
     initComponents(); 
    } 

    /** This method is called from within the constructor to 
    * initialize the form. 
    * WARNING: Do NOT modify this code. The content of this method is 
    * always regenerated by the Form Editor. 
    */ 
    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code"> 
    private void initComponents() { 

     jSplitPane1 = new javax.swing.JSplitPane(); 
     jScrollPane2 = new javax.swing.JScrollPane(); 
     jTable1 = new javax.swing.JTable(); 
     jScrollPane1 = new javax.swing.JScrollPane(); 
     jTree1 = new javax.swing.JTree(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
     setName("Form"); // NOI18N 

     jSplitPane1.setDividerLocation(5); 
     jSplitPane1.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT); 
     jSplitPane1.setName("jSplitPane1"); // NOI18N 

     jScrollPane2.setName("jScrollPane2"); // NOI18N 

     jTable1.setModel(new javax.swing.table.DefaultTableModel(
      new Object [][] { 
       {null, 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" 
      } 
     )); 
     jTable1.setName("jTable1"); // NOI18N 
     jScrollPane2.setViewportView(jTable1); 

     jSplitPane1.setLeftComponent(jScrollPane2); 

     jScrollPane1.setName("jScrollPane1"); // NOI18N 

     jTree1.setName("jTree1"); // NOI18N 
     jScrollPane1.setViewportView(jTree1); 

     jSplitPane1.setRightComponent(jScrollPane1); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addContainerGap() 
       .addComponent(jSplitPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
       .addGap(258, 258, 258)) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addContainerGap() 
       .addComponent(jSplitPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
     ); 

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

我的钱是因为你做错了什么:) – willcodejavaforfood 2010-10-14 07:39:46

+0

@willcodejavaforfood:好的,但是什么? – Cratylus 2010-10-14 07:51:18

+0

我正在阅读JSplitPane的文档,但并不确定。可以使用你的一些代码: – willcodejavaforfood 2010-10-14 07:54:09

回答

1

如果你希望他们周围的其他方法只是交换树和表格的地方,你选择它们放在一个之前JSplitPane的。话虽如此,如果NetBeans允许您在完成此操作后选择左侧/右侧组件,也不会感到意外。

至于分频器,我通常使用setDividerLocation(Double location)方法,它取值在0.0和1.0之间。这是分配器应该位于的位置的百分比。

您正在使用的方法setDividerLocation(intlocation)设置像素值的绝对位置,我怀疑5不是你想要的。它也不会让你设置分割器到一个位置,使一个组件小于它的首选大小,这是肯定会发生什么时,你将它设置为5.

因此,如果你的屏幕是400像素高,你想在中间分割它将分隔符设置为200.

推荐的阅读是从Java教程轨迹中选择How to Use Split Panes

+0

如果我把树放在桌子的左边并围起来,它们的位置就被交换了。如果我把桌子放在左边,他们会被换掉,但他们有我想要的位置。但是,为什么这种行为呢?关于除数位置,如果我像你说的那样使用setDivider(double),那么除数就放在了!但是你知道为什么布局可以这样工作吗?我必须将组件放在最后一个顺序或NetBeans中的某些东西中?最后还有一个选项“更改订单”,但由于某种原因它不起作用。组件停留在那里。 – Cratylus 2010-10-14 09:14:44

+0

这似乎是NetBeans的工作方式,最后是第一顺序:)现在是否一切正常? – willcodejavaforfood 2010-10-14 09:16:47

+0

是的,谢谢。最后一个问题。你使用gui设计师吗?我正确地使用gui设计师吗? – Cratylus 2010-10-14 09:52:30