Я использую два JSplitPanes
для отображения некоторой информации. Один ориентирован с горизонтальным разделителем, другой с вертикальным разделителем. Следующая проблема относится к обоим JSplitPanes
.
Когда я изменяю размер основного JFrame
моего приложения, размер JSplitPanes
также изменяется, поскольку они должны занимать определенный процент экрана (все JPanels
настраиваются на изменение размера JFrame
, поведение задается параметрами ширины и высоты MigLayout
).
Расположение разделителя важно и должно соответствовать размеру JSplitPane
. Для этого я использую setResizeWeight()
и setDividerLocation()
.
Основная проблема заключается в том, что при изменении размера JFrame
делитель не остается на уровне 0,0/0%, а вместо этого перемещается на ~ 5-10%:
----->
Я думал, что это из-за resizeWeight
, но я поиграл с этим, и в поведении вообще не было никаких изменений.
Может ли кто-нибудь помочь мне с этой проблемой? Я реализовал ComponentAdapter
, но не сохранил расположение разделителя в переменной или Preferences
XML-ключе, я не могу восстановить расположение разделителя на componentResized()
.
Пример кода:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSplitPane;
import net.miginfocom.swing.MigLayout;
public class JSplitPaneTest {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setMinimumSize(new Dimension(500, 500));
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new MigLayout());
JPanel panel1 = new JPanel();
panel1.setBackground(Color.RED);
JPanel panel2 = new JPanel();
panel1.setBackground(Color.GREEN);
final JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT,
panel1, panel2);
splitPane.setResizeWeight(0.5);
splitPane.setOpaque(false);
splitPane.setOneTouchExpandable(true); // does not work on Linux :(
splitPane.setBorder(null);
mainPanel.add(splitPane, "w 100%, h 90%, wrap");
JButton button = new JButton("Set to 0");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
splitPane.setDividerLocation(0.0);
}
});
mainPanel.add(button, "span");
frame.add(mainPanel);
frame.setVisible(true);
}
}