【发布时间】:2015-07-08 23:20:02
【问题描述】:
我是java初学者;我最近从另一种编程语言转移,我只知道基础知识。
我在使用 JPanel 重绘时遇到问题。我可以在创建新对象时绘制文本,但在重绘它时遇到问题。函数 tick() 由 Main 类在短时间内调用,应该重绘 JPanel。
package main;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
class Surface extends JPanel{
private void doDrawing(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.drawString("Hello World! "+Main.integer, 50, 50);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
doDrawing(g);
}
}
class Display extends JFrame {
public Display() {
Surface surface = new Surface();
setTitle("salami");
setSize(400, 300);
}
public void tick() {
surface.redraw();
}
}
【问题讨论】:
-
我认为你应该 repaint() 或 revalidate() 组件
-
@HuangChen 我只解决了一部分问题。似乎“Surface surface = new Surface()”的工作方式不同于以前的“add(new Surface())”,它会导致“Hello World!”根本不画画。但是,当使用“add(new Surface())”创建表面时,我无法访问表面以供以后重新绘制。我该如何解决?
-
我相信创建“Surface surface = new Surface()”会重新创建表面而不显示它。你的显示方法应该做它所说的“显示”,而不是你应该在其他地方创建表面并使其在 Display() 中可见
-
顺便说一句 - 对于眼前的问题,请尝试将
public Display() { Surface surface = new Surface();更改为Surface surface = new Surface(); public Display() {;)
标签: java swing jframe jpanel java-2d