Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';t访问第二个JPanel中的JtextField值_Java_Swing_Jtextfield - Fatal编程技术网

Java Can';t访问第二个JPanel中的JtextField值

Java Can';t访问第二个JPanel中的JtextField值,java,swing,jtextfield,Java,Swing,Jtextfield,我从1小时开始尝试,但无法从JPanel访问我的jtextField到Jpanel1。 我正在进行一个课程项目,在该项目中,我必须使用jlabel在JPanel中显示登录用户的名称,但我无法从jpanel1访问JPanel中的jTextField。 我使用它使我的JTextField1成为公共静态,但仍然无法捕获值 我使用这段代码从JPanel1中的JPanel获取值。我正在做的是在JPanel1中创建一个JPanel对象,然后尝试获取该值 LoginPanel s = new LoginPa

我从1小时开始尝试,但无法从JPanel访问我的jtextField到Jpanel1。 我正在进行一个课程项目,在该项目中,我必须使用jlabel在JPanel中显示登录用户的名称,但我无法从jpanel1访问JPanel中的jTextField。 我使用它使我的JTextField1成为公共静态,但仍然无法捕获值

我使用这段代码从JPanel1中的JPanel获取值。我正在做的是在JPanel1中创建一个JPanel对象,然后尝试获取该值

LoginPanel s = new LoginPanel();
String sc=s.jTextField1.getText();
this.jLabel3.setText(sc);
  • 为此,不要将变量设为静态变量,因为您无缘无故违反OOPs规则
  • 如果要获取相同类型的另一个对象的状态,请不要创建一个全新的对象,因为这两个对象将是完全不同的实例
  • 如果需要一个对象查询另一个对象的状态(这里的状态是JTextField中保存的文本),那么为带有JTextField的对象提供一个公共getter字段,该字段将返回其JTextField中的文本,并在需要时让第一个对象调用此方法
  • 当然,第一个对象将需要对文本字段中显示的对象的有效引用。如何做到这一点将取决于您的程序结构,这是我们目前不知道的
  • 通常问题是在获取文本时,因为如果在用户有机会输入任何内容之前尝试获取文本,则代码将无法工作。为了避免这种情况,这通常是在事件侦听器中完成的,同样,详细信息将取决于程序的结构和未显示的代码
  • 有时,通过在模态对话框窗口(如JDialog或JOptionPane)中显示第二个JPanel来实现计时。此方法在尝试从用户获取登录信息时最常用
  • 要获得更好、更具体的帮助,请使您的问题更具信息性。显示实际代码,而不是代码的图像。多少代码?最好是你能创造并向我们展示一个

    例如,使用JOptionPane显示一个JPanel并以模式方式获取文本:

    import java.awt.Component;
    import java.awt.event.ActionEvent;
    import javax.swing.*;
    
    public class TwoPanels extends JPanel {
        private MyPanel1 panel1 = new MyPanel1();
        private MyPanel2 panel2 = new MyPanel2();
    
        public TwoPanels() {
            add(panel2);
            add(new JButton(new AbstractAction("Get Name") {
    
                @Override
                public void actionPerformed(ActionEvent arg0) {
                    Component parent = TwoPanels.this;
                    String title = "Enter Name";
                    int messageType = JOptionPane.PLAIN_MESSAGE;
                    int optionType = JOptionPane.OK_CANCEL_OPTION;
                    int result = JOptionPane.showConfirmDialog(parent, panel1, title, optionType, messageType); 
                    if (result == JOptionPane.OK_OPTION) {
                        String name = panel1.getNameText();
                        panel2.setNameText(name);
                    }
    
                }
            }));
        }
    
        private static void createAndShowGui() {
            TwoPanels mainPanel = new TwoPanels();
    
            JFrame frame = new JFrame("TwoPanels");
            frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            frame.getContentPane().add(mainPanel);
            frame.pack();
            frame.setLocationByPlatform(true);
            frame.setVisible(true);
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    createAndShowGui();
                }
            });
        }
    }
    
    class MyPanel1 extends JPanel {
        private JTextField nameField = new JTextField(10);
    
        public MyPanel1() {
            add(new JLabel("Name:"));
            add(nameField);
        }
    
        public String getNameText() {
            return nameField.getText();
        }
    }
    
    class MyPanel2 extends JPanel {
        private JTextField nameField = new JTextField(10);
    
        public MyPanel2() {
            nameField.setFocusable(false);
            nameField.setEditable(false);
            add(new JLabel("Name:"));
            add(nameField);
        }
    
        public void setNameText(String text) {
            nameField.setText(text);
        }
    
    }
    

    你能给我看一下完整的代码吗?这样我就可以帮你了?