-2

I'm trying to make a JFrame that will have graphics and 5 JButtons (which correspond with graphics on screen).

Yesterday my code ran, but now it is glitching and the graphics and buttons only appear when I am resizing the JFrame (pulling it with the cursor!). This is for a game I am making for a class project. If know what the problem may be/is, please tell me. I've been staring at this for so long and I think someone with fresh eyes or more skill than myself could see why the code is wrong. >.<

It has 2 classes, one for graphics and one with a main. The class for the graphics:

import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JComponent;
import java.awt.Color;
import java.awt.Polygon;

public class drawingComponentMap extends JComponent {

    public void paintComponent(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        drawingComponentMap DCM = new drawingComponentMap(); // this is used in
                                                                // the class
                                                                // below

        Color door = new Color(255, 218, 185); // the graphics are making a
                                                // house, hence the colours
        Color glass = new Color(173, 216, 230);

        Color mapGrass = new Color(144, 238, 144);
        g.setColor(mapGrass);
        g2.fillRect(0, 0, 500, 500);

        // circles to correspond with buttons (as in each button reps a circle)
        Color minigame = new Color(221, 160, 221);
        g.setColor(minigame);
        g2.fillOval(10, 20, 50, 50);
        g2.fillOval(220, 70, 50, 50);
        g2.fillOval(20, 200, 50, 50);
        g2.fillOval(100, 300, 50, 50);
        g2.fillOval(200, 200, 50, 50);

        Color black = new Color(0, 0, 0);
        g.setColor(black);
        g2.drawOval(10, 20, 50, 50);
        g2.drawOval(220, 70, 50, 50);
        g2.drawOval(20, 200, 50, 50);
        g2.drawOval(100, 300, 50, 50);
        g2.drawOval(200, 200, 50, 50);

        // the house graphic
        Color walls = new Color(210, 105, 3);
        g.setColor(walls);
        g2.fillRect(300, 300, 150, 200);
        Color roof = new Color(165, 42, 42);
        g.setColor(roof);
        g2.drawRect(300, 300, 150, 200);
        int[] xPoints = { 300, 375, 450 };
        int[] yPoints = { 300, 225, 300 };
        Polygon imageTriangle = new Polygon(xPoints, yPoints, 3);
        g2.fillPolygon(imageTriangle);
        g.setColor(black);
        g2.drawPolygon(imageTriangle);

        g.setColor(glass);
        g2.fillRect(380, 350, 50, 50);
        g.setColor(door);
        g2.fillRect(325, 450, 30, 50);
        g.setColor(black);
        g2.drawRect(325, 450, 30, 50);
        g2.fillOval(330, 470, 5, 5);

        g2.drawRect(380, 350, 50, 50);

        g2.drawString("Where do you want  to go?", 10, 400);

    }
}

this is the class which uses the graphics, and where the jframe, jlabel, and jbuttons are made.

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Map {

    JFrame window = new JFrame();
    JPanel panel = new JPanel();
    JButton button = new JButton();

    public static void main(String[] args) {

        JFrame window = new JFrame();
        JPanel panel = new JPanel();
        window.setSize(500, 500);
        window.setTitle("Map");
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setVisible(true);

        JButton button1 = new JButton("World 1");
        JButton button2 = new JButton("World 2");
        JButton button3 = new JButton("World 3");
        JButton button4 = new JButton("World 4");
        JButton button5 = new JButton("World 5");
        panel.add(button1);
        panel.add(button2);
        panel.add(button3);
        panel.add(button4);
        panel.add(button5);
        window.add(panel);
        panel.setVisible(true);

        drawingComponentMap DCM = new drawingComponentMap();
        window.add(DCM);

    }

}

Sorry about the formatting of the code/text portion of this question. I'm in class right now.

Pendula
  • 688
  • 6
  • 17
teamon
  • 1
  • 1
  • 1
    You are showing the window before you add the components to it, try to move the `window.setVisible(true);` statement at the end of the `main` method. In the `paintComponent(...)` method you are creating a new `drawingComponentMap` which is never used. Also, `DCM` will replace `panel` because your frame is using the default layout (`BorderLayout`). – Titus Jan 07 '16 at 20:45

1 Answers1

0

It's just a single statement issue - window.setVisible(true). Move your window.setVisible(true) statement to the end. Your main method contents should now look like this (just for your reference):

JFrame window = new JFrame();
JPanel panel = new JPanel();

window.setSize(500, 500);
window.setTitle("Map");
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton button1 = new JButton("World 1");
JButton button2 = new JButton("World 2");
JButton button3 = new JButton("World 3");
JButton button4 = new JButton("World 4");
JButton button5 = new JButton("World 5");
panel.add(button1);
panel.add(button2);
panel.add(button3);
panel.add(button4);
panel.add(button5);
window.add(panel);
panel.setVisible(true);

drawingComponentMap DCM = new drawingComponentMap();
window.add(DCM);


window.setVisible(true);
mohitm
  • 153
  • 10