2010-10-14 3 views
1

Я пытаюсь использовать JSplitPane в Netbeans 6.9.1, но по какой-то причине я не могу настроить его должным образом. Например. Я добавляю jtree и jtable в jframe. Затем я использую «enclose in splitpane». Затем я установил ориентацию по вертикали (от горизонтали).
Проблема, когда я пытаюсь настроить расположение разделителя, я не могу разместить его там, где хочу. Либо он идет до , либо полностью вниз. После ручного расширения одной стороны, я получаю формат, близкий к тому, что я хочу. Я пытаюсь сделать то же самое и создать вторую jsplitpane в той же jform. Затем я пытаюсь заключить оба jsplitpane в другую splitpane, но порядок splitpanes будет отменен. Я делаю что-то неправильно или сплитпаны не работают нормально?jsplitpane в 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

+0

@willcodejavaforfood: хорошо, но что? – Cratylus

+0

Я читаю документы для JSplitPane, но на самом деле не уверен. Мог бы использовать какой-то код от вас действительно – willcodejavaforfood

ответ

1

Если вы хотите, чтобы они наоборот просто поменять местами дерева и таблицы, прежде чем выбрать, чтобы вложить их в Панель с разделителем. Сказав, что меня не удивит, если NetBeans позволяет вам выбирать компоненты слева и справа даже после этого.

Что касается делителя, я бы обычно использовал метод setDividerLocation(Double location), который принимает значение от 0,0 до 1,0. Это работает в процентах от того, где должен располагаться разделитель.

Метод, который вы используете setDividerLocation(intlocation), устанавливает абсолютное положение в значениях пикселей, и я подозреваю, что 5 - это не то, что вы хотите. Это также не позволит вам установить разделитель в место, которое сделает компонент меньшим, чем его предпочтительный размер, и это, безусловно, произойдет, когда вы установите его на 5.

Итак, если ваш экран высотой 400 пикселей, и вы хотите чтобы разделить его в середине, установите разделитель на 200.

Рекомендуемое чтение: How to Use Split Panes из учебника по Java.

+0

Если я поместил дерево слева от стола и приложил, их места поменялись местами. Если я положу таблицу слева, они меняются местами, но у них есть место, которое я хочу. Но почему это поведение? Что касается места divisor, если я использую setDivider (double), как вы говорите, делитель находится в порядке! Но знаете ли вы, почему макет работает так? Я должен поместить компоненты в последнюю очередь - первый заказ или что-то в NetBeans? Наконец, есть опция «порядок изменения», но по какой-то причине она не работает. Компоненты остаются там. – Cratylus

+0

Это похоже на то, как работает NetBeans, последнее приходит на первый заказ :) Теперь все в порядке? – willcodejavaforfood

+0

Да, спасибо. Последний вопрос. Вы используете дизайнеры gui? Правильно ли я их использую? – Cratylus