2013-07-29 4 views
1

У меня есть панель, которая разделена на две части с BoxLayout.X_AXIS:JScrollPane увеличивает его размер

public TabsPanel() { 
     setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); 
     add(createLeftPanel()); 
     add(createRightPanel()); 
} 

Каждых левые и правые панели имеют следующую структуру: внешнюю панель с BorderLayout, и внутренней панелью в BorderLayout.CENTER из внешняя панель, которая, в свою очередь, имеет BoxLayout.Y_AXIS и несколько компонентов сверху вниз. Правая панель имеет JTextArea с JScrollPane в качестве одного из его компонентов:

protected JPanel createRightPanel() { 
     JPanel pane = new JPanel(); 
     pane.setLayout(new BorderLayout()); 

     JPanel panel = new JPanel(); 
     panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); 

     JTextArea label = createLabel(); 

     JScrollPane scroll = new JScrollPane(label); 
     scroll.setMaximumSize(new Dimension(500, 200)); 
     panel.add(Box.createRigidArea(new Dimension(0,106))); 
     panel.add(scroll); 

     JPanel panel_buttons = new JPanel(); 
     panel_buttons.setLayout(new BoxLayout(panel_buttons, BoxLayout.LINE_AXIS)); 
     panel_buttons.setAlignmentX(Component.CENTER_ALIGNMENT); 

     Font font_text = new Font("Georgia", Font.PLAIN, 20); 

     JButton[] buttons = new JButton[2]; 
     buttons[0] = new JButton("Clear"); 
     buttons[1] = new JButton("Exit"); 
     for (int i = 0; i < buttons.length; i++) { 
      buttons[i].setMaximumSize(new Dimension(120, 40)); 
      buttons[i].setFont(font_text); 
      panel_buttons.add(buttons[i]); 
      if (i == 0) 
       panel_buttons.add(Box.createRigidArea(new Dimension(40, 0))); 
      buttons[i].addActionListener(new TextActionListener(label)); 
     } 

     panel.add(Box.createRigidArea(new Dimension(0,20))); 
     panel.add(panel_buttons); 

     pane.add(panel, BorderLayout.CENTER); 
     return pane; 
    } 

Когда текст выходит за пределы полосы прокрутки появляются и я могу переместить их и читать текст. Похоже, все в порядке, но когда я либо нажимаю любое место за пределами области прокрутки, либо даже перемещаю указатель, панель прокрутки перемещается влево и растет вниз. Он не меняет свою ширину, но сдвигается влево, потому что область между ней и границами правой панели увеличивается. Соответственно, размер левой панели уменьшается. Когда я очищаю текстовую область и снова нажимаю или перемещаю указатель, он возвращается к нормальному размеру.

В чем причина роста его высоты и увеличения ее левого и правого полей? Что я делаю не так?

ОБНОВЛЕНИЕ. Я нашел проблему. Дело в том, что я не создал JTextArea правильно. Я инициализируется без параметров:

JTextArea text = new JTextArea("Some initial text");

Теперь я переписан:

JTextArea text = new JTextArea(5,10);

Он теперь сдвигается влево примерно на 5 мм и не меняет свою высоту. Все еще не идеально, но похоже, что я на правильном пути.

Спасибо всем за помощь!

+0

У меня была эта же проблема, когда это Я вызвал пакет()/layout() после того, как добавил текст в JTextArea. Вы тоже это делаете? – JBuenoJr

ответ

0

2 шага, чтобы исправить:

  1. Установить размер JTextArea: JTextArea text = new JTextArea(row, col);
  2. Тем не менее сдвигает влево на величину вертикального столбика:

либо добавить ChangeListener регулировать размер JScrollPane

scroll.getViewport().addChangeListener(new ChangeListener() { 
      @Override 
      public void stateChanged(ChangeEvent e) { 
       if (scroll.getVerticalScrollBar().isVisible()) 
         scroll.setPreferredSize(480, 200); 
       } 
      } 
}); 

или добавить scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

1
+0

Извините, но я не получил вашего ответа. Вы предлагаете мне переопределить размеры? И что это значит: «Скрыть разделитель?» Какой разделитель и почему скрыть это? – Olga

+0

+1, Приятно ответить на вопрос. – Mac

+0

@ Olga Вы предлагаете мне переопределить размеры? да, если вы хотите ограничить размер для BoxLayout, какой разделитель и почему скрыть его. == синий цвет - это ссылки – mKorbel

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