Jbutton을 클릭하여 JPanel에 도형을 그릴 연습을하고 있지만 할 수 없습니다. 웹 서핑을하는 데 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();
}
}
변경 사항을 표시하려면 다시 칠할 필요가 있습니다. 이 코드는 많은 나쁜 습관으로 산재 해 있습니다. 왜 JFrame을 확장하고 있습니까? awt, 즉'java.awt.Shape' 클래스이기 때문에 클래스 이름을'Shape '로해서는 안된다. – matt
내가 할 수있는 첫 번째 일은 [Painting in Swing] (http : // www. oracle.com/technetwork/java/painting-140037.html) 및 [사용자 정의 페인팅 수행] (https://docs.oracle.com/javase/tutorial/uiswing/painting/)을 참조하십시오. 일반적인 권장 사항으로 '정적'을 피할 것입니다. 객체 간 통신을위한 해결책이 아닙니다. – MadProgrammer