So ändern Sie Bild mit dem Klick auf eine Schaltfläche in java
Wenn bereits ein Bild angezeigt, durch klicken auf eine Schaltfläche, wie kann ich es ändern, um ein anderes?
Sagen, ich habe zwei Bild gepuffert.
bi = ImageIO.read(new File("1.jpg");
bi2 = ImageIO.read(new File("2.jpg"));
sowie zur Anzeige der bi-ich bin mit
public void paint(Graphics g){
super.paintComponent(g);
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
int w = ((int) dim.getWidth() / 2) - (bi.getWidth() / 2);
int h = ((int) dim.getHeight() / 2) - (bi.getHeight() / 2);
g.drawImage(bi, w, h, null);
}
Ich bin versucht, dies zu tun.
JButton b = new JButton("Change Image");
b.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
bi = bi2;
paint(null);
}
});
diesem set bi, um ein neues Bild und paint () - Methode aufgerufen, aber der Bildbetrachter selbst nicht erscheint jetzt überhaupt.
Fortsetzung von festlegen JFrame hintergrund transparent, aber JPanel oder JLabel-Hintergrund undurchsichtig?
- Warum verwenden Sie nicht nur
setImageIcon(imageIcon)
Methode der Taste? - Der einfachste Weg ist, um Sie als Alternative Symbole auf einer schmucklos-Taste, wie gezeigt, in den die Antwort.
- Wette mich um 8 Sekunden. 😉
- Hurra!!!!!! 😛
- Ich denke, es würde davon abhängen, ob die OP mit der Malerei Symbole auf einer Taste ist oder nicht. Sie konnten malen, um den Behälter statt? Sie gilt jedoch (+1 für Sie) - Sie können auch eine
JLabel
statt - Für bessere Hilfe früher, nach einem SSCCE. Beachten Sie, dass
public void paint(Graphics g){ super.paintComponent(g);
ist fast sicher falsch. Werden mehr wissen, wenn ich sehe, ein SSCCE. - für den pick-up auf
super.paintComponent
verpasst, dass
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie beantragen eine
repaint
.Kann es auch notwendig sein, rufen Sie
invalidate
ersten zu erlauben, den Behälter zu Kennzeichnen, für Malerarbeiten von der repaint-managerWenn Sie kennen die Gegend wie gemalt (also den alten Bereich und den neuen Bereich) Sie nennen könnte
paintImmediately
stattSo etwas wie diese könnten auch arbeiten...