好的,所以我試圖製作一個笑臉表情程序,當它第一次啓動它應該顯示默認的笑臉(這部分工作,這是很好,我猜)如何從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();
}
}