JPanelでJbuttonをクリックして図形を描くように練習していますが、できません。私がウェブをサーフィンしているのは5時間ありましたが、私はそれを行う方法を見つけることができません。 これは私がやりたいことです。「長方形」ボタンをクリックするとボタンの下に四角形が表示され、「円」ボタンをクリックすると円が表示されます。ActionListenerを使用してJPanelに図形を描画する方法は?
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();
}
}
変更が表示されるようにするには、repaintを呼び出す必要があります。このコードは非常に多くの悪い習慣で散らばっています。なぜあなたはJFrameを拡張していますか?あなたは 'Shape'クラスに名前をつけるべきではありません。なぜなら、awtのクラス、つまり' java.awt.Shape'です。 – matt
最初に行うことは、[Painting in Swing](http:// www。 oracle.com/technetwork/java/painting-140037.html)と[カスタム・ペインティングの実行](https://docs.oracle.com/javase/tutorial/uiswing/painting/)を参照して、ペイント・プロセスの仕組みを理解してください。一般的な推奨として、私は '静的'を避けるだろう、それはクロスオブジェクトの通信のための解決策ではない – MadProgrammer