我使用兩個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