通过操作事件更改JPanel组件的属性

时间:2019-03-03 04:24:41

标签: java jframe jpanel actionlistener

我正在尝试建立一个系统,当我按下按钮时,JLabel文本将更改,但是我似乎无法使其正常工作。我已经通过执行'system.out.println(“ test”);'测试了动作监听器的工作原理。它工作正常,但是在尝试更改JComponent文本时不起作用。我已经搜索了答案,却找不到任何有效的方法。

主类:

foo

JFrame和JPanel类:

package com.fcs.app;

public class A {
   public static void main(String args[]) {

    window w = new window();

    w.drawWindow();
   }
}

ActionListener类:

package com.fcs.app;

import java.awt.*;
import javax.swing.*;

public class window extends JPanel {

JFrame jf = new JFrame();
JPanel jp = new JPanel();
JButton b1 = new JButton();
JTextField tf1 = new JTextField();
JTextField tf2 = new JTextField();
JLabel plus = new JLabel();
JLabel equals = new JLabel();
JLabel rt = new JLabel();

int Result = 10;

public void drawWindow() {

    //JFrame setup
    jf.setSize(400, 400);
    jf.setUndecorated(true);
    jf.setLayout(null);
    jf.setContentPane(jp);
    jf.setLocation(100, 100);
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jf.setVisible(true);

    //JPanel setup
    jp.setSize(400, 400);
    jp.setLocation(0, 0);
    jp.setBackground(Color.WHITE);
    jp.add(b1);
    jp.add(tf1);
    jp.add(tf2);
    jp.add(plus);
    jp.add(equals);
    jp.add(rt);
    jp.setLayout(null);
    jp.setVisible(true);

    //JButton setup
    b1.setFont(new Font("Times", Font.PLAIN, 15));
    b1.setText("Calculate!");
    b1.setSize(100, 40);
    b1.setLocation(150, 350);
    b1.addActionListener(new Listener());
    b1.setVisible(true);

    //TextField 1 setup
    tf1.setSize(120, 50);
    tf1.setLocation(140, 20);
    tf1.setFont(new Font("Times", Font.PLAIN, 25));
    tf1.setHorizontalAlignment(JTextField.CENTER);
    tf1.setVisible(true);

    //TextField 2 setup
    tf2.setSize(120, 50);
    tf2.setLocation(140, 120);
    tf2.setFont(new Font("Times", Font.PLAIN, 25));
    tf2.setHorizontalAlignment(JTextField.CENTER);
    tf2.setVisible(true);

    //Plus sign Setup
    plus.setSize(120, 50);
    plus.setLocation(140, 70);
    plus.setHorizontalAlignment(JLabel.CENTER);
    plus.setFont(new Font("Times", Font.PLAIN, 40));
    plus.setText("+");
    plus.setVisible(true);

    //Equals sign Setup
    equals.setSize(120, 50);
    equals.setLocation(140, 170);
    equals.setHorizontalAlignment(JLabel.CENTER);
    equals.setFont(new Font("Times", Font.PLAIN, 40));
    equals.setText("=");
    equals.setVisible(true);

    //Result text
    rt.setSize(400, 50);
    rt.setLocation(0, 250);
    rt.setHorizontalAlignment(JLabel.CENTER);
    rt.setFont(new Font("Times", Font.PLAIN, 60));
    rt.setText("");
    rt.setVisible(true);
}
}

1 个答案:

答案 0 :(得分:1)

您正在创建Window的新引用,例如window w = new window();。 它将创建一个新的window实例,而您正在尝试更改新创建的window。 尝试将您之前创建的窗口对象传递给window类或 在窗口类中实现匿名ActionListener。

b1.addActionListener(new ActionListener(){

@Override
public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
    rt.setText("Test");
    }

}

});