2016-03-23 20 views
2

Ich mache ein einfaches Konvertierungstool, um Dollar in Euro zu konvertieren und umgekehrt.So ändern Sie das Symbol in JLabel mit JButton

Der ganze Zweck ist nur zu experimentieren und lernen dieses coole Werkzeug, Java.

Ich habe ein JLabel an der Spitze mit einem Symbol eines Euro, um die Startwährung anzuzeigen. Ich habe einen Knopf darunter, den ich verwenden möchte, um dieses Symbol zu einem Dollar zu ändern.

Ich arbeite gerade mit einem ActionListener herum und probiere verschiedene Variationen von setIcon/setIconImage aus (bei jeder Iteration kann ich mir vorstellen, dass bisher noch nichts funktioniert hat).


public class MoneyConverter extends JFrame implements ActionListener{ 
    //add label and icon showing base conversion currency 
    JLabel startcur = new JLabel("<--- Starting Curency", new ImageIcon("C:\\Users\\Russel\\Desktop\\1euro.gif"), SwingConstants.CENTER); 
    JButton euro = new JButton("Swap to Euro"); 
    JButton dollar = new JButton("Swap to Dollar"); 

ich dann eine Methode

public MoneyConverter(){} 

eingerichtet und fügen Sie alle meine Komponenten zu einem Raster-Layout und fügen Sie ActionLister in mein convert Tasten.

z.B.

dollar.addActionListener(this); 
    euro.addActionListener(this); 

Nach dem üblichen Code (setVisible und die Gleichen, die ich deinetwegen nicht angegeben wird, wie ich es mit dieser stören nicht sehen, lassen Sie es mich wissen, wenn ich alles enthalten sollte)

public void ActionPerformed (ActionEvent e){ 
    Object source = e.getSource(); 
    if (source.equals(euro)){ 
     startcur.setIcon(new ImageIcon("C:\\Users\\Russel\\Desktop\\1.gif")); 
    } 
} 

Dieser Teil wurde mehrmals geändert und ist der Hauptgrund für diesen Beitrag, wie ändere ich dieses Symbol in JLabel? - Ich werde auch den Umrechnungskurs hier einstellen, abhängig davon, ob Sie mit Dollar oder Euro beginnen. (Rate wird nicht tatsächliche Rate sein.)

+0

Dies kann Ihnen helfen: http: // stackoverflow.com/questions/7966287/dynamically-change-jbutton-icon – PeterMmm

+0

Sie könnten der 'actionPerformed'-Methode und innerhalb der' condition' eine 'print'-Anweisung hinzufügen, um zu sehen, ob die Methode aufgerufen wird und ob die Überprüfung korrekt ist. Ist die Methode wirklich "ActionPerformed" mit Kapital A? –

+0

Ich werde kurz in Nebenläufigkeit und Threads schauen, damit ich die verknüpfte Frage verstehen kann, das war ein Nebenprojekt, um das anzuwenden, was ich getan habe, bevor ich blind weiterging und ich dachte, dass ich etwas Einfaches übersehen habe. Danke für die Antwort hoffentlich hilft, sobald ich mit Threads begonnen habe ... –

Antwort

1

Zunächst erstellen und speichern eine neue ImageIcon

ImageIcon image = new ImageIcon(getClass().getResource("/nameOfImage.jpg")); 

diese dann in Ihrem setzen Action Listener

label.setIcon(image); 
label.setText(""); 

Sie müssen sicherstellen, dass Sie eine haben Ressourcenordner für Ihr Projekt eingerichtet. Sie können lesen, wie das in IntelliJ oder Eclipse

zu tun ist Sie erklären auch die actionPerformed() falsch. Ich schlage vor, lesen Sie auf this Sie sollten es so tun.

Herkömmlicherweise beginnen Methodennamen in Java mit einem Kleinbuchstaben und Klassen beginnen mit einem Großbuchstaben.

0

Der ganze Zweck ist nur zu experimentieren und lernen dieses coole Werkzeug, Java.

Dann zeige ich Ihnen, wie Sie dieses Programm in vielerlei Hinsicht verbessern können.

//Don't make your Swing class implement Actionlistener and add it as a 
//listener to itself in the constructor before it's fully initialized 
public class MoneyConverter extends JFrame { 
    //These don't have to be loaded at runtime, so make them into constants 
    //Java variables and methods follow thisNamingConvention 
    private static final Icon euroIcon = new ImageIcon("C:\\Users\\Russel\\Desktop\\1euro.gif"); 
    private static final Icon dollarIcon = new ImageIcon("C:\\Users\\Russel\\Desktop\\1dollar.gif"); 
    //These you probably want to use later so save them as private class variables 
    //Make them final so you can access them in the ActionListeners below 
    private final JLabel currencyLabel; 
    private final JButton euroButton; 
    private final JButton dollarButton; 

    public MoneyConverter() { 
     //These are declared final and are are therefore usually set first in constructor 
     this.currencyLabel = new JLabel("<--- Starting Curency", euroIcon, SwingConstants.CENTER); 
     this.euroButton = new JButton("Swap to Euro"); 
     this.dollarButton = new JButton("Swap to Dollar"); 

     //Write your own separate ActionListener for each button 
     euroButton.addActionListener(new ActionListener() { 
      @Override 
      public void run() { 
       currencyLabel.setIcon(euroIcon); 
       //These two are required for you to see the effect 
       //This should also be the solution to your initial problem 
       currencyLabel.revalidate(); 
       currencyLabel.repaint(); 
      } 
     }); 
     dollarButton.addActionListener(new ActionListener() { 
      @Override 
      public void run() { 
       currencyLabel.setIcon(dollarIcon); 
       currencyLabel.revalidate(); 
       currencyLabel.repaint(); 
      } 
     }); 

     //Add your components here using whatever layout manager you want. 
    } 

    public static void main(String []args){ 
     //Start new Swing applications like this to prevent it from 
     //clogging the rest of the program 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       new MoneyConverter(); 
      } 
     }); 
    } 
}