从另一个JPanel更改一个变量的值时更新JPanel的标签

时间:2014-04-27 23:40:56

标签: java swing events jpanel jlabel

我是Java新手。

我开发了一个具有不同JPanels的应用程序(在这种情况下使用BorderLayout,3个面板)。

在面板1中,我有一个JLabel和一个与其值相关的变量(一个类)(方法get); 在面板2中,我更新了变量(方法集)的值,因为它是在第二个面板中执行操作时完成的。

如何更新面板1中JLabel的值?

在更新面板2中的值以及如何让面板1收听此更改后,我不知道如何触发事件或类似事件。

让我再解释一下。我有一个带有两个JPanel的JFrame,我从一个面板更新模型。更新模型后,应更新其他JPanel的JLabel: 主要:JFrame

public class MainClass extends JFrame
{
    public MainClass()
    {
        // JPanel 1
        ....        
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(400,300);
        setLocationRelativeTo(null);
        setTitle("Test");
        setResizable(false);
        setVisible(true);
        // JPanel 1
        this.add(west, BorderLayout.WEST);
        // JPanel 2
        this.add(board, BorderLayout.CENTER);
    }

    public static void main(String[] args)
    {
        // put your code here
        new MainClass ();
    }
}

JPanel 1

public class West extends JPanel
{
    contFase = new Contador(titulo, valor);
    JLabel lblTitulo;
    ...
    lblTitulo.setText = contFase.getText();
    this.add(lblTitulo);
    ...
}

JPanel 2

public class Board extends JPanel implements ActionListener
{
    ....
    public void actionPerformed(ActionEvent e)
    {
        ...
        //Here Label of panel 1 should be updated with the model
        contFase.setValor(contFase.getValor() + pacman.comerElemento(fase.getPacdots(), fase.getPowerPellets()));
        ...
    }
}

1 个答案:

答案 0 :(得分:0)

我不知道您的代码是如何显示的,因为您没有显示任何代码,但这里有一个示例,说明如何在执行操作时编辑JLabel(在这种情况下 - 按下按钮)。面板上组件的布局无关紧要,但我放了两个你想要的面板。

public class ValueUpdate extends JFrame {

    int x = 0;
    final JLabel label = new JLabel(String.valueOf(x));

    ValueUpdate() {

        JPanel panel1 = new JPanel();
        JPanel panel2 = new JPanel();

        panel1.add(label);

        JButton btn = new JButton("Increment");
        btn.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                x++;
                label.setText(String.valueOf(x));
            }
        });

        panel2.add(btn);

        getContentPane().add(panel1, BorderLayout.CENTER);
        getContentPane().add(panel2, BorderLayout.PAGE_END);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        pack();
        setVisible(true);
    }

    public static void main(String[] args) {

        new ValueUpdate();
    }
}