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

问题描述 投票:0回答:1

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

主要课程:

package com.fcs.app;

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

    window w = new window();

    w.drawWindow();
   }
}

JFrame和JPanel类:

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);
}
}

ActionListener类:

package com.fcs.app;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Listener implements ActionListener {

window w = new window();

@Override
public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
    w.rt.setText("Test");
    }
}
java jframe jpanel actionlistener
1个回答
1
投票

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

b1.addActionListener(new ActionListener(){

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

}

});
© www.soinside.com 2019 - 2024. All rights reserved.