2016-05-21 2 views
0

Ich habe die folgenden kurzen und einfach zu verstehen Klassen, mit denen der Benutzer mit der Größe eines Quadrats herumspielen und zwischen zwei Farben wechseln kann. Wie könnte ich dem Benutzer erlauben, zwischen einem gefüllten Rechteck (dem aktuellen) und einem Umrissrechteck (Umrissrechteck = keine innere Farbe, gerade umrandet) zu wechseln. Die kürzeste und einfachste Modifikation wäre großartig. Ich suche nur nach der einfachsten Lösung.Alternate zwischen gefüllten und Umriss-Rechteck in JApplet

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.JApplet; 
import javax.swing.JButton; 

public class Square extends JApplet{ 
    int size; 
    Color color; 
    JButton plus, minus, reset, changeColor; 
    public void init(){ 
     color = Color.GREEN; 
     size = 100; 
     plus = new JButton("+"); 
     minus = new JButton("-"); 
     reset = new JButton("reset"); 
     changeColor = new JButton("color"); 
     setLayout(new FlowLayout()); 
     add(plus); add(minus); add(reset); add(changeColor); 
     plus.addActionListener(new ButtonHandler(this)); 
     minus.addActionListener(new ButtonHandler(this)); 
     reset.addActionListener(new ButtonHandler(this)); 
     changeColor.addActionListener(new ButtonHandler(this)); 
    } 

    public void paint(Graphics g){ 
     g.setColor(color); 
     g.fillRect(20, 20, size, size); 
    } 

    class ButtonHandler implements ActionListener{ 
     Square myApplet; 
     ButtonHandler(Square sq){ 
      this.myApplet = sq; 
     } 
     public void actionPerformed(ActionEvent e){ 
      if(e.getSource()==myApplet.plus) 
       myApplet.size+=10; 
      if(e.getSource()==myApplet.minus) 
       myApplet.size-=10; 
      if(e.getSource()==myApplet.reset) 
       myApplet.size=100; 
      if(e.getSource()==myApplet.changeColor){ 
       if(myApplet.color==Color.GREEN) 
        myApplet.color=Color.RED; 
       else 
        myApplet.color=Color.GREEN; 
      } 
      myApplet.repaint(); 
     } 
    } 
} 
+2

Das erste, was Sie tun sollten, ist superpaint aufrufen ... das ist, nachdem Sie aufhören, JAppet (Applets wurden offiziell veraltet und werden nicht mehr unterstützt). Als nächstes brauchen Sie einfach ein Flag, das beim Neuzeichnen des Applets überprüft und entweder fillRect oder drawRect – MadProgrammer

+1

[RIP] (http://openjdk.java.net/jeps/289) aufruft. – trashgod

Antwort

0

Ich dachte, ich würde die Antwort auf meine eigene Frage posten. Als ich nach einer einfachen Lösung suchen, tut folgendes dazu:

import java.applet.Applet; 
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; 

public class Square extends Applet{ 
    int size; 
    Color color; 
    JButton plus, minus, reset, changeColor, alternate; int shapeDetector; 
    public void init(){ 
     color = Color.GREEN; 
     size = 100; 
     shapeDetector = 1; 
     plus = new JButton("+"); 
     minus = new JButton("-"); 
     reset = new JButton("reset"); 
     changeColor = new JButton("color"); 
     alternate = new JButton("alternate"); 
     setLayout(new FlowLayout()); 
     add(plus); add(minus); add(reset); add(changeColor); add(alternate); 
     plus.addActionListener(new ButtonHandler(this)); 
     minus.addActionListener(new ButtonHandler(this)); 
     reset.addActionListener(new ButtonHandler(this)); 
     alternate.addActionListener(new ButtonHandler(this)); 
     changeColor.addActionListener(new ButtonHandler(this)); 
    } 

    public void paint(Graphics g){ 
     super.paint(g); 
     g.setColor(color); 
     if(shapeDetector==1) 
      g.fillRect(20, 20, size, size); 
     else 
      g.drawRect(20, 20, size, size); 
    } 

    class ButtonHandler implements ActionListener{ 
     Square myApplet; 
     ButtonHandler(Square sq){ 
      this.myApplet = sq; 
     } 
     public void actionPerformed(ActionEvent e){ 
      if(e.getSource()==myApplet.plus) 
       myApplet.size+=10; 
      if(e.getSource()==myApplet.minus) 
       myApplet.size-=10; 
      if(e.getSource()==myApplet.reset) 
       myApplet.size=100; 
      if(e.getSource()==myApplet.changeColor){ 
       if(myApplet.color==Color.GREEN) 
        myApplet.color=Color.RED; 
       else 
        myApplet.color=Color.GREEN; 
      } 
      if(e.getSource()==myApplet.alternate){ 
       if(myApplet.shapeDetector==1) 
        myApplet.shapeDetector=2; 
       else 
        myApplet.shapeDetector=1; 
      } 
      myApplet.repaint(); 
     } 
    } 
} 

Anmerkung: gibt es bessere Möglichkeiten, dies zu tun.

+1

Siehe auch dieses verwandte [Beispiel] (http://stackoverflow.com/a/37063037/230513) mit "Aktion". – trashgod