2016-04-19 17 views
0

グラフ用のGUIを描画するプロジェクトに取り組んでいますが、JScrollPaneがうまく実装されていないようです。一部のノードがパネルは、ここでのコードは次のとおりです。JScrollPaneがJPanelの描画用グラフィックスで動作していない

public class Test extends JFrame { 
public Test() { 
    // TODO Auto-generated constructor stub 
    MyPanel panel = new MyPanel(); 

    JScrollPane scrollPane = new JScrollPane(panel); 
    scrollPane 
      .setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 
    scrollPane 
      .setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 
    scrollPane.setBounds(50, 30, 500, 500); 

    JPanel contentPane = new JPanel(null); 
    contentPane.setPreferredSize(new Dimension(600, 600)); 
    contentPane.add(scrollPane); 

    this.setContentPane(contentPane); 
    this.pack(); 
    this.setSize(600, 600); 
    this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
    this.setLocationRelativeTo(null); 
    this.setVisible(true); 
} 
private class MyPanel extends JPanel { 
    @Override 
    public void paint(Graphics g) { 
     // in panel range 
     g.fillOval(0, 200, 100, 100); 
     // out of panel range needs scroll bar 
     g.fillOval(1000, 200, 100, 100); 
    } 
} 
+0

[AWTとスイングでのペイント](http://www.oracle.com/technetwork/java/painting-140037.html)と[カスタムペイントの実行](http://docs.oracle.com/)を参照してください。 – MadProgrammer

答えて

1

あなたのJPanelがスイング内の他のコンポーネントはありません同じように、getPreferredSize()を実装することにより、そのサイズを宣伝する必要があります。 JPanelは、不透明な背景(およびその子要素)を描画するコンポーネントです。カスタムコンポーネント(おそらく子コンポーネントがない)を実装しているので、親コンポーネント(ここではスクロールペイン)にいくつかのサイジング情報を渡して、すべてがうまくレイアウトされていることを確認する必要があります。

スクロールペインに境界線を設定しないでください。 LayoutManagerを使用して、すべてを自動的にレイアウトします。決してGUIをハードコードしないでください。

+0

* "getSize()"を実装* * - 悪い考えかもしれません。 – MadProgrammer

+0

@MadProgrammer Owはい、当然です。修正されました。 – Timmos

関連する問題