So ändern Sie Bild in JPanel, ohne einen neuen JFrame (Repaint() funktioniert nicht! )

Menschen des Internets!

Ich ve wurden arbeiten an ein Trink-Spiel-Programm für die Schule.

//nicht relevante Informationen, nur für die lulz:
//Die Schule vorgeschlagen, das Spiel habe ich nicht 😉 das ist das Spiel //http://sotallytober.com/games/verbal/mexican/

Sowieso, ich Malte ein Bild in ein JPanel mit dem folgenden code (es ist eine Klasse, die Sie erweitert JPanel)

public class iconPanel extends JPanel {

ImageIcon image;
Image pic;
public iconPanel(String startScreenImage) {
      image = new ImageIcon(startScreenImage);
      pic = image.getImage();
      this.setBackground(new Color(0, true));
}

@Override

public void paintComponent(Graphics g) {
    //Paint background first
    g.drawImage (pic, 0, 0, getWidth (), getHeight (), this);
}

Nun in meiner anderen Klasse, wo ich das layout und die Komponenten erkläre ich auf der Oberseite meines JPanels wie diese :

private JPanel pnDrinkPlayerBW;

Dann in einer Methode der gleichen Klasse mit dem Namen MakeComponents ich die JPanel zu :

pnDrinkPlayerBW = new iconPanel("img/glass.jpg");
pnDrinkPlayerBW.setPreferredSize(new Dimension(183,61));

Danach füge ich dem Panel, wo es kommen muss, und das panel auf das frame in der Methode makeLayout() (ich denke nicht, dass es sinnvoll code, so dass, wenn Sie es sehen wollen, Fragen Sie mich)

Dann auf, wenn eine Taste gedrückt wird, will ich das ändern glass.jpg Bild zu einem anderen Bild, zum Beispiel beerGlass0.png, so in den actionlistener in eine andere Methode actionEvents() ich Mach das:

pnDrinkPlayerBW = new iconPanel("img/beerGlass.png");
pnDrinkPlayerBW.setPreferredSize(new Dimension(183,61));
pnDrinkPlayerBW.repaint();

Ich lege den Konstruktor dieser Klasse auch hier, nur wenn die Menschen es brauchen :

public SpelScreen(){
    makeComponents();
    makeLayout();
    actionEvents();
} //note : this is'nt the full constructor, just the call for the methods I talked          about, SpelScreen extends JFrame..

Also, was ich tun möchte, wird in der Klasse SpelScreen ein neues Bild für die iconPanel und streichen Sie es mit der gleichen Instanz der spelscreen.

Ich bin Recht neu in Java, also nicht erwarten, dass Sie mich zu schnell komplizierte code 🙂

Dank!

  • Du hast vergessen zu nennen super.paintComponent in Ihrem paintComponent Methode.
  • Meinst du wie diese? public void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage (pic, 0, 0, getWidth (), getHeight (), this);
InformationsquelleAutor Sytham | 2014-03-05
Schreibe einen Kommentar