2016-08-20 3 views
0

この問題に対する既存の回答を確認した後、私はまだ暗いです。私は、タブ付きフレームの内部にスクロール可能なパネルを実装しようとしています。私はJScrollPaneJTabbedPaneを使用しています。ただし、スクロールは機能しません。JScrollPaneとJTabbedPaneの操作

これは私のコードです:

public TabbedFrame(List<Panel> panels) { 

    super(new GridLayout(1, 1)); 

    JTabbedPane tabbedPane = new JTabbedPane(); 

    int layerNum = 0; 

    for (Panel p: panels){ 
     JScrollPane scrollPane = new JScrollPane(
       JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, 
       JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 
     scrollPane.setViewportView(p); 
     scrollPane.setPreferredSize(new Dimension(500, 500)); 
     tabbedPane.addTab("Layer " + layerNum, null, scrollPane, "Layer " + layerNum); 
     layerNum++; 
    } 

    //Add the tabbed pane to this panel. 
    add(tabbedPane); 

    //The following line enables to use scrolling tabs. 
    tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT); 
} 

public class Panel extends JPanel{ 

    private static final long serialVersionUID = 4109034958236244752L; 

    private Design design; 

    public Panel(Design design){ 
     this.design = design; 
     this.setSize(design.getCanvasWidth(), design.getCanvasHeight()); 
    } 

    public void paint(Graphics G) { 
     G.setColor(design.getColor()); 
     design.draw(G); 
    } 

    public int getWidth() { return design.getCanvasWidth(); } 
    public int getHeight() { return design.getCanvasHeight(); } 

} 

私はあなたが提供することができます任意の助けに感謝します。

+3

をよりよいヘルプについてはすぐに、[MCVE]または[ショート、自己完結、正しい例]ポスト(http://www.sscce.org /)。 –

+1

* "スクロールは機能しません。" * - 実際にはコンポーネントをPanelインスタンスに追加することはないのでそれに描画すると、その好ましいサイズが計算されません(とにかく 'paint(Graphics')の代わりに' paintComponent(Graphics) 'をオーバーライドする必要があります)。そのためには、 'getPreferredSize()'メソッドをオーバーライドするだけです。しかし、 'scrollPane.setPreferredSize(new Dimension(500、500));'はここでは何の効果もありません。しかし、すでに述べたように、これで問題が解決しない場合は、MCVEを投稿してください。 –

答えて

0

問題が見つかりました。 私もパネルの望ましいサイズを設定しておく必要があります

for (Panel p: panels){ 
     JScrollPane scrollPane = new JScrollPane(
       JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, 
       JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 
     p.setPreferredSize(new Dimension(1000, 1000)); 
     scrollPane.setViewportView(p); 
     scrollPane.setPreferredSize(new Dimension(500, 500)); 
     tabbedPane.addTab("Layer " + layerNum, null, scrollPane, "Layer " + layerNum); 
     layerNum++; 
    } 
+0

[Java Swingでset(Preferred | Maximum | Minimum)サイズメソッドを使用しないでください。](http://stackoverflow.com/q/7229226/418556)(はい。 –