Wie bringe ich eine JToolBar in den Vordergrund, wenn ich immer wieder ein Bild auf ein JPanel mit .drawImage() zeichne?
Ich habe ein Programm in Java geschrieben, welches meinen Bildschirm über Socket überträgt. Das Bild kommt an und wird angezeigt. So weit so gut. Allerdings habe ich eine ToolBar mit einem Menu oberhalb meines Frames und diese verschindet immer wenn die while Schleife ausgeführt wird, also das JPanel aktualisiert. Diese ToolBar brauche ich aber unter anderem zum stoppen der Bildschirm übertragung. Hier ein Code Schnipsel:
while (buttonPressed) {
BufferedImage img = ImageIO.read(soc.getInputStream());
jPanel.getGraphics().drawImage(img, 0, 0, jPanel.getWidth(), jPanel.getHeight(), null);
}
Wie kann ich also meine Tool Bar dauerhaft über das Bild einblenden?
1 Antwort
Für das Zeichnen des Bildes in das Panel wäre es besser, die paintComponent-Methode zu überschreiben, um den Zeichenvorgang in die übliche Zeichenroutine von Swing einzuordnen.
@Override
protected void paintComponent(Graphics graphics) {
super.paintComponent(graphics);
if (!buttonPressed) {
return;
}
BufferedImage image = ImageIO.read(socket.getInputStream());
graphics.drawImage(image, 0, 0, getWidth(), getHeight(), null);
}
Auf eine Schleife solltest du innerhalb dieses Prozesses auf jeden Fall verzichten, denn auf diese Weise blockierst du lediglich den generellen Zeichenprozess.
Die Methode muss in deiner Panel-Klasse stehen.
public class YourPanel extends JPanel {
/* override paintComponent ... */
}
Für den Frame erstellst du eine Instanz dieser Panel-Klasse und fügst sie dem Layout deines Frames hinzu.
Danke für die Antwort! Allerdings bekomme ich bei super.paintComponent(graphics) eine Fehlermeldung! "The method paintComponent(Graphics) is undefined for the type JFrame". Wie kann ich diese beheben?