JAVA Cirkel en Vierkant

Status
Niet open voor verdere reacties.
Maak er in je MyButton class eens van:
Code:
	if (e.getSource() == cirkel) {la.setText("" + aantal + " maal geklikt");}
	if (e.getSource() == vierkant) {la.setText("" + aantal + " maal geklikt");}

Kijken of hij dan wel wil.

Want zoals je het nu zelf hebt... wil je een string optellen bij een integer.
 
Ik ben even aan het knippen en plakken geweest.
En ik ben uitgekomen op 2 classes

MyFrame
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class MyFrame extends JFrame {

    private JPanel buttonPanel;
    private CustomPanel myPanel;
    private JButton cirkel,  vierkant;
    [COLOR="Red"]private JLabel l1;[/COLOR]

    public MyFrame() {
        [COLOR="Red"]l1 = new JLabel("0 maal geklikt", JLabel.CENTER);[/COLOR]
        MyButton b = new MyButton();
        myPanel = new CustomPanel();   // instantiate canvas
        myPanel.setBackground(Color.yellow);

        cirkel = new JButton("Rond");
        cirkel.addActionListener(b);

        vierkant = new JButton("Vierkant");
        vierkant.addActionListener(b);

        buttonPanel = new JPanel();
        buttonPanel.setLayout(new GridLayout(1, 2));
        buttonPanel.add(cirkel);
        buttonPanel.add(vierkant);

        l1.setOpaque(true);
        l1.setBackground(Color.WHITE);
        l1.setForeground(Color.BLUE);
        l1.setPreferredSize(new Dimension(20, 40));
        l1.setFont(new Font("Serif", Font.PLAIN, 24));

        Container c = getContentPane();
        c.add(l1, BorderLayout.NORTH);
        c.add(myPanel, BorderLayout.CENTER);
        c.add(buttonPanel, BorderLayout.SOUTH);

        setSize(300, 300);
        show();
    }

    public static void main(String args[]) {
        MyFrame app = new MyFrame();

        app.addWindowListener(
                new WindowAdapter() {

                    public void windowClosing(WindowEvent e) {
                        System.exit(0);
                    }
                });
    }

    class MyButton implements ActionListener {

        private int aantal = 0;

        public void actionPerformed(ActionEvent e) {
           [COLOR="Red"] this.aantal++;[/COLOR]
[COLOR="Red"]            if (cirkel.equals(e.getSource())) {
                l1.setText("" + aantal + " maal geklikt");
                myPanel.draw(CustomPanel.CIRKEL);[/COLOR]
            }
[COLOR="Red"]            if (vierkant.equals(e.getSource())) {
                l1.setText("" + aantal + " maal geklikt");
                myPanel.draw(CustomPanel.VIERKANT);[/COLOR]
            }
        }
    }
}

CustomPanel
Code:
import java.awt.*;
import javax.swing.*;

public class CustomPanel extends JPanel {
   public final static int CIRKEL = 1, VIERKANT = 2;
   private int shape;

    @Override
   public void paintComponent( Graphics g )
   {
      super.paintComponent( g );

      if ( shape == CIRKEL )
         g.fillOval( 100, 50, 100, 100 );
      else if ( shape == VIERKANT )
         g.fillRect( 100, 50, 100, 100 );
   }

   public void draw( int s )
   {
      shape = s;
      repaint();
   }
}

Je Main class was nutteloos want je MyFrame heeft ook al een static void main.

De MyButton class heb ik een inner class van gemaakt. Dit omdat je dan geen variabelen mee hoeft te geven zodra je deze class aanmaakt. Want omdat het een inner class is, kan hij meteen ook gebruik maken van de variabelen van de MyFrame class.

In CustomPanel heb ik niets aangepast.

Bij MyFrame heb ik de dingen in rood aangepast.
Als je niet snapt waarom iets zo aangepast is, of gewoon een stuk code niet snapt, dan moet je het even zeggen.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan