2012-01-29 5 views
-2

私は、Keys.javaと呼ばれるボタンのクラスを持っています。これはControl.javaというクラスにボタンのパネルを返します。 Control.javaにJLabelがありますが、ボタンを押したときにJLabelを変更するだけです。あなたはこれについてどうやって行きますか?Java - JLabelを変更してください

Keys.javaで文字列を設定しようとしましたが、これはボタンに基づいて変化し、JLabelの文字列を文字列と同じに設定しても動作しません。

これを達成する方法についてのご意見はありますか?

+6

問題を再現する最小限のコードを記入してください。 – Mat

+0

あなたのJBossのActionListenerで表示されているJLabelへの正しい参照を使用していない可能性があります - おそらくこの記事はあなたを助けることができますhttp://stackoverflow.com/questions/9046175/updating-jlabel/9046558#9046558 –

+0

- しかしコードなしで、誰が知っている。あなたの質問が実際に答えることができるように十分な情報を与えてください。私たちは時間を無駄にする必要はありません。 –

答えて

3

誤った文字列を更新しているか、対応するラベルのテキストを正しく設定していない可能性があります。どちらも必須です。下の例では(名前を使用して)、ボタンのactionPerformed()に2つの更新が密接に結合されています。より緩やかに結合されたアプローチは、hereと表示されます。

import java.awt.EventQueue; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import javax.swing.AbstractAction; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

/** @see https://stackoverflow.com/questions/9053824 */ 
public class JavaGUI extends JPanel { 

    private Control control = new Control(); 
    private Keys keys = new Keys("Original starting value."); 

    public JavaGUI() { 
     this.setLayout(new GridLayout(0, 1)); 
     this.add(keys); 
     this.add(control); 
    } 

    private class Control extends JPanel { 

     public Control() { 
      this.add(new JButton(new AbstractAction("Update") { 

       @Override 
       public void actionPerformed(ActionEvent e) { 
        System.out.println("Command: " + e.getActionCommand()); 
        keys.string = String.valueOf(System.nanoTime()); 
        keys.label.setText(keys.string); 
       } 
      })); 
     } 
    } 

    private class Keys extends JPanel { 

     private String string; 
     private JLabel label = new JLabel(); 

     public Keys(String s) { 
      this.string = s; 
      label.setText(s); 
      this.add(label); 
     } 
    } 

    private void display() { 
     JFrame f = new JFrame("JavaGUI"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.add(this); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new JavaGUI().display(); 
      } 
     }); 
    } 
} 
関連する問題