在java中使用JPanels时,如何在一个类中将用户输入数据显示到另一个类

时间:2016-12-12 18:59:11

标签: java swing jpanel

我一直遇到一些困难。基本上我希望用户在一个Java类中输入一个名称,并将该数据显示在另一个Java类中。我尝试使用获取,但我一直得到' null'。如果我想从我的类(例如)中获取一个int以显示在我的第二个类中,你将如何做到这一点。它基本上是一样的吗?

这是一个展示我的意思的例子

第一堂课

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Exampl extends JFrame implements ActionListener {

    JLabel intro = new JLabel("Welcome What is your name?");
    JTextField answer = new JTextField(10);
    JButton button = new JButton("Enter");
    final int WIDTH = 330;
    final int HEIGHT = 330;
    JLabel greeting = new JLabel("");
    JButton next =new JButton("Next");
     String name = answer.getText();

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


    public Exampl() {
        super("Welcome");
        setSize(WIDTH, HEIGHT);
        setLayout(new FlowLayout());
        add(intro);
        add(answer);
        add(button);
        add(greeting);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        button.addActionListener(this);
        setVisible(true);
    }

    public void actionPerformed(ActionEvent event) {
        Object source = event.getSource();
        if (source == button) {
             String greet = "Hello there" + name;
             greeting.setText(greet);
              add(next);
       next.addActionListener(this);

           if(source==next)
            dispose();
            new Hello();
        }

    }


      public static void main(String[] args) {
        Exampl frame= new Exampl();
        frame.setVisible(true);

    }
}

第二课

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Hello extends JFrame implements ActionListener {
    String name;
    JLabel hi = new JLabel("Nice to see you "+name);
    JButton button = new JButton("Enter");
    final int WIDTH = 330;
    final int HEIGHT = 330;
    JLabel greeting = new JLabel("");
    JButton next =new JButton("Next");

    public Hello() {
        super("Welcome");
        setSize(WIDTH, HEIGHT);
        setLayout(new FlowLayout());
        add(hi);
        add(button);
        add(greeting);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        button.addActionListener(this);
        setVisible(true);
    }

    public void actionPerformed(ActionEvent event) {
        Object source = event.getSource();
        if (source == button) {
             String greet = "example " + name;
             greeting.setText(greet);
              add(next);
        }
    }

    public static void main(String[] args) {
        Exampl frame= new Exampl();
        frame.setVisible(true);           
    }        
}

2 个答案:

答案 0 :(得分:2)

我给你的建议:

  1. 请勿展开JFrame,而是展开JPanel。请参阅:Extends Frame vs creating it inside the programWhy shouldn't you extend JFrame and other components
  2. 不要使用多个JFrames。请参阅The use of multiple JFrames, good / bad practice? BAD ),而您可能想尝试使用Card LayoutJDialog s
  3.   

    延伸是什么意思?你的意思是“公共课Hello扩展Exampl”?我是java的新手,所以我不太了解。

    1. 从另一个答案的评论中,您可能希望在进入GUI应用程序之前首先在控制台应用程序中学习基础知识,这会增加程序的复杂性,从而增加您的学习。
    2.   

      我打算做一个项目,我将输入的名称和随机int添加到文件中,以便我可以存储它。或者将该代码添加到同一个类中会更有意义吗?

      1. 从该评论中,您可以创建一个公共方法,以您需要的格式返回JTextField中的值,然后从另一个类调用该方法,例如:

        public String getUserName() {
            return userNameField.getText();
        }
        
        public int getDigit() {
            try {
                return Integer.parseInt(digitField.getText());
            } catch (NumberFormatException nfe) {
                nfe.printStackTrace();
            }
            return -1; //In case it's not a number, or return 0, or whatever you need
        }
        
        //------In another class------//
        
        int digit = object1.getDigit(); //Where object1 is an instance of the other class where those methods are defined
        

答案 1 :(得分:0)

在第一个类中创建一个getter并扩展第二个类然后使用super.getter();