当尝试将小程序重新编程为Java中的应用程序时,如何正确调用paintComponent方法



我最近一直在研究一个Java小程序。它本来是一个小程序,但从那以后我决定通过Java开发一个应用程序。我正在尝试更改我的代码以便能够将程序作为应用程序运行。我的第一个问题是:这是一个坏主意吗?从头开始更好吗?

我的下一个问题涉及在窗户上绘画。如果尝试将我的小程序更改为应用程序是一个好主意,我想知道谁来解决我在图形方面遇到的这个问题。这是我的主要问题。我目前正在使用"paintComponent"方法来绘制一个简单的字符串。我这样做是一种测试,以确保它正常工作。我从我创建的名为 graphicsPanel 的 JPanel 调用"paintComponent"方法。我还让它打印出一个字符串来通知我该方法已被调用。我的问题是,我无法显示这些迹象。我已经对这个常见问题进行了一些搜索,但是我已经尝试了建议的解决方案,但没有进展。请让我知道我能做什么。

~雷恩

主类:(它比ApplicationGame属于一个单独的类)

public class Application { // Rename to a better name later
    public static void main(String args[]) {
        ApplicationGame app = new ApplicationGame();
        app.runGame();  // Method that contains the init of the JFrame and the declaration of the graphicsPanel
        app.setVisible(true);
    }
}

我的班级声明(框架):

public class ApplicationGame extends JFrame
    private static final long serialVersionUID = 1L;

更多帧定义:

setSize(600,600); // All in the ApplicationGame class
setDefaultCloseOperation(EXIT_ON_CLOSE);
setTitle("Game - ALPHA 0.0.4"); // Rename

我的图形面板代码:

JPanel graphicsPanel;
graphicsPanel = new JPanel(new BorderLayout()) {
private static final long serialVersionUID = 1L; // Suggested by Eclipse to insert this line
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawString("Working...", 50, 50);
        System.out.println("Painted onto the panel");
    }
};
graphicsPanel.setBounds(0, 0, getWidth(), getHeight());
graphicsPanel.setPreferredSize(new Dimension(200, 200));
add(graphicsPanel, BorderLayout.CENTER); // In the class ApplicationGame (class extends JFrame)

还没有解决我的问题:

摆动 - 绘制未调用组件方法

为什么 paint()/paintComponent() 从未被调用?

为了防止出现细微问题,应确保在使用 Swing 组件之前从主线程迁移到事件调度线程,方法是从 main 调用 SwingUtilities.invokeLater。但是,这可能不是此问题的原因。

您使用paintComponent的方式没有错。它是自动调用的。此演示显示了一个正确显示graphicsPanel的框架:

public class ApplicationGame extends JFrame {
    ApplicationGame() {
        JPanel graphicsPanel = new JPanel(new BorderLayout()) {
            protected void paintComponent(Graphics g) {
                super.paintComponent(g);
                g.drawString("Working...", 50, 50);
                System.out.println("Painted onto the panel");
            }
        };
        graphicsPanel.setPreferredSize(new Dimension(200, 200));
        add(graphicsPanel, BorderLayout.CENTER);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        pack();
        setVisible(true);
    }
    public static void main(String[] args) {
        SwingUtilities.invokeLater(ApplicationGame::new);
    }
}

在设置和显示框架的代码中的某个位置,您一定缺少一个步骤,但您尚未显示所有必要的代码。

相关内容

  • 没有找到相关文章

最新更新