JPanel을 사용하여 사각형을 페인트하려고합니다. 문제는 메뉴 항목을 클릭 할 때 새 사각형을 그립니다. 그러나 이것을 할 때 그 부분 만 칠해집니다.버튼에 직사각형 페인트하기 JPanel을 사용하여 클릭하기
rectangleMenuItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
squares.addSquare(10, 10, 100, 100);
}
});
이 수행합니다 : 여기가 무슨 뜻입니다
을하지만 난의 ActionListener의 squares.addSquare(...)
바깥 둘 때, 그것은 올바른 모양 제공 (그냥 내가하지 그것에)
squares.addSquare(10, 10, 100, 100);
rectangleMenuItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
//nothing on click...
}
});
여기에 올바른 직사각형
내가 ActionListener에 넣을 때 올바르게 그려지지 않는 이유는 무엇입니까? 감사. 그것이 업데이트/당신이 그것을 말할하지 않는 구성 요소를 다시 칠해야 할 때 모르는, 그래서
전체 코드
class UMLWindow extends JFrame {
Squares squares = new Squares();
private static final long serialVersionUID = 1L;
public UMLWindow() {
addMenus();
}
public void addMenus() {
getContentPane().add(squares);
//squares.addSquare(10, 10, 100, 100);
JMenuBar menubar = new JMenuBar();
JMenu file = new JMenu("File");
file.setMnemonic(KeyEvent.VK_F);
JMenu shapes = new JMenu("Shapes");
file.setMnemonic(KeyEvent.VK_F);
JMenuItem rectangleMenuItem = new JMenuItem("New Rectangle");
rectangleMenuItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
squares.addSquare(10, 10, 100, 100);
}
});
shapes.add(rectangleMenuItem);
menubar.add(shapes);
setJMenuBar(menubar);
setTitle("UML Editior");
setSize(300, 200);
setLocationRelativeTo(null);
}
}
class Squares extends JPanel {
private static final long serialVersionUID = 1L;
private List<Rectangle> squares = new ArrayList<Rectangle>();
public void addSquare(int x, int y, int width, int height) {
Rectangle rect = new Rectangle(x, y, width, height);
squares.add(rect);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
this.setOpaque(true);
this.setBackground(Color.WHITE);
Graphics2D g2 = (Graphics2D) g;
for (Rectangle rect : squares) {
g2.draw(rect);
}
}
}
@Bene : 답변을 작성하십시오. 베네? 어디 갔니? –
그래, 그게 효과가있어. 그것이 대답이된다면 받아 들일 것입니다 – Harry
@ 해리 베네가 돌아 오지 않는다면, 스스로 대답 해주십시오. –