我正在使用Java创建一个GUI应用程序,其中包含以下内容:
- 一个JFrame,设置最小大小为(300,200)
- 一个JSplitPane,其中包含:
- 在左侧,有一个JScrollPane(包含一个JTree),最小大小为(100,0)(我只想限制宽度为200)
- 在右侧,有一个JPanel,最小大小为(200,0)
在以下情况下,大小调整没有任何问题:
- 将JSplitPane全部向左移动(到JScrollPane的最小大小),然后调整窗口大小
- 仅调整窗口大小,到一定程度
当我将JSplitPane移得太靠右时,问题就出现了,在调整窗口大小时,JSplitPane右侧的JPanel未能遵循我设置的最小宽度。
我尝试在JScrollPane上设置最大宽度,但似乎没有任何帮助。
是否需要进行与最大大小相关的操作?或者也许有一种方法可以将监听器附加到面板中的一个以强制执行所需的行为?最终,我只想让JSplitPane中的右侧面板不少于200像素宽。
这里是一个演示我正在经历的问题的示例:
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTree;
public class ResizeTest
{
private JFrame frame;
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
try
{
ResizeTest window = new ResizeTest();
window.frame.setVisible(true);
}
catch(Exception e)
{
e.printStackTrace();
}
}
});
}
public ResizeTest()
{
initialize();
}
private void initialize()
{
frame = new JFrame();
frame.setMinimumSize(new Dimension(300, 200));
frame.setBounds(100,100,450,300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(new GridLayout(0, 1, 0, 0));
JSplitPane splitPane = new JSplitPane();
frame.getContentPane().add(splitPane);
JScrollPane scrollPane = new JScrollPane();
scrollPane.setMinimumSize(new Dimension(100, 0));
splitPane.setLeftComponent(scrollPane);
JTree tree = new JTree();
tree.setMinimumSize(new Dimension(100, 0));
scrollPane.setViewportView(tree);
JPanel panel = new JPanel();
panel.setMinimumSize(new Dimension(200, 0));
splitPane.setRightComponent(panel);
}
}
更新:
很抱歉,我并没有完全理解提出的解决方案试图表达的重点,除了应该避免使用setPreferred()和setMinimum/Maximum()之外。
作为回应学习这一点的问题是:除了使用这些方法,我有哪些选项来限制JSplitPane分隔符?MadProgrammer提到监听componentResized事件,但我需要更多的解释。我是在响应此事件时调用setDividerLocation()吗?
如果附加的问题在意义上是一个独立的StackOverflow问题,我提前道歉,如有必要可以在此发表另一篇并进行链接。
更新2:
不对用户选择如何调整窗口大小进行限制,并将右侧面板放在JScrollPane中,这是否是一个可行的选择?这看起来像是一种标准做法。
panel.setMinimumSize
只是为了演示,但是tree.setMinimumSize
是一个问题。在Java Swing中,我应该避免使用set(Preferred|Maximum|Minimum)Size方法吗? - trashgod