【问题标题】:JButton on JFrame with Graphics [duplicate]带有图形的 JFrame 上的 JButton [重复]
【发布时间】:2016-01-08 05:56:51
【问题描述】:

我正在尝试制作一个具有图形和 5 个 JButton(与屏幕上的图形相对应)的 JFrame。

昨天我的代码运行了,但现在出现故障,图形和按钮仅在我调整 JFrame 大小时出现(用光标拉动它!)。这是我为课堂项目制作的游戏。如果知道问题可能是什么,请告诉我。我已经盯着这个看了这么久,我认为比我有眼光或比我更有技巧的人可以明白为什么代码是错误的。 >.

它有 2 个类,一个用于图形,一个用于主类。 图形类:

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);

    }
}

这是使用图形的类,也是制作 jframe、jlabel 和 jbuttons 的地方。

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);

    }

}

对于这个问题的代码/文本部分的格式感到抱歉。我现在在上课。

【问题讨论】:

  • 您在添加组件之前显示窗口,请尝试将window.setVisible(true); 语句移到main 方法的末尾。在paintComponent(...) 方法中,您正在创建一个从未使用过的新drawingComponentMap。此外,DCM 将替换 panel,因为您的框架使用的是默认布局 (BorderLayout)。

标签: java swing jframe jbutton


【解决方案1】:

这只是一个单一的语句问题 - window.setVisible(true)。 将您的 window.setVisible(true) 语句移到末尾。您的主要方法内容现在应该如下所示(仅供参考):

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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-22
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多