I have some experience with Java but I am new with Swing. I am trying to run a very simple example but I run into an annoying problem that I cannot solve.
I am trying to open a white window and draw a blue rectangle. Somehow, the rectangle only shows up after I manually resize the window. I have tried multiple things like unvalidate then validate, changing the visibility, but I cannot get my rectangle to show.
Here is the code of the JFrame and the main function
public class FieldView extends JFrame {
public FieldView(String name) {
super(name);
getContentPane().setBackground(Color.WHITE);
setSize(480, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
}
@Override
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.BLUE);
g2d.drawRect(30, 50, 10, 10);
}
}
public class AnimalApplication {
public static void main(String[] args) {
FieldView view = new FieldView("My view");
view.setVisible(true);
}
}
Note: I was reading this tutorial and I run into the same problem with the provided code.
Advertisement
Answer
You should create a JPanel that draws what you want. That JPanel should have a size preference.
class DrawPanel extends JPanel{
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(Color.BLUE);
g.drawRect(20, 20, 90, 90);
}
@Override
public Dimension getPreferredSize(){
return new Dimension(480, 200);
}
}
Now we have a component that draws a rectangle and has a size. Create a JFrame add it to the layout and display the frame.
JFrame frame = new JFrame("holds my component");
DrawPanel panel = new DrawPanel();
frame.add( panel, BorderLayout.CENTER );
frame.pack();
frame.setVisible(true);