【问题标题】:How to display a textfields text from one class into another class' label [duplicate]如何将一个类中的文本字段文本显示到另一个类的标签中[重复]
【发布时间】:2020-08-19 04:13:39
【问题描述】:

我正在努力弄清楚如何将我在框架“Test1”中的 textField 中的文本放入框架“Test2”中的标签中。

请有人帮忙,这是我所有的代码:

package Frame;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class Test1 extends JFrame {

    private JPanel contentPane;
    public static JTextField textField;



    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Test1 frame = new Test1();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public Test1() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        textField = new JTextField();
        textField.setText("yes");
        textField.setBounds(136, 98, 96, 20);
        contentPane.add(textField);
        textField.setColumns(10);
    }
}

现在是第二帧的代码,Test2。

package Frame;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;

public class Test2 extends JFrame {

    private JPanel contentPane;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Test2 frame = new Test2();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public Test2() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JLabel jlabel = new JLabel("");

    String text = Test1.textField.getText().toString();
        jlabel.setBounds(169, 113, 48, 14);
        contentPane.add(jlabel);

    }

}

它出现的错误是:

java.lang.NullPointerException
    at Frame.Test2.<init>(Test2.java:44)
    at Frame.Test2$1.run(Test2.java:22)
    at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:389)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

我已经尝试并尝试了很多不同的方法,但似乎没有任何效果。我已经尝试了大约 8 种不同的方法,但它们都不起作用,但它们似乎总是对其他人有用。我不明白为什么。有人可以帮忙吗。希望我的解释足够。

提前致谢!!

【问题讨论】:

  • Test1.textField 在调用Test2main 方法时为空
  • 对不起,我不明白你的意思。我对 Java 很陌生

标签: java swing nullpointerexception jlabel jtextfield


【解决方案1】:

说实话,您需要复习各种 Java 概念才能理解此异常。我将尝试澄清一些。这会有所帮助。

  • 您将 textField 定义为没有值的 Test1 类的静态成员。这本质上意味着它是空的。

  • 在 Test2 类中,您正在尝试访问尚未初始化的 textField 的值,因为您正在初始化 Test1 类的构造函数中的 textField,该构造函数在创建 Test1 的对象时不会被调用。

您在这里创建了一种循环冗余,可以通过以下方式解决,但是否能解决您的业务问题,尚不确定:

  • 使用声明本身初始化 textField。
  • 在访问 textField 的值之前实例化 Test1 类的对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-08
    • 2020-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    • 1970-01-01
    相关资源
    最近更新 更多