2016-06-29 13 views
-2

Für ein Spiel, das ich mache, möchte ich, dass der Spieler eine Auswahl aus zwei (oder mehr) Knöpfen hat, und wenn eine Schaltfläche angeklickt wird, erscheint ein neuer Bildschirm.Entfernen von JButtons Text nach dem Klicken

Ab sofort bleibt der Text der 1. Schaltfläche jedoch erhalten, wenn darauf geklickt wird. Ich habe versucht, setVisible (false) im Listener und später setText (""), aber beide nur Fehler erstellen. Wenn mir jemand einen anderen Rat geben könnte, würde ich das sehr zu schätzen wissen. Ich habe das gesamte Panel meines Spiels als Referenz, obwohl nur der B1Listener für das Problem relevant sein sollte.

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.awt.Graphics; 
import java.awt.Image; 
import java.awt.image.BufferedImage; 
import javax.swing.Timer; 


public class Panel00 extends JPanel 
{ 
    private BufferedImage myImage; 
    private Graphics myBuffer; 
    public Timer timer; 
    public JButton button1; 
    public JButton button2; 
    public JLabel label1 = new JLabel("Good Choice!"); 
    public JLabel label2 = new JLabel("You're Fired!!"); 
    public int x = 10;  //CountDown from 100  
    public int delay = 1000; //milliseconds 
    boolean drawWorld = false; 



    public Panel00() 
    { 

    myImage = new BufferedImage(1000, 1000, BufferedImage.TYPE_INT_RGB); 
    myBuffer = myImage.getGraphics(); 




    setLayout(null); 


    JButton button1 = new JButton(); 
    button1.setSize(300, 200); 
    button1.setLocation(100,150); 
    button1.setFont(new Font("Serif", Font.BOLD, 18)); 
    button1.setText("<html><center>"+"Until we are able to determine and understand this problem"+"<br>"+" and the dangerous threat it poses, our country cannot be the victims of horrendous attacks"+"<br>"+"by people that believe only in Jihad, and have no sense of reason or respect for human life"+"</center></html>"); 
    button1.addActionListener(new B1Listener()); 
    button1.setBorder(null); 
    button1.setOpaque(false); 
    button1.setContentAreaFilled(false); 
    button1.setBorderPainted(false); 
    add(button1); 

    JButton button2 = new JButton(); 
    button2.setSize(300, 200); 
    button2.setLocation(600,150); 
    button2.setFont(new Font("Serif", Font.BOLD, 18)); 
    button2.setText("<html><center>"+"If ISIS wants to fight, fine with us. "+"<br>"+"We have wanted that fight for a long time. There is no room in the world for ISIS any more."+"<br>"+"The Muslims or us, one of us will have to go."+"</center></html>"); 
    button2.addActionListener(new B2Listener()); 
    button2.setBorder(null); 
    button2.setOpaque(false); 
    button2.setContentAreaFilled(false); 
    button2.setBorderPainted(false); 
    add(button2); 

    ActionListener counter = 
    new ActionListener() 
    { 
     public void actionPerformed(ActionEvent evt) 
     { 
      repaint(); 
      x--; 
      if (x == 0) 
      { 
       timer.stop(); 
      } 
     } 
    }; 
    timer = new Timer(delay, counter); 
    timer.start(); 


    setFocusable(true); 
    } 


    public void paintComponent(Graphics g) 
    { 
    ImageIcon Nintendo = new ImageIcon("trumpT.jpg"); 

    g.drawImage(Nintendo.getImage(), 0, 0, 1000, 1000, null); 

    ImageIcon N = new ImageIcon("trump speech.jpg"); 

    g.setColor(Color.WHITE); 
    g.fillOval(90,100,320,320); 

    g.setColor(Color.WHITE); 
    g.fillOval(590,100,320,320); 

    g.setColor(Color.WHITE); 
    g.setFont(new Font("Serif",Font.BOLD, 50)); 
    g.drawString(""+x,500,50); 

    if (drawWorld) 
    { 
    g.drawImage(N.getImage(), 0, 0, 1000, 1000, null); 
    } 
} 

    private class B1Listener implements ActionListener 
    { 
    public void actionPerformed(ActionEvent e) 
    { 
    repaint(); 
    drawWorld = true; 

    label1.setLocation(500,700); 
    label1.setSize(400, 400); 
    label1.setForeground(new Color(212, 175, 55)); 
    label1.setFont(new Font("Serif", Font.BOLD, 40)); 
    add(label1); 

    button1.setText(""); 

    timer.stop(); 

    } 
} 

    private class B2Listener implements ActionListener 
    { 
    public void actionPerformed(ActionEvent e) 
    { 
    label2.setLocation(500,700); 
    label2.setSize(400, 400); 
    label2.setForeground(Color.RED); 
    label2.setFont(new Font("Serif", Font.BOLD, 40)); 
    add(label2); 
    timer.stop(); 
    } 
} 
} 
+1

Welche Art von Fehler, dass es Ihnen geben? – PabloJ

+0

Sie müssen die Ereignislistener im selben Bereich festlegen, nachdem Sie die Schaltflächen deklariert haben. Dazu können Sie die anonymen inneren Klassen wie von @ControlAltDel vorgeschlagen verwenden –

Antwort

0

Besser eine anonyme innere Klasse zu verwenden, wie

button1.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent ae) { 
    button1.setText(""); 
    } 
}); 
0

Ihr Panel00 Konstruktor erstellt eine lokale button1, der die Instanz Variable button1 versteckt, die null bleibt. Und du machst dasselbe mit button2.

in Ihrem Konstruktor

ändern
JButton button1 = new JButton(); 
    ... 
JButton button2 = new JButton(); 

zu

button1 = new JButton(); 
    ... 
    button2 = new JButton(); 
Verwandte Themen