У меня есть панель, которая разделена на две части с 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 мм и не меняет свою высоту. Все еще не идеально, но похоже, что я на правильном пути.
Спасибо всем за помощь!
У меня была эта же проблема, когда это Я вызвал пакет()/layout() после того, как добавил текст в JTextArea. Вы тоже это делаете? – JBuenoJr