1
super.paintComponent(g);
을 사용하는 데 약간 문제가 있습니다. B의 목적은 paintComponent(g);
를 호출 할 때JComponent에서 직접 paintComponent를 재정 의하여
public class A extends JPanel {
...
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
// code of A
}
및
이public class B extends A {
...
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
// code of B
}
, 그것은 또한 호출 여기 내 문제가 있음 : 나는 확장 JPanel의와 B를 확장하는 A는 다음과 같이 두 클래스를 사용하고 있습니다 슈퍼는 A의 함수이며 내가 원하지 않는 코드를 실행합니다. paintComponent(g);
을 JComponent
으로 직접 호출하려면 어떻게해야합니까?
EDIT : A는 추상이 아니므로 A 객체를 인스턴스화 할 수 있습니다.
EDIT2 : : 여기 내 문제와 매우 유사하기 쉬운 예입니다
public class Polygon2 extends Polygon {
private boolean isClicked;
...
public void setClicked(boolean clicked){
isClicked = clicked;
}
public boolean isClicked() {
return clicked;
}
}
public class A extends JPanel {
protected Polygon2 polygon;
...
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.red);
g.drawPolygon(polygon);
}
}
public class B extends A implements MouseListener {
...
@Override
public void mousePressed(MouseEvent e) {
if (polygon.contains(e.getX(), e.getY()) { // click on the polygon
polygon.setClicked(true);
repaint();
}
}
@Override
public void mouseReleased(MouseEvent e) {
polygon.setClicked(false);
repaint();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (polygon.isClicked()) {
g.setColor(Color.green);
} else {
g.setColor(Color.red);
}
g.drawPolygon(polygon);
}
}
왜'A'의 행동을 원하지 않는다면'A'를 확장하고 있습니까? –
A의'paintComponent()'메소드를 실행하지 않기 때문에'super.paintComponent (g);'를 제거하는 것은 어떻습니까? –
B는 A의 확장이지만,'paintComponent (g);'는 B에 더 무언가를 그리기 때문에 중복됩니다. 그리고 B는 A의 변수와 함수가 필요합니다. 문제는 그려진 부분 일뿐입니다. – AntiRGen