Java: Why doesn't this JPanel paint properly?

2019-08-31 01:24发布

I have a 2D array. I want each pixel to be represented by a total of four in the actual image. I've tried various piece of code but none seem to work and I don't really understand how it works either.

So far I have:

panel = new JPanel() {
            @Override
            public void paint(Graphics g) {
                Rectangle rect = g.getClipBounds();
                g.setColor(Color.white);
                g.fillRect(rect.x, rect.y, rect.width, rect.height);
                for (int i = 0; i < m.width(); i++) {
                    for (int j=0; j < m.height(); j++) {
                        g.setColor(Color.red);
                        g.fillRect(j*4, i*4, 4, 4);
                    }
                }
                super.paint(g);
            }
        };
        panel.repaint();

Where am I going wrong? The area stays completely grey with no colour!

1条回答
何必那么认真
2楼-- · 2019-08-31 01:42

While overriding paint() is not the worst thing to do, I highly recommend overriding paintComponent() instead. Also, you must call super.paint() prior to doing your drawing using the Graphics object, not afterwards. It just scraps all of your work that way.

Also, I don't know if you did this or not, since you don't have it in your code, but make sure to add the panel to the JFrame or whatever window class you are using so it will actually show up. I hope this helps.

查看更多
登录 后发表回答