2012-01-29 2 views
-2

У меня есть класс кнопок под названием Keys.java, который возвращает панель кнопок в класс Control.java. У меня есть JLabel в Control.java, но я хочу изменить JLabel при нажатии кнопки. Как бы вы это сделали?Java - Change JLabel

Я попытался установить строку в Keys.java, которая изменяется на основе кнопки, а затем устанавливает текст JLabel, равный строке, но он не работает.

Любые мысли о том, как этого достичь?

+6

Просим выслать минимальный код, воспроизводящий вашу проблему. – Mat

+0

Возможно, этот пост может помочь вам http://stackoverflow.com/questions/9046175/updating-jlabel/9046558#9046558 –

+0

Возможно, проблема связана с рекомендациями - не используя правильную ссылку на просматриваемый JLabel в ActionListener JButton - - но опять же без кода, кто знает. Пожалуйста, предоставьте достаточно информации, чтобы ваш вопрос был на самом деле ответственным, и поэтому нам не нужно тратить время на угадывание. –

ответ

3

Возможно, вы обновляете неверную строку или неправильно устанавливаете текст соответствующей метки. Оба они требуются. В приведенном ниже примере (с использованием ваших имен) два обновления плотно связаны в кнопке actionPerformed(). Показан более слабосвязанный подход 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(); 
      } 
     }); 
    } 
}