【发布时间】: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