Java 将Jframe Jtextfield发送到另一个类
我有一个Java 将Jframe Jtextfield发送到另一个类,java,swing,jframe,jtextfield,Java,Swing,Jframe,Jtextfield,我有一个JFrame,它有一个textfield和一个按钮。它应该在程序开始时变为可见,当我点击按钮时,它应该变为不可见,并将textfield的文本发送到另一个类。但它什么也不发送,当我点击按钮时,IDE进入调试模式 public class JframeFoo extends JFrame { private String username = new String(); public JframeFoo() { // ------------------
JFrame
,它有一个textfield
和一个按钮
。它应该在程序开始时变为可见,当我点击按钮时,它应该变为不可见,并将textfield的文本发送到另一个类。但它什么也不发送,当我点击按钮时,IDE进入调试模式
public class JframeFoo extends JFrame {
private String username = new String();
public JframeFoo() {
// --------------------------------------------------------------
// Making Frame for login
final JTextField usernameFiled = new JTextField();
this.add(usernameFiled);
JButton signinButton = new JButton();
// ------------------------------------------------------------
signinButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
username = usernameFiled.getText();
setVisible(false);
Main.mainpage.setVisible(true);
}
});
// --------------------------------------------------------------------------
}
public String getuserName() {
return this.username;
}
}
我的另一个类称为Jframe:
System.out.println(JframeFoo.getusername);
暂时忽略在用户处跳出多个JFrame并不是一个好的用户界面设计,对于一个对象与另一个对象通信,它必须具有对另一个对象的有效引用。(抱歉被女儿打断了) 因此,对于一个JFrame类从另一个JFrame类获取信息,它必须具有对获取文本的第一个对象的引用,我看不到您传递该引用,例如在构造函数或setter方法中 例如,如果Class1的对象具有Class2的对象所需的信息,那么传递该信息的一种方法是向Class2提供对Class1的有效实例的引用,然后让Class2从Class1实例获取信息。e、 g
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import javax.swing.*;
public class ClassMain {
private static void createAndShowGui() {
ClassMain mainPanel = new ClassMain();
JFrame frame = new Class1();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
class Class1 extends JFrame {
private JTextField textfield = new JTextField(10);
public Class1() {
JPanel contentPane = (JPanel) getContentPane();
contentPane.setLayout(new FlowLayout());
add(textfield);
add(new JButton(new AbstractAction("Open Window") {
@Override
public void actionPerformed(ActionEvent arg0) {
Class2 class2 = new Class2(Class1.this);
Class1.this.setVisible(false);
class2.pack();
class2.setVisible(true);
class2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}));
}
public String getTextfieldText() {
return textfield.getText();
}
}
class Class2 extends JFrame {
private Class1 class1;
private JLabel label = new JLabel("");
public Class2(Class1 class1) {
this.class1 = class1;
label.setText(class1.getTextfieldText());
add(label);
}
}
实际上它有一个正确的构造函数。JframeFoo.getusername JframeFoo是JframeFoo类的一个实例。如果它没有引用,我会得到语法错误。但在这里我不这么认为。@Shaftak:看起来好像你在使用静态变量来引用你的JFrame实例,这是一个非常糟糕的主意。不管是否存在构造函数,您在哪里将一个对象的引用传递给另一个对象?insctace对象在我的主类中是静态的。
在我的主类中是静态的。
不要在主方法中创建对象,顺便说一句,@HFOE的代码示例可以在对当前实例有效的构造函数中创建,例如,public ClassMain(){
而不是staticprivate static void createAndShowGui(){
,但从另一方面来说,这也是正确和标准的,没有显著差异