Ich habe eine einfache Frage, aber aus irgendeinem Grund stecke ich fest und kann es nicht herausfinden. Ich habe einen einfachen Code mit 3 Schaltflächen in einem JPanel jede der Schaltflächen sollte auf der JPanel mit der überschriebenen PaintComponent zeichnen und es tut, aber was ich tun möchte, ist die Formen bleiben. (nachdem ich es in zufällige Positionen ändern werde) jede Hilfe wäre dankbar, danke!3 Tasten zum Zeichnen von 3 verschiedenen Objekten in einem jPanel
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Ex3 extends JFrame implements ActionListener
{
JButton circle, triang, square;
JPanel jp, jButton;
boolean drawSq, drawCir, drawTr;
public static void main(String[] args)
{
JFrame frame = new Ex3();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public Ex3()
{
super("Ex3");
setSize(400, 500);
circle = new JButton("Circle");
triang = new JButton("Triangle");
square = new JButton("Square");
drawCir = false;
drawSq = false;
drawTr = false;
//setLayout(new FlowLayout(FlowLayout.CENTER, 20, 30));
jButton = new JPanel();
jp = new CustomPanel();
circle.addActionListener(this);
triang.addActionListener(this);
square.addActionListener(this);
jButton.add(circle);
jButton.add(triang);
jButton.add(square);
jButton.add(new JLabel("Kayy"));
jp.setBackground(Color.gray);
add(jp, BorderLayout.CENTER);
add(jButton, BorderLayout.NORTH);
}
@Override
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == circle)
{
drawCir = true;
System.out.println("created cricle");
}
if(e.getSource() == triang)
{
drawTr = true;
System.out.println("created triangle");
}
if(e.getSource() == square)
{
drawSq = true;
System.out.println("created square");
}
repaint();
}
class CustomPanel extends JPanel
{
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
if(drawSq)
{
g.setColor(Color.blue);
g.drawRect(((int)Math.random()* 20), 50, 200, 150);
drawSq = false;
}
else if(drawTr)
{
g.setColor(Color.green);
}
else if(drawCir)
{
g.setColor(Color.red);
g.drawOval(182, 124, 200, 200);
}
else
{
}
//drawSq = false;
drawTr = false;
drawCir = false;
}
}
}
Sie zeichnen nicht einmal drei Formen - also was wollen Sie ?? – gpasch
Ich möchte keine Shapes verwenden, nur so dass drawRect oder drawOval beibehalten werden, wenn eine andere Taste gedrückt wird. –