我正在尝试使用SpringLayout
实现一个非常简单的UI(部分是因为,与我在网上找到的大多数教程作者不同,我与其他布局管理器相比,很像编码界面,部分是因为我想学习如何用它)。 UI基本上如下所示:
一切都很好。如果增加窗口大小,UI会调整我想要的方式(保持欢迎文本居中并扩展文本区域以填充所有新的可用空间)。但是,在某个点以下(更具体地讲,当窗口对于欢迎文本而言变得太窄时):
我希望窗口不允许进一步缩小,因此,如果用户尝试将窗口缩小到小于足以容纳组件的大小,它将停止。如何使用SpringLayout
布局管理器完成此操作?
我知道我可以通过处理一些resize-event并检查是否达到最小大小,然后将大小设置为最小大小来做到这一点。但这需要我a)知道或知道如何计算窗口的最小大小,甚至在它渲染之前,b)编写一堆事件处理代码只是为了正确地进行一些UI渲染,并且c)编写一个一堆代码,我希望一个好的布局管理器可以解决;)
最佳答案
您可以为MinimumSize
覆盖TopLevelContainer
您已将JTextArea
放入JScrollPane
最简单的方法是通过将GUI拆分为各个部分(使用相同或不同的LayoutManagers
分隔NestedLayout
)来混合JPanels
(称为LayoutManager
),而不是实现某些最复杂的LayoutManager
(GridBagLayout
或)整个SpringLayout
一些Container
漂亮忽略LayoutManagers
setXxxSize
不是我的Java
import java.awt.*;
import javax.swing.*;
public class MinSizeForContainer {
private JFrame frame = new JFrame("some frame title");
public MinSizeForContainer() {
JTextArea textArea = new JTextArea(15, 30);
JScrollPane scrollPane = new JScrollPane(textArea);
CustomJPanel fatherPanel = new CustomJPanel();
fatherPanel.setLayout(new SpringLayout());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(fatherPanel, BorderLayout.CENTER);
frame.setLocation(20, 20);
frame.setMinimumSize(fatherPanel.getMinimumSize());
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
MinSizeForContainer Mpgp = new MinSizeForContainer();
}
});
}
}
class CustomJPanel extends JPanel {
private static final long serialVersionUID = 1L;
@Override
public Dimension getMinimumSize() {
return new Dimension(400, 400);
}
}
关于java - 确保SpringLayout不会缩小到一定尺寸以下,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8719319/