JScrollPane 防止组件缩小到其首选大小以下
JScrollPane prevents components shrinking below their preferred size
我正在使用 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();
}
}
JScrollPane 的默认行为是以其首选大小在滚动窗格中显示组件,以便滚动条可以根据需要显示。
如果你想改变行为,那么你可以尝试在你的面板上实现 Scrollable
接口。您可以将 getScrollableTracksViewportWidth()
方法覆盖为 return true
。现在您的面板应该随着滚动窗格的视口调整大小而调整大小。但是,如果视口太小,使用这种方法将无法获得滚动条。
如果你想要上述情况下的滚动条,那么你可能还需要重写getPreferredSize()
方法来return当preferredSize大于视口尺寸时的最小尺寸。
您还可以查看 Scrollable Panel,它为您实现了 Scrollable
接口,并允许您使用一些方便的方法自定义行为。
我正在使用 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();
}
}
JScrollPane 的默认行为是以其首选大小在滚动窗格中显示组件,以便滚动条可以根据需要显示。
如果你想改变行为,那么你可以尝试在你的面板上实现 Scrollable
接口。您可以将 getScrollableTracksViewportWidth()
方法覆盖为 return true
。现在您的面板应该随着滚动窗格的视口调整大小而调整大小。但是,如果视口太小,使用这种方法将无法获得滚动条。
如果你想要上述情况下的滚动条,那么你可能还需要重写getPreferredSize()
方法来return当preferredSize大于视口尺寸时的最小尺寸。
您还可以查看 Scrollable Panel,它为您实现了 Scrollable
接口,并允许您使用一些方便的方法自定义行为。