Ich möchte ein Bild als Hintergrund in einigen JComponent
(JPanel
, JLayeredPane
, ..) festlegen. Dazu habe ich die Klasse JImagePanel
erstellt, die JPanel
erweitert und die Methode überschreibt. Das gleiche gilt für die anderen Komponenten. Ich habe jetzt 3 Klassen, die sich nur dadurch unterscheiden, was sie erweitern. Ich wollte eine eindeutige Klasse JImageComponent
erstellen, die JComponent
erweitert, und dann werden alle anderen es erweitern, aber ich kann nicht, da die Klassen, die ich erstellte, bereits eine Klasse erweitern (JImagePanel
erweitert JPanel
). Kann ich das anders machen?Java Swing paintComponent() überschreiben
Dies ist der Code von einer der Klassen I erstellt:
public class JImagePanel extends JPanel {
private static final int DEFAULTX = 0;
private static final int DEFAULTY = 0;
private static final int DEFAULTWIDTH = 1100;
private static final int DEFAULTHEIGHT = 700;
private BufferedImage img;
private int imagex;
private int imagey;
private int imagewidth;
private int imageheight;
private static final long serialVersionUID = 1L;
public JImagePanel(String path){
super();
this.imagex=JImagePanel.DEFAULTX;
this.imagey=JImagePanel.DEFAULTY;
this.imagewidth=JImagePanel.DEFAULTWIDTH;
this.imageheight=JImagePanel.DEFAULTHEIGHT;
img = loadImage(path);
}
public JImagePanel(String path,int x,int y, int width, int height){
super();
this.imagex=x;
this.imagey=y;
this.imagewidth=width;
this.imageheight=height;
img = loadImage(path);
}
@Override
protected void paintComponent(Graphics graphics) {
super.paintComponent(graphics);
setOpaque(false);
graphics.drawImage(img, imagex, imagey,imagewidth,imageheight, null);
}
}
Danke.
Ich bin verwirrt: Warum * genau * können Sie nicht alle Ihre anderen bilddarstellenden Klasse aus dieser haben? Warum kannst du sie nicht umschreiben, um diese zu erweitern? Was ist der Unterschied in all ihren Funktionalitäten? Beachten Sie, dass Sie die Opazität nicht innerhalb von paintComponent, sondern vom Konstruktor aus festlegen sollten. –
Das Problem ist, dass alle Klassen von ihrer "natürlichen Eltern" Klasse erweitern müssen (zum Beispiel JImagePanel ist immer noch ein JPanel und muss es erweitern), daher kann ich nicht nur eine Klasse mit dieser Funktion erstellen und dann erweitern. Es tut mir leid, vielleicht habe ich deine Frage nicht verstanden. Und Danke, ich werde die Opazität im Konstruktor einstellen! –
Ich möchte nur eine Klasse haben, weil ich keinen doppelten Code haben möchte. –