我刚刚开始使用JAVA,我正在尝试使用输入绘制图像。 我希望在给出新值并单击按钮“draw”时,面板会“刷新/重新加载”。 我尝试了所有不同的removeALL()方式;重绘(); revalidate();在不同的地方。
使用removeAll();窗户冻结了。 只有repaint();和revalidate();图像只停留一秒钟。
我希望图片保持不变,直到新的值为givin并单击该按钮。 她是代码的一部分。 谢谢。
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){
.... }
无法正常工作..
答案 0 :(得分:3)
不要调用panel.getGraphics()从重写的paintComponents方法中获取它。像这样:
public class MyJFrame extends JFrame {
final JTextField field;
final JTextField field2;
final JButton btn;
final MyJPanel panel;
public MyJFrame() {
setLayout(new FlowLayout());
field = new JTextField("10");
add(field);
field2 = new JTextField("10");
add(field2);
btn = new JButton("paint");
add(btn);
panel = new MyJPanel();
panel.setPreferredSize(new Dimension(200, 200));
add(panel);
btn.addActionListener(e -> {
panel.repaint();
});
pack();
}
class MyJPanel extends JPanel {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics paper = g;
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));
}
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(() -> {
new MyJFrame().setVisible(true);
});
}
}