我使用两个JSplitPanes
来显示一些信息。一个是水平分隔器,另一个是垂直分隔器。以下问题适用于JSplitPanes
。JFrame调整大小移动JSplitPane分隔线
当我调整我的应用程序的主JFrame
,该JSplitPanes
也调整,因为他们占据了屏幕的一定比例(全部JPanels
调整为JFrame
调整大小,行为由MigLayout
的宽度和高度参数设定)。
分隔符的位置很重要,需要与JSplitPane
的大小保持一致。我使用setResizeWeight()
和setDividerLocation()
来实现这一点。
的主要问题是,在调整大小JFrame
,分隔不保持在0.0/0%,而是移动到〜5-10%:
----->
我认为这是由于resizeWeight
,但我玩了它,并没有改变行为。
有人可以帮我解决这个问题吗?我实现了一个ComponentAdapter
,但是没有将分频器的位置保存在一个变量中或Preferences
XML-key我无法恢复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);
}
}
更快地发布SSCCE/MCVE,短小,可运行,可编译 – mKorbel 2015-02-05 18:21:10
我已添加示例代码。 setResizeWeight()确实改变了行为。但分频器从来没有真正停留在0。 – ChrisK 2015-02-05 18:48:23