2016-11-17 87 views
1

我正在使用Miglayout为我的程序定义布局。问题是JScrollPane阻止JButton缩小到低于其首选大小。 JButton的最小宽度,首选宽度和最大宽度均如此设置,"w 300:600:900" //min:pref:maxJScrollPane防止组件缩小到低于其首选大小

解决此问题的最佳方法是什么?

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(); 
    } 
} 

回答

3

一个JScrollPane的默认行为是在其优选的尺寸显示滚动窗格组件,以根据需要滚动条可以出现。

如果你想改变行为,那么你可以尝试在面板上实现Scrollable接口。您可能可以覆盖getScrollableTracksViewportWidth()方法以返回true。现在,您的面板应该随着滚动窗格的视口大小调整大小。但是使用这种方法,如果视口太小,您将无法获得滚动条。

如果您希望滚动条处于上述情况,那么您可能还需要覆盖getPreferredSize()方法,以在preferredSize大于视口大小时返回最小大小。

您还可以查看Scrollable Panel,它为您实现了Scrollable界面,并允许您使用一些便捷方法自定义行为。

+0

谢谢你的回答。我会仔细看看的。但是,我确实改变了我的方法,因为我意识到我的'JButton'不需要在'JScrollPane'中,所以我只是将它停靠在JFrame的南部 – Dan