这更多的是一个概念性问题,所以很难发布一个小的可用代码示例。但是,我有一个类,这里覆盖paintComponent
:重写paintComponent两次
public abstract class BasePanel extends JPanel {
...
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR);
this.standardDraw(drawObjects,g2);
}
}
基本上,我想这是“标准方式”这个基地吸引面板如果paintComponent
没有在派生类中重写。所以,我有一个派生类称为AspectRatioPanel
,我想重新指定它是如何得出的事情:
public class AspectRatioPanel extends BasePanel {
...
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR);
// Get ViewPort Bounding Box to clip
BoundingBox viewPortBoundingBox = this.getViewPortBoundingBox();
// Clip to viewport
g2.setClip((int)viewPortBoundingBox.topLeft.getX(),(int)viewPortBoundingBox.topLeft.getY(),(int)viewPortBoundingBox.getWidth(),(int)viewPortBoundingBox.getHeight());
this.standardDraw(drawObjectsBuf,g2);
}
}
我遇到的问题是在派生类中调用super.paintComponent(g)
。我打算在JComponent
中拨打paintComponent
,但首先要经过BasePanel
。有没有更好的方法来解决这个问题?我可以删除BasePanel
中的paintComponent
方法,但使用标准绘图方法对我很有用。我也无法直接呼叫JComponent.paintComponent
,因为它是protected
。有没有解决方案?另外,我在做一些概念上的错误?
我想知道你是否想要实现一个共享接口,并且可能共享相同的组合组件以允许共享行为,而不是在这里使用继承。 – 2014-09-19 14:14:47
你可能想看看[这个问题](http://stackoverflow.com/questions/586363/why-is-super-super-method-not-allowed-in-java)。 – Rob 2014-09-19 14:21:56
另一种方式,如果面板在其他方面是相同的,只是有一个实现,有可能工作在纵横比保存模式。 – kiheru 2014-09-19 14:24:37