Java KeyListener更改JFrame标签值

时间:2012-11-07 19:06:14

标签: java swing jframe jlabel keylistener

我有以下代码:

package testOpdracht1;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.io.InputStream;

public class MainMenu extends JFrame implements KeyListener {

    public MainMenu() {
        initUI();
    }

    public final void initUI() {

        JLabel label1 = new JLabel("text1");
        add(label1);

        addKeyListener(this);

        setTitle("Bla");
        setPreferredSize(new Dimension(400,250));
        setMinimumSize(getPreferredSize());
        setResizable(true);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    public void keyPressed(KeyEvent e) {

    }
    public void keyReleased(KeyEvent e) {

    }
    public void keyTyped(KeyEvent e) {

    }


    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                MainMenu ex = new MainMenu();
                ex.setVisible(true);
            }
        });
    }    
}

我想在按下任何按钮时更改标签中的文字。我怎样才能做到这一点? 我知道我可以从JFrame类调用方法,因为我的MainMenu类扩展了它,但我找不到引用label元素的方法来改变它。

此致

LUXO

3 个答案:

答案 0 :(得分:1)

将JLabel声明为全局变量,并在initUI()中实例化它。现在,在处理事件的ActionListener方法中,您可以在那里更改标签的文本。

答案 1 :(得分:1)

将代码修改为:

package testOpdracht1;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.io.InputStream;

public class MainMenu extends JFrame implements KeyListener {
    final JLabel label1 = new JLabel("text1");
    public MainMenu() {
        initUI();
    }

    public final void initUI() {
        add(label1);

        addKeyListener(this);

        setTitle("Bla");
        setPreferredSize(new Dimension(400,250));
        setMinimumSize(getPreferredSize());
        setResizable(true);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    public void keyPressed(KeyEvent e) {
          label1.setText("foo");
    }

    public void keyReleased(KeyEvent e) {

    }
    public void keyTyped(KeyEvent e) {

    }


    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                MainMenu ex = new MainMenu();
                ex.setVisible(true);
            }
        });
    }    
}

答案 2 :(得分:0)

您必须将JLabel声明为全局变量,然后在任何keyXXX()方法中,您可以使用setText()类的JLabel方法更改其文本。