Это скорее концептуальный вопрос, поэтому трудно опубликовать небольшой пример работоспособного кода. Но, у меня есть класс, который переопределяет 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)
в производном классе. Я намерен позвонить ему paintComponent
в JComponent
, но он проходит через BasePanel
. Есть ли лучший способ подойти к этой проблеме? Я мог бы удалить метод paintComponent
в BasePanel
, но для меня полезен стандартный способ рисования. Я также не могу назвать JComponent.paintComponent
напрямую, так как это protected
. Есть ли решение для этого? Кроме того, я делаю что-то концептуально неправильно?
Интересно, хотите ли вы реализовать как общий интерфейс, так и, возможно, поделиться одним и тем же композиционным компонентом, чтобы разрешить совместное поведение, а не использовать наследование здесь. –
Возможно, вы захотите проверить [этот вопрос] (http://stackoverflow.com/questions/586363/why-is-super-super-method-not-allowed-in-java). – Rob
Другим способом, если панели в противном случае то же самое, имеет только одну реализацию, которая имеет возможность работать в режиме сохранения пропорций. – kiheru