Search code examples
javaswingrepaintgraphics2d

Java repainting when pushing a button


I've hit a wall (in my brain) trying to update my board on button presses. Am I right in thinking that the GameBoard class is the one that needs to be repaint()ed?

GameBoard.java

public class GameBoard extends Panel {

static Compass compass = new Compass();
private static final long serialVersionUID = 1;
Graphics2D g2d;

static final Dimension WINDOW_SIZE = new Dimension(1150, 800);

public void boardMaker() throws Exception {
    JFrame frame = new JFrame("Display image");

    JPanel panel = new JPanel();
    /* unimportant stuff

    .....


    */

    //

    DieRoll roll = new DieRoll("Roll Dies");
    roll.setC(compass);
    roll.setG2D(g2d);
    //
    Button button = new Button("new");
    button.setGameBoard(this);
    JPanel buttonPanel = new JPanel();
    buttonPanel.add(button);
    buttonPanel.add(roll);
    buttonPanel.setPreferredSize(new Dimension(200,100));

    frame.getContentPane().add(buttonPanel, BorderLayout.NORTH);
    //
    frame.getContentPane().add(panel);
    frame.setVisible(true);
}

public void paint(Graphics g) {
// not important I think
}
}

Button.java

public class Button extends JButton implements ActionListener {
private static final long serialVersionUID = 1L;
JPanel panel = new JPanel();
JFrame frame = new JFrame();
Compass c = new Compass();

GameBoard gb = new GameBoard();


Button(String text) {
    this.setText(text);
    this.addActionListener(this);
}

void setGameBoard(GameBoard gb) {
    this.gb = gb;
}

@Override
public void actionPerformed(ActionEvent e) {
    gb.g2d.setColor(Color.black);
    gb.g2d.fillRect(100, 100, 100, 200);
    gb.repaint();
}
}

This gives a null pointer exception. So any idea how to repaint my GameBoard? I'm not mad if I've to rewrite everything because of stupidity! ;)

Thanks


Solution

  • You have the wrong idea about how to draw in Java. Components like Panels draw themselves, and all drawing takes place on the UI thread.

    Check out this tutorial: docs.oracle.com/javase/tutorial/2d/index.html