gpt4 book ai didi

java - 如何将一个类中的文本字段文本显示到另一类的标签中

转载 作者:行者123 更新时间:2023-12-01 16:55:35 26 4
gpt4 key购买 nike

我正在努力弄清楚如何将“Test1”框架中的文本字段中的文本放入“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 种不同的方法,但没有一个有效,但它们似乎总是对其他人有效。我不明白为什么。有人可以帮忙吗?希望我的解释足够了。

提前致谢!!

最佳答案

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

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

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

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

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

关于java - 如何将一个类中的文本字段文本显示到另一类的标签中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61597257/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com