我正在使用Miglayout
为我的程序定义布局。问题是JScrollPane
阻止JButton缩小到其首选大小以下。 JButton
的最小宽度,首选宽度和最大宽度设置如下"w 300:600:900" //min:pref:max
。
解决此问题的最佳方法是什么?
SSSCE
import java.awt.*;
import javax.swing.*;
import net.miginfocom.swing.MigLayout;
public class ButLay extends JFrame {
private ButLay() {
super("Button Layout");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new MigLayout("", "grow", "grow"));
createPanel();
setSize(800, 200);
setVisible(true);
}
JPanel panel = new JPanel(new MigLayout("", "grow", "grow"));
JScrollPane scroll;
JButton button = new JButton("Button");
private void createPanel() {
panel.add(button, "gapleft 100, align right, w 300:600:900, south");
scroll = new JScrollPane(panel);
getContentPane().add(scroll, "grow");
}
public static void main(String[] args) {
new ButLay();
}
}
答案 0 :(得分:3)
JScrollPane的默认行为是以滚动窗格中的首选大小显示该组件,以便滚动条可以根据需要显示。
如果您想更改行为,则可以尝试在面板上实施Scrollable
界面。您可以覆盖getScrollableTracksViewportWidth()
方法以返回true
。现在,当滚动窗格的视口调整大小时,您的面板应调整大小。但是,如果您使视口太小,使用此方法您将无法获得滚动条。
如果您希望滚动条处于上述情况,那么当preferredSize大于视口大小时,您可能还需要覆盖getPreferredSize()
方法以返回最小大小。
您还可以查看为您实现Scrollable
接口的Scrollable Panel,并允许您使用一些便捷方法自定义行为。