【发布时间】:2015-12-12 22:35:51
【问题描述】:
我刚开始使用 JAVA,我正在尝试使用输入绘制图像。 我希望在给出新值并单击“绘制”按钮时面板“刷新/重新加载”。 我尝试了所有不同的 removeALL();重绘();重新验证();在不同的地方。
使用 removeAll();窗口冻结。 只有重绘();并重新验证();图像仅停留一秒钟。
我希望图像保持不变,直到给出新值并单击按钮。 向下她是代码的一部分。 谢谢。
public void actionPerformed (ActionEvent event) {
Graphics paper = panel.getGraphics();
String input = field.getText();
String input2 =field2.getText();
int x = Integer.parseInt(input);
int y = Integer.parseInt(input2);
paper.setColor(Color.red);
paper.fillOval(x, y, 50, 50);
paper.setColor(Color.blue);
paper.fillOval((x+100), y, 35, 35);
paper.setColor(Color.blue);
paper.fillOval(x, (y+100), 35, 35);
paper.setColor(Color.black);
paper.drawLine((x+49), (y+25), (x+102), (y+20));
paper.setColor(Color.black);
paper.drawLine((x+25), (y+49), (x+20), (y+102));
//removeAll();
//revalidate();
//repaint();
}
我在不同的功能中尝试过:
public void actionPerformed (ActionEvent event) {
Graphics paper = panel.getGraphics();
function(paper);
repaint();
revalidate();
}
public void function (Graphics paper){
.... }
没用..
【问题讨论】:
-
通常情况下,您应该重新定义:
public void paint(Graphics g) {...},并且只在您的actionPerformed(...)中调用repaint(); -
重写 paintComponent() 并使用作为参数传递的 Graphics 对象,而不是尝试在 ActionListener 中进行绘制。
-
如果要离线准备图像,请将其绘制到 BufferedImage,然后在面板的 paint(Graphics) 方法中绘制该图像。