2011-02-02 2 views
1

Я бы хотел, чтобы jsplitPane и swap правый компонент левым компонентом во время запуска моей программы. Я установил местоположение подразделения около 0,2. когда я поменял свой левый компонент и правый компонент и установил положение разделения около 0,8; возникает проблема с jSplitPane. Он заблокирован, и я не могу переместить divisor. также после этого; когда я пытаюсь назначить другой компонент правой или левой стороне JSplitPane, компоненты появятся bollixed. Я попытался методом setDivisionLocation() перед заменой правой и левой компонент; но он не эффективен. а также перекрасить() метод .... пожалуйста, руководство меняjava: Проблема с JSplitpane

приветы ... Саяд

ответ

2

Я думаю, ваша проблема в том, что вы добавляете компонент в два раза (что может действительно сделать думает выглядеть странно). Например, вы делаете что-то вроде: split.setLeftComponent(split.getRightComponent()).

Так что, когда вы делаете своп вам необходимо удалить компоненты первого:

private static void swap(JSplitPane split) { 
    Component r = split.getRightComponent(); 
    Component l = split.getLeftComponent(); 

    // remove the components 
    split.setLeftComponent(null); 
    split.setRightComponent(null); 

    // add them swapped 
    split.setLeftComponent(r); 
    split.setRightComponent(l); 
} 

И демка здесь (также перемещает местоположение делителя):

before after

public static void main(String[] args) { 
    JFrame frame = new JFrame("Test"); 

    final JSplitPane split = new JSplitPane(
      JSplitPane.HORIZONTAL_SPLIT, 
      new JLabel("first"), 
      new JLabel("second")); 

    frame.add(split, BorderLayout.CENTER); 
    frame.add(new JButton(new AbstractAction("Swap") { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      // get the state of the devider 
      int location = split.getDividerLocation(); 

      // do the swap 
      swap(split); 

      // update the devider 
      split.setDividerLocation(split.getWidth() - location 
        - split.getDividerSize()); 
     } 


    }), BorderLayout.SOUTH); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(400, 300); 
    frame.setVisible(true); 
} 
+0

Точно ... этот код: GUI6.gui6.jSplitPane1.setRightComponent (null); GUI6.gui6.jSplitPane1.setLeftComponent (null); был ключом к проблеме. Я попробовал метод removeAll() раньше. Но это лучший способ. Спасибо огромное ! – sajad

+0

Нет проблем! :) :) – dacwe

Смежные вопросы