Java Graphics 不绘制任何东西

标签 java swing graphics jframe jpanel

所以,我正在尝试用 java 制作一个简单的 Pong 程序。现在,它应该只打开一个窗口,显示一个按钮(“开始”),并在按下按钮时输出到控制台。它打开窗口,但不绘制按钮。但是,如果您单击我指定的区域,它会注册您单击并打印到控制台。

这是我的代码。

窗口中打开的JPanel:

public class Menu extends JPanel {

Font garamond = new Font("Garamond", Font.PLAIN, 20);

public Menu() {

    addMouseListener(new Mouse());

}

public void draw() {
    Graphics g = getGraphics();
    g.setColor(Color.BLACK);
    g.drawRect(0, 0, 100, 100);
    g.setFont(garamond);
    g.setColor(Color.WHITE);
    g.drawString("Start", 10, 10);
    g.dispose();
}

记录您的点击的“Mouse”类:

public class Mouse extends MouseAdapter {

public void mousePressed(MouseEvent e) {
    if (e.getX() >= 0 && e.getX() <= 100 && e.getY() >= 0 && e.getY() <= 100) {
        Frame.buttonStart();
    }
}

最后是打开窗口并显示面板的“Frame”类:

public class Frame {

static JFrame frame = new JFrame("Java Pong");

public static void initialize() {

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(500, 400);
    frame.setLocation(100, 100);
    frame.setVisible(true); 
    setMode("menu");

}

public static void setMode(String Mode) {

    switch (Mode) {
    case "menu":
        Menu menu = new Menu();
        frame.getContentPane().add(menu, BorderLayout.CENTER);
        menu.draw();
        break;
    default:
        break;
    }

}

public static void buttonStart() {

    System.out.println("yeh button pressed");

}

最佳答案

您应该重写paintComponent()来执行自定义绘图。在传入的 Graphics 对象上进行绘制。

此外,您应该使用 SwingUtilities.invokeAndWait()SwingUtilities.invokeLater() 在事件调度线程上执行 Swing 组件的所有操作。这包括实例化和配置 UI 组件。

此外,如果您想要一个按钮,那么使用 JButton 比您自己滚动会更有优势。

编辑添加:

使用SwingUtilities.invokeAdWait()的示例:

SwingUtilities.invokeAdWait(
    new Runnable() {
        @Override public void run() {
            // the work to be performed by the EDT goes here
            Frame.frame.pack();
            Frame.frame.setVisible(true);
        }
    }
);

只要在最初显示 GUI 时使用 invokeAndWait(),您就可以在主线程中完成大部分初始设置。之后,您可能应该让主线程终止。

关于Java Graphics 不绘制任何东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26809495/

相关文章:

java - 尝试只允许在 JTextField 中输入数字,非数字设置为 0

java - 使用 Java 的 Graphics 或 Graphics2D 类,如何绘制字符串?

用于游戏图形的 Ruby 库/gem?

opengl - 栅格化点/像素网格的快速方法

java - Android A* 寻路无限循环?

基于 Java Regex 的字符串替换

java - 是否有任何选项可以将 R 与 NetSuite 连接以定期向 NetSuite 用户提供分析结果?

java - 如何验证 jar 中 MANIFEST.MF 的顺序?

java - 在 JPanel 上绘制一个矩形

java - 访问二维数组中的索引时返回空指针异常