JComponents «выскакивает» из другой JPanelJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 JComponents «выскакивает» из другой JPanel

Сообщение Anonymous »

Я пытался найти аналогичные проблемы, касающиеся моей, но безуспешно.
У меня есть простая Java-программа, в которой у меня есть JLayeredPane с BorderLayout, содержащим три JPanels. Внутри JLayeredPane панели JPanel расположены ЗАПАД, ЦЕНТР, ВОСТОК.
Изображение

Когда я изменяю размер окна программы, сначала весь макет изменяется хорошо, но когда я сжимаю его до тех пор, пока он не достигнет ВОСТОК или ЗАПАДА, возникает проблема с JComponents выскакивает через более высокий уровень JPane, например, JTextField просматривает JPanel, как вы можете видеть здесь:
[img]https://i.sstatic.net /GPnmjpEQ.png[/img]

Пока в моем коде нет ничего сложного в том, как я расположил слои. Я не возился с JLayeredPane, а лишь добавил JPanel и их соответствующие позиции макета:
majorPane.add(centerArea, BorderLayout.CENTER, 0);
majorPane.add(westArea, BorderLayout.WEST, 1);
majorPane.add(eastArea, BorderLayout.EAST, 2);

Поначалу, до того, как проблема возникла, я сначала не использовал JLayeredPane, и моя реализация представляла собой просто базовый BorderLayout, а затем расположение макетов JPanels. Проблема проявилась сама собой, когда я работал с CENTER и EAST JPanels в своей программе, и когда я уменьшал окно программы слева или справа, строки JTable (которые находились в JScrollPane) «просачивались» через EAST JPanel всякий раз, когда Я щелкнул пробелы в EAST JPanel. Проблема, по-видимому, разрешилась сама собой, когда я применил JLayeredPane и поместил в него обе JPanel, и на этот раз JScrollPane, содержащий JTable, фактически изменил свой размер соответствующим образом и не просачивался через панель EAST.
Однако добавление панели WEST снова возобновило проблему, и каждый раз, когда я уменьшал окно программы до стороны WEST JPanel, именно тогда кнопки и текстовые поля на этой JPanel просачивались через EAST JPanel. До сих пор организация иерархии слоев JPanels ничего не дала.
Я был бы признателен за любую информацию о том, почему это происходит или есть ли кто-то еще, кто это делает. Спасибо.
Вот пример кода того, как я это сделал:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class MinimalExample extends JFrame {
JPanel center, east, west, north, south;
JLayeredPane layeredPane;
JTable table;
JScrollPane scrollPane;
JTextField textField;
JComboBox one, two;
JButton button;

String[][] rows = new String[0][0];
String[] cols = { "Sample", "Sample", "Sample", "Sample", "Sample", "Sample" };

public MinimalExample() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500, 500);
setLayout(new BorderLayout());

layeredPane = new JLayeredPane();
layeredPane.setLayout(new BorderLayout());

north = new JPanel();
north.setLayout(new BorderLayout());
north.setBackground(Color.red);
north.setPreferredSize(new Dimension(100, 100));
add(north, BorderLayout.NORTH);

south = new JPanel();
south.setLayout(new BorderLayout());
south.setBackground(Color.red);
south.setPreferredSize(new Dimension(100, 100));
add(south, BorderLayout.SOUTH);

center = new JPanel();
center.setLayout(new BorderLayout());
center.setBackground(Color.PINK);
center.setSize(300, 300);

table = new JTable(rows, cols);
scrollPane = new JScrollPane(table);

center.add(scrollPane);
layeredPane.add(center, BorderLayout.CENTER, 0);

east = new JPanel();
east.setLayout(new FlowLayout());
east.setBackground(Color.GREEN);
east.setPreferredSize(new Dimension(200, 200));

button = new JButton("Click");
button.setPreferredSize(new Dimension(80, 50));
east.add(button);
layeredPane.add(east, BorderLayout.EAST, 1);

west = new JPanel();
west.setLayout(new FlowLayout());
west.setBackground(Color.CYAN);
west.setPreferredSize(new Dimension(210, 200));

textField = new JTextField();
textField.setPreferredSize(new Dimension(130, 30));

one = new JComboBox();
two = new JComboBox();
one.setPreferredSize(new Dimension(130, 30));
two.setPreferredSize(new Dimension(130, 30));

west.add(textField);
west.add(one);
west.add(two);

layeredPane.add(west, BorderLayout.WEST, 2);
add(layeredPane);
setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
new MinimalExample();
});
}
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... her-jpanel
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»