2016-11-17 53 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