当前位置: 首页 > 知识库问答 >
问题:

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

卫仲卿
2023-03-14

我试图设置一个系统,当我按下按钮时,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");
    }
}

共有1个答案

公孙慎之
2023-03-14

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

b1.addActionListener(new ActionListener(){

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

}

});
 类似资料:
  • 问题内容: 有什么方法可以在属性更改时触发事件(可能是自定义的)? 比方说,当IMG src更改或DIV的innerHtml吗? 问题答案: 注意:突变事件已从标准中删除,现已弃用。有关如何使用其替代内容的信息,请参见其他答案或文档。 您指的是DOM突变事件。浏览器对这些事件的支持较差(但正在改善)。jQuery的MutationEvents插件可能会为您提供一些帮助。

  • 当被监控目录中的文件的ReadOnly属性更改时,FileSystemMonitor似乎没有触发“更改”事件(没有其他事件)。 这是我的测试代码: 使用该代码,我接收到很多“更改”事件,例如,如果修改时间戳已更改,但如果我更改任何标准属性(如ReadOnly或Hidden),则不会。 我错过了什么,还是我击中了一个“特征”?

  • 问题内容: 我正在尝试在Java Swing中构建MVC应用程序。我有一个包含四个JComboBox的JPanel,并且此JPanel嵌入到父JPanel中。父级JPanel除了子级JPanel之外,还具有其他控件。 每当我更改JComboBoxes的值时,子级JPanel的模型就会正确更新(它基本上是一个日期选择器,每个年,月,日,日和小时中都有一个组合框)。我无法弄清楚的是,每当更改了一个JC

  • 我有一个组件,用ComponentFactoryResolver创建另一个组件。它似乎工作得很好,我可以通过@input访问数据。问题是在组件启动或数据更改时从不调用ngOnChanges。但是,如果我用HTML中的选择器以正常方式创建组件,它就会触发。但这不是动态的,所以剩下的是ComponentFactoryResolver。这是正常行为吗? 我的父组件有它的输入: @ViewChild(My

  • 我正在使用JPanel(更改其组件),但我想从外部JFrame更改它。 对不起,我用Netbeans制作了这段代码(我知道它放了一些不需要的东西来回答这个问题),并尝试清理编辑它,因为真正的代码它更大 这里是JPanel的代码,名称为'myPanel'。 框架!!! 当是从JPanel(review INNER CALL)执行时,它可以工作!但是从JFrame(review//outer CALL

  • 我有一个在事件上触发的可运行文件。我试图从事件中获取列表并清除它,但将列表放在事件期间创建的实体的元数据存储中。到目前为止,我已经尝试过: 注意:这个类实现了一个事件监听器。 和(仅最后一节): 在顶部,它不会清除事件。getDrops()并将把列表放入实体的元数据中,复制事件。getDrops()。在下面的示例中,它将清除事件。getDrops(),但不会将列表放入实体的元数据中,从而擦除事件。