그림판에서 화면을 모두 지우는 기능에 대한 질문...
늘솜
기존의 awt 소스를 swing으로 교체하는 작업중,
원래는 MenuPanelListener에서 Canvas를 Canvas c로 받아들여서
g.clearRect(0,0, c.getWidth(), c.getHeight());
이걸로 수행을 했는데 이것을 Canvas 대신에 JPanel로 수행을 하려고
g.clearRect(0,0, panel.getWidth(), panel.getHeight());
이렇게만 바꿨는데 수행이 되지 않네요.
컴파일시 에러는 없지만 기능을 수행하지 못합니다.
Canvas를 JPanel로만 바꿔줬을 뿐인데 왜 안되는지...
요즘 공부하면서 느끼는거지만 차라리 에러 뜨는게 편하네요...^^;
왜 안될까요?import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MenuPanelListener implements ActionListener {
private String strMenu[] = null;
private Pen p = null;
private JPanel panel = null; //모두지우기 실행을 위해 필요.
public MenuPanelListener(String strMenu[], Pen p, JPanel panel ) {
this.strMenu = strMenu;
this.p = p;
this.panel = panel;
}
//눌린 버튼에 따라 도형의 Pen 객체에 도형의 종류를 기록한다.
public void actionPerformed(ActionEvent ae) {
String strCommand = ae.getActionCommand();
if(strCommand.equals(strMenu[0]))
p.setType(0);
else if(strCommand.equals(strMenu[1]))
p.setType(1);
else if(strCommand.equals(strMenu[2]))
p.setType(2);
else if(strCommand.equals(strMenu[3]))
p.setType(3);
else if(strCommand.equals(strMenu[4]))
p.setType(4);
else if(strCommand.equals(strMenu[5]))
p.setType(5);
else if(strCommand.equals(strMenu[6]))
p.setType(6);
else if(strCommand.equals(strMenu[7])) {
Graphics g = panel.getGraphics();
g.clearRect(0,0, panel.getWidth(), panel.getHeight());
}
}
}
-
역곡중
repaint(), revalidate() ... 감사합니다 해볼께요... 그리고 canvas는... 사용하려고 했는데 패널을 JPanel로 바꾸니 버튼이 안보여지게 되더라고요... 이게 awt와 swing을 같이 쓰면 awt가 swing을 덮어버려서 그렇다고 해서 어쩔수 없이 JPanel도 대체를 한건데... 혹 다른 방법이 있나요?
-
Aileen
패널에 컴포넌트를 추가하거나 제거할 때는 패널이나 프레임을 다시 그려주어야 합니다.
repatint()와 revalidate() 요 두 메소드(??)를 패널을 클리어한 후 추가로 호출해주어야 합니다.
그림판은 보통 패널보다는 캔버스를 사용하는 게 더 좋습니다.
굳이 스윙으로 바꾼다고 해서 캔버스를 패널로 대체한다는 것은 좋은 방법이 아니라고 생각합니다.