Ich übe, um eine Form auf einem JPanel zu zeichnen, indem ich auf einen Jbutton klicke, aber ich kann nicht. Es ist fünf Stunden her, dass ich im Internet surfe, aber ich finde den Weg nicht. Das möchte ich tun: wenn ich auf "Rechteck" klicke, erscheint unter den Schaltflächen ein Rechteck und wenn ich auf "Kreis" klicke, erscheint ein Kreis. Wie zeichne ich eine Form in JPanel mit ActionListener?
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class Shape extends JFrame {
JButton rec, circle;
static String botSelected;
Shape(){
frameSet();
}
void frameSet(){
JFrame frame = new JFrame();
frame.setVisible(true);
frame.setSize(600,300);
rec = new JButton ("Rectangle");
circle = new JButton("Circle");
JPanel panel = new JPanel();
frame.add(panel);
panel.add(rec);
panel.add(circle);
Click clk = new Click();
rec.addActionListener(clk);
circle.addActionListener(clk);
}
public void paint (Graphics g){
super.paint(g);
if (botSelected.equals("Rectangle"))
g.fillRect(50,50,50,50);
else if (botSelected.equals("Circle"))
g.fillOval(50,50,50,50);
}
public static void main (String [] arg){
Shape s = new Shape();
}
}
class Click implements ActionListener{
public void actionPerformed (ActionEvent e){
Shape.botSelected = e.getActionCommand();
}
}
Sie müssen Repaint aufrufen, damit die Änderungen angezeigt werden. Dieser Code ist mit so vielen schlechten Praktiken übersät. Warum erweitern Sie JFrame? Sie sollten Ihre Klasse 'Shape' nicht nennen, da es sich um eine Klasse in AWT handelt, dh' java.awt.Shape' – matt
. Das erste, was ich tun würde, ist eine Lektüre von [Painting in Swing] (http: // www. oracle.com/technetwork/java/painting-140037.html) und [Ausführen von benutzerdefinierten Bildern] (https://docs.oracle.com/javase/tutorial/uiswing/painting/), um besser zu verstehen, wie der Malprozess funktioniert. Als allgemeine Empfehlung würde ich "statisch" vermeiden, es ist keine Lösung für die Kommunikation zwischen Objekten – MadProgrammer