2016-11-17 6 views
1

私はMiglayoutを使用して自分のプログラムのレイアウトを定義しています。問題は、JScrollPaneがJButtonの推奨サイズよりも小さくなるのを防ぐことです。 JButtonの最小、推奨、最大幅は、"w 300:600:900" //min:pref:maxのように設定されています。JScrollPaneはコンポーネントが希望のサイズより小さくなるのを防ぎます

この問題を解決する最善の方法は何ですか?

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を返すことができます。スクロールペインのビューポートのサイズが変更されると、パネルのサイズが変更されます。しかし、このアプローチを使用すると、ビューポートを小さすぎるとスクロールバーが表示されません。

上記の状況でスクロールバーを使用する場合は、preferredSizeがビューポートのサイズより大きい場合に、最小サイズを返すようにgetPreferredSize()メソッドをオーバーライドする必要があります。

Scrollableインターフェイスを実装するScrollable Panelをチェックアウトして、いくつかの便利な方法で動作をカスタマイズすることもできます。

+0

ありがとうございました。私はそれを徹底的に調べます。しかし、私はJButtonが 'JScrollPane'にある必要がないことを認識したので、私はJFrameの南にそれをドッキングしました – Dan

関連する問題