When I run my code, I expect to see a JPanel in my JFrame, but nothing shows up. I had a button in the frame, and it shows up. But the JPanel doesn't show up, I even colored it in red.
Here is the code for my JPanel:
import java.awt.*;
import javax.swing.JPanel;
public class graphic extends JPanel {
private static final long serialVersionUID = -3458717449092499931L;
public Game game;
public graphic(Game game){
this.game = game;
this.setPreferredSize(new Dimension(400,400));
this.setBackground(Color.RED);
}
public void paintComponent(Graphics g){
for (Line l:game.mirrors){
g.setColor(Color.BLACK);
g.drawLine(l.start.x, l.start.y, l.end.x, l.end.y);
}
}
}
And my JFrame code:
import java.awt.Container;
import java.awt.event.*;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.*;
public class Viewer implements ActionListener {
public JFrame frame;
public JButton drawShoot;
public boolean draw;
public Game game;
public graphic graphic;
public TimerTask timert;
public Timer timer;
public Viewer(){
draw = true;
game = new Game();
}
public static void main(String args[]){
Viewer v = new Viewer();
v.setup();
}
public void setup(){
frame = new JFrame("Laser Stimulator");
drawShoot = new JButton("Edit Mode");
graphic = new graphic(game);
graphic.repaint();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(300, 300, 600, 600);
Container contentPane = frame.getContentPane();
SpringLayout layout = new SpringLayout();
contentPane.setLayout(layout);
drawShoot.addActionListener(this);
timert = new TimerTask() {
@Override
public void run() {
}
};
timer =new Timer();
timer.scheduleAtFixedRate(timert, 0, 1000/30);
contentPane.add(graphic);
layout.putConstraint(SpringLayout.NORTH, graphic, 0, SpringLayout.NORTH, contentPane);
layout.putConstraint(SpringLayout.WEST, graphic, 0, SpringLayout.WEST, contentPane);
frame.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource()==drawShoot){
draw = !draw;
drawShoot.setText((draw)?"Edit Mode":"Shoot Mode");
}
}
}