Хорошо, поэтому я пытаюсь сделать программу смайликов, когда она начинается вначале, она должна показывать по умолчанию смайлик (эта часть работает, и это здорово, я думаю)Как рисовать из нескольких методов в Java?
Но тогда это должно дать вам два кнопки для выбора из улыбки и нахмуренных кнопок, которые должны перерисовывать лица, чтобы показать, что один улыбается или хмурится, но по какой-то причине он не работает.
Я читал о графике, и я знаю, что вы не должны называть их из-за метода paint(), поэтому я изменил свой код соответственно, и я могу сказать, что кнопки работают, потому что я заставляю их распечатывать что-то каждый раз, но фактическая перерисовка не работает. Я попытался использовать repaint() и revalidate(). По какой-то причине, если вы используете repaint(), он все больше и больше перерисовывается каждый раз, когда это странно, но, возможно, это должно вести себя таким образом?
Может кто-нибудь, пожалуйста, взгляните на код и сообщите мне, что вы думаете о проблеме, или где я должен искать решение. Я использовал java некоторое время, но никогда не использую графику:/I have прочитайте, как предполагается, использовать 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();
}
}