Giuly Nextup
Giuly Nextup

Reputation: 11

Pass a String to another class

I'm writing an application where I need to get two String objects from the GUI to the nullObject class.

I'm relatively new to programming, and am trying my best to learn. If you have any tips on how to make this better, I'd be really thankful!

My GUI class:

package com.giuly.jsoncreate;

public class GUI {
    private JFrame startFrame;
    private JFrame chkFrame;
    private JFrame osFrame;
    private JFrame appVFrame;

    private JPanel controlPanel;

    private JButton nextPage;
    private JButton cancel;
    private JButton save;

    public GUI() {
        generateGUI();
    }

    public static void main(String[]args) {
        GUI gui = new GUI();
    }

    public void generateGUI() {
        //Creation of the First Frame
        startFrame = new JFrame("JSCON Creator");
        startFrame.setSize(1000, 700);
        startFrame.setLayout(new FlowLayout());
        startFrame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        //Panel Creation
        controlPanel = new JPanel();
        controlPanel.setLayout(new FlowLayout());
        //Button Creation
        cancel = new JButton("Cancel");
        cancel.setSize(100, 100);
        cancel.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });

        nextPage = new JButton("Next");
        nextPage.setSize(100, 100);
        nextPage.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                startFrame.setVisible(false);
                showText();
            }
        });
        startFrame.add(controlPanel);
        startFrame.add(cancel);
        startFrame.add(nextPage);
        startFrame.setVisible(true);
        startFrame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
    public void showText() {
        JFrame textFrame = new JFrame();
        textFrame.setSize(1000, 700);
        textFrame.setTitle("Text");
        textFrame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        JPanel textPanel = new JPanel();

        JLabel titleLabel = new JLabel("Title");
        textPanel.add(titleLabel);
        JLabel descrLabel = new JLabel("Description");

        JTextField tfTitle = new JTextField("",15);
        tfTitle.setForeground(Color.BLACK);
        tfTitle.setBackground(Color.WHITE);

        JTextField tfDescr = new JTextField("",30);
        tfDescr.setForeground(Color.BLACK);
        tfDescr.setBackground(Color.WHITE);

        textPanel.add(tfTitle);

        textPanel.add(descrLabel);
        textPanel.add(tfDescr);

        JButton buttonOK = new JButton("OK");
        textPanel.add(buttonOK);
        buttonOK.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String jsonTitle = tfTitle.getText();
                String jsonDescr = tfDescr.getText();
                System.exit(0);
            }
        });
        textFrame.add(textPanel);
        textFrame.setVisible(true);
}

I want to get the Strings jsonTitle and jsonDescr into another class, so I can store them. In the end I will have some Strings and I need to save them in a JSON file. I need a way to get those two Strings, what advice do you guys have?

Upvotes: 1

Views: 97

Answers (2)

Erick G. Hagstrom
Erick G. Hagstrom

Reputation: 4945

You're declaring jstonTitle and jsonDescr inside the actionPerformed() method. That means that as soon as actionPerformed() exits you'll lose those variables. You need to declare them in an enclosing context. For example, you could make them fields on the GUI class. Still assign them in actionPerformed(), but declare them up at the top of GUI where you're declaring startFrame, chkFrame, etc.

That will give you the ability to access those values from anywhere within GUI.

Oh, BTW, get rid of System.exit(0);. (Have you actually tried to run your program?)

Upvotes: 0

gonzo
gonzo

Reputation: 2121

Erick is correct with his answer. Just thought I should add additional info. If you declare jstonTitle and jsonDescr like your other fields using private you still will not be able to access these fields from another class. Coding up a getter for the fields along with declaring them at the top of GUI should solve your problem. Then just create an instance of GUI in your other class and call the method.

public String getJsonTitle(){
    return this.jsonTitle;
}

Upvotes: 1

Related Questions