-2
私は簡単な質問がありますが、なんらかの理由で私は固執してそれを理解できません。 JPanelに3つのボタンを持つ単純なコードを持っていますが、それぞれのボタンはJPanelにPaintComponentをオーバーライドして描画する必要がありますが、私は何をしたいのですか? (私はランダムな位置に変更した後に) お手数ですがありがとうございました!jPanelで3つの異なるオブジェクトを描画する3つのボタン
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;
}
}
}
あなたは3つの図形を描いていないので、何をしたいですか? – gpasch
他のボタンが押されたときにdrawRectまたはdrawOvalが保持されるように、図形を使用したくありません。 –