【问题标题】:Java swing Paint method not being called未调用 Java swing Paint 方法
【发布时间】:2018-11-13 06:49:47
【问题描述】:

我已经设置了这个非常简单的 View 类来测试 java swing 中的 Paint 方法。但是,我注意到即使我从另一个类创建了一个视图实例并继续调用下面的更新方法,但绘制方法永远不会执行。编辑:我从主控制器和控制器添加代码。

import java.awt.*;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class View extends JPanel {

    //Attributes
    private static int frameWidth = 500;
    private static int frameHeight = 500;
    private JFrame frame; // the frame
    private JPanel menu;
    private JPanel game;
    private JPanel summary;


    //Constructor
    public View(ControlListener controlListener) {
        this.frame = new JFrame();
        frame.setLayout(new GridLayout(3,1));
        frame.addKeyListener(controlListener);
        frame.setTitle("MyFrame");
        frame.setBackground(Color.blue);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(frameWidth, frameHeight);
        frame.getContentPane().setBackground(Color.blue);
        frame.setVisible(true);

    }

    //Methods
    public JFrame getFrame() {
        return frame;
    }

    public static int getFrameWidth() {
        return frameWidth;
    }

    public static int getFrameHeight() {
        return frameHeight;
    }

    //frame updater
    public void update() {
        frame.repaint();

    }

    @Override
    public void paint(Graphics g) {
        System.out.println("test");
    }

来自主要的片段:

public static void main(String[] args) {
    Controller v = new Controller();
    v.start();
}

来自控制器的片段:

public class Controller {

    //Attributes
    private Model model;
    private View view;


    //Constructor
    public Controller(){
        view = new View(controlListener);

    }

    //run 
    public void start(){
        run();
    }

    public void run(){

        while(true){
            view.update();
    }
}

【问题讨论】:

  • 用 main 方法提及你的类。
  • @VarunJain Gotcha :)
  • public void paint(Graphics g) { System.out.println("test"); 1) 对于任何JComponent,自定义绘制的正确方法是public void paintComponent(Graphics g).. 2) 这样做的最佳实践是立即调用super 方法以确保之前的绘制被清除,BG 和边框被正确绘制。

标签: java swing user-interface


【解决方案1】:

从来没有一个 View 的实例被添加到 JFrame 中,所以 Swing 没有理由绘制一个不可见的组件。

【讨论】:

    猜你喜欢
    • 2019-09-01
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    • 2012-08-25
    相关资源
    最近更新 更多