2014-07-14 34 views
0

我有与矩形网格,我将填补其值。但是,根据输入的格子可能会很大,所以我想为图像添加一个滚动条选项。下面的代码似乎没有做我想要的东西?任何帮助表示赞赏。添加滚动条的JFrame电网

class Cube extends JComponent 
    { 
public void paint(Graphics g) 
{ 

    for (int i = 0; i < 10; i++) 
    { 
     for (int j = 0; j < 10; j++) 
     { 
      g.setColor(Color.GRAY); 
      g.fillRect(i*40, j*40, 40, 40); 
     } 
    } 

    for (int i = 0; i < 50; i++) 
    { 
     for (int j = 0; j < 50; j++) 
     { 
      g.setColor(Color.BLACK); 
      g.drawRect(i*40, j*40, 40, 40); 
     } 
    } 

} 
public static void main(String[] a) 
{ 
    // CREATE SCROLLBAR 
    JScrollPane scroller = new JScrollPane(); 
    JFrame window = new JFrame(); 
    window.setSize(200,200); 
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    window.getContentPane().add(new Cube()); 
    //ADD THE SCROLLBAR 
    window.getContentPane().add(scroller, BorderLayout.CENTER); 
    window.setVisible(true); 
} 

}

回答

2

一些提示:

  1. 您需要添加立方体滚动窗格。您可能会发现this tutorial about scrollpane有帮助。
  2. You should use event dispatcher thread when using swing.

我下面重写程序。

class Cube extends JComponent 
{ 
    public void paintComponent(Graphics g) 
    { 
     super.paintComponent(g); 
     for (int i = 0; i < 10; i++) 
     { 
      for (int j = 0; j < 10; j++) 
      { 
       g.setColor(Color.GRAY); 
       g.fillRect(i*40, j*40, 40, 40); 
      } 
     } 

     for (int i = 0; i < 50; i++) 
     { 
      for (int j = 0; j < 50; j++) 
      { 
       g.setColor(Color.BLACK); 
       g.drawRect(i*40, j*40, 40, 40); 
      } 
     } 
    } 

    @Override 
    public Dimension getPreferredSize() { 
     return new Dimension(1000, 1000); 
    } 

    public static void main(String[] a){ 
     // use event dispatcher thread 
     EventQueue.invokeLater(
      new Runnable() { 
       public void run() { 
        Cube cube = new Cube(); 
        JScrollPane scroller = new JScrollPane(cube); 
        JFrame window = new JFrame(); 
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        // set the content pane 
        window.setContentPane(scroller); 
        window.pack(); 
        window.setVisible(true); 
       } 
     }); 
    } 
} 
+2

JComponent中具有的paintComponent,第一代码线应super.paintComponent方法,前覆盖的getPreferredSize类立方体的内部,然后除去cube.setPreferredSize(新尺寸(1000,1000)),和调用JFrame.pack() window.setVisible(真); – mKorbel

+0

是的,你是对的@mKorbel。我编辑了我的答案。谢谢。 – ThomasEdwin