2017-05-04 19 views
0

プログラムを実行すると、JPanelは表示されません。それはJScrollPaneなしでも機能します。これは私を夢中にさせている!以前はCanvasとScrollPaneを使っていました。 FlowchartPanelはJPanelを拡張しています。Java swing JPanelとJScrollPaneが表示されない

public class Window extends JFrame{ 

private FlowchartPanel panel;      // contains all the main graphics 
private JScrollPane scrollpane;      // contains panel 
private int canvasWidth, canvasHeight;    // the width and height of the canvas object in pixels 
private Flowchart flowchart;      // the flowchart object 

public Window(Flowchart flowchart) { 
    super(); 
    canvasWidth = 900; 
    canvasHeight = 700; 
    this.flowchart = flowchart; 
    flowchart.setWidth(canvasWidth); 
    flowchart.setHeight(canvasHeight); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    panel = new FlowchartPanel(flowchart); 
    panel.setPreferredSize(new Dimension(canvasWidth, canvasHeight)); 
    scrollpane = new JScrollPane(); 
    scrollpane.setPreferredSize(new Dimension(canvasWidth, canvasHeight)); 
    scrollpane.add(panel); 
    add(scrollpane); 
    //add(panel); 
    pack(); 
    } 
} 

答えて

2

JScrollPaneに直接コンポーネントを追加しないでください。

JScrollPane scrollPane = new JScrollPane(panel); 

もう一つの方法は、ビューポート内のコンポーネントを交換(追加)することです:

コンポーネントが使用するJScrollPane

これを行う最も簡単な方法のJViewPortに追加する必要があります使用することです:

scrollPane.setViewportView(panel); 

panel.setPreferredSize(新しい次元(canvasWidt h、canvasHeight));

コンポーネントの推奨サイズを設定しないでください。すべてのSwingコンポーネントは、独自の優先サイズを決定します。代わりに、カスタムパネルのgetPreferredSize()メソッドをオーバーライドしてサイズを返します。このようにカスタムペイントが変更されると、必要に応じて優先サイズを動的に変更できます。

+0

ありがとうございます!それはそれを解決しました! –

関連する問題