将滚动条添加到jframe网格

时间:2014-07-14 12:34:32

标签: java swing graphics awt

我有一个带有矩形的网格,我将用值填充。但是,根据输入,网格可能非常大,因此我想向图像添加滚动条选项。下面的代码似乎没有做我想要的?任何帮助表示赞赏。

   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);
}

}

1 个答案:

答案 0 :(得分:2)

一些提示:

  1. 您需要添加多维数据集以滚动窗格。您可能会发现this tutorial about scrollpane有帮助。
  2. You should use event dispatcher thread when using swing.
  3. 我重写你的程序如下。

    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);
                    }
            });
        }
    }