1
我在使用super.paintComponent(g);
时遇到了一些问题。 我使用的是2类A延伸的JPanel和B延伸的如下:从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
}
我在这里的问题是,当B的对象调用paintComponent(g);
,它也要求超级是A的功能,然后执行我不想要的代码。 如何在不调用A的重写函数的情况下直接调用paintComponent(g);
的JComponent
?
编辑:A不是抽象的,所以我可以instanciate它的一个对象。
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'? –
如何删除'super.paintComponent(g);'因为您不希望A的'paintComponent()'方法被执行? –
B是A的扩展,但它的'paintComponent(g);'是多余的,因为我在B中画了更多东西。而B需要A的变量和函数来工作。问题只是抽签的一部分。 – AntiRGen