好的,所以我试图制作一个笑脸表情程序,当它第一次启动它应该显示默认的笑脸(这部分工作,这是很好,我猜)如何从Java中的多个方法中绘制?
但是,那么它应该给你两个按钮从微笑中挑选,皱眉按钮应该重新绘制脸部以显示一个微笑或皱眉,但由于某种原因它不起作用。
我一直在阅读有关的图形和我知道你不应该从油漆(外界称他们)方法,因此我适时改变我的代码,我可以告诉这些按钮的工作,因为我让他们打印出来的东西每次但实际重绘都不起作用。我试过使用repaint()和revalidate()。由于某种原因,如果使用repaint(),每次都会重新绘制越来越多的奇怪图片,但也许它应该是这样的?
可有人请看看代码,让我知道你在想什么是问题或者我应该寻找一个解决方案,我用java一段时间,但我从来没有使用图形:/我已经阅读你应该在最后使用setVisible/setSize(或pack()),这实际上帮助我解决了一些问题,但是当你想绘制多个东西时,我不知道该怎么做。大多数示例只显示绘制一个东西。
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class JSmileFacePanel2 extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
JButton smile = new JButton("SMILE");
JButton frown = new JButton("FROWN");
public JSmileFacePanel2() {
setLayout(new FlowLayout());
setTitle("JSmileFace-V2: Jose M. Tobar");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(frown);
add(smile);
setSize(800, 800);
setVisible(true);
}
public void paint(Graphics g) {
super.paint(g);
//by default should show smiling
g.setColor(Color.YELLOW);
g.fillOval(200, 200, 500, 500);
g.setColor(Color.BLUE);
g.fillOval(300, 360, 50, 50);
g.setColor(Color.BLUE);
g.fillOval(600, 360, 50, 50);
g.drawArc(400, 400, 100, 40, 180, 185);
smile.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("SMILE BUTTON CLICKED");
drawSmile(g);
}
});
frown.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("FROWN BUTTON CLICKED");
drawFrown(g);
}
});
}
public void drawSmile(Graphics g) {
g.setColor(Color.YELLOW);
g.fillOval(200, 200, 500, 500);
g.setColor(Color.BLUE);
g.fillOval(300, 360, 50, 50);
g.setColor(Color.BLUE);
g.fillOval(600, 360, 50, 50);
g.drawArc(400, 400, 100, 40, 180, 185);
repaint();
}
public void drawFrown(Graphics g) {
g.setColor(Color.WHITE);
g.fillOval(200, 200, 500, 500);
g.setColor(Color.BLUE);
g.fillOval(300, 360, 50, 50);
g.setColor(Color.BLUE);
g.fillOval(600, 360, 50, 50);
g.drawArc(400, 400, 100, 40, 180, 185);
repaint();
}
public static void main(String[] args) {
JSmileFacePanel2 js = new JSmileFacePanel2();
}
}