Reputation: 109
I am trying to create a program that allows you to create your own customized form. In one JFrame I have my code where it allows the user to enter the questions that will be on the form. In the other JFrame I want there to be a print out of what the actual form looks like.
I can't get the Layout Managers to work correctly when I have my code like this:
public class WinMaker implements ActionListener, ItemListener {
// Define variables
public JLabel title;
public JButton submit;
public JButton create;
public JTextField question1;
public String q1;
public JTextField question2;
public JTextField question3;
public JTextField question4;
public JTextField question5;
public JTextField answer1;
public JTextField answer2;
public JTextField answer3;
public JTextField answer4;
public JTextField answer5;
public JLabel response1;
public JComboBox questions;
String[] question = { "1", "2", "3", "4", "5" };
JFrame j = new JFrame();
JFrame f = new JFrame();
public WinMaker() {
title = new JLabel(
"Select the # of questions in the form and write your questions in the space below:");
questions = new JComboBox(question);
questions.setSelectedIndex(4);
questions.addItemListener(this);
question1 = new JTextField(30);
question2 = new JTextField(30);
question3 = new JTextField(30);
question4 = new JTextField(30);
question5 = new JTextField(30);
answer1 = new JTextField(15);
answer2 = new JTextField(15);
answer3 = new JTextField(15);
answer4 = new JTextField(15);
answer5 = new JTextField(15);
create = new JButton("Create");
create.setFont(new Font("Tahoma", Font.BOLD, 18));
create.setBackground(Color.red);
create.addActionListener(this);
submit = new JButton("Submit"); // create JButton
submit.addActionListener(this); // add actionlistener to JButton
// Create layout
j.setLayout(new GridLayout(8, 1));
j.getContentPane();
j.add(title);
j.add(questions); //JComboBox
j.add(question1);
q1 = question1.getText(); //I'm trying to get the text in the textfield and
store it in a string so I can print it out on the
next JFrame
response1 = new JLabel(q1);
j.add(question2); //textfield
j.add(question3);
j.add(question4);
j.add(question5);
j.add(create); //create button
j.setSize(300, 300); // dimensions of JFrame
j.setTitle("WinMaker"); // title of JFrame
j.setLocationRelativeTo(null);
j.setResizable(true);
j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
j.setVisible(true);
f.setLayout(new FlowLayout());
f.getContentPane();
f.add(response1); //text from string won't display
f.add(answer1);
f.add(question2);
f.add(answer2);
f.add(question3);
f.add(answer3);
f.add(question4);
f.add(answer4);
f.add(question5);
f.add(answer5);
f.setSize(300, 300); // dimensions of JFrame f.setTitle("WinMaker");
f.setTitle("WinMaker Form"); // title of JFrame
f.setLocationRelativeTo(null);
f.setResizable(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(false);
}
public static void main(String[] args) {
new WinMaker();
}
}
Once I press a JButton I want another JFrame to launch that displays that questions the user has entered in the first JFrame. Any advice?
Upvotes: 1
Views: 190
Reputation: 51553
When you have multiple JFrames
, it's difficult to keep all of the Swing components on the event dispatch thread. Swing components are not thread safe.
As Hovercraft Full Of Eels said in his answer, a Java Swing application has one and only one JFrame
. Within the JFrame
, you can have as many JPanels
as you need to create the GUI.
Upvotes: 0
Reputation: 285405
One problem I see is that you're trying to get the text from a JTextField in the GUI class's constructor. This is before a user has had any time to enter the text so shouldn't work (unless you pre-fill it which I don't see you're doing). You'll want to add ActionListeners to your JTextField or a JButton and get the text from the JTextField after the user has entered it and pressed the JButton or pressed <Enter>
in the JTextField triggering listener, not in the constructor. The Oracle Java Swing tutorials will show you how to do this.
Edit
Regarding your comment:
In the first JFrame I have textfields where the users writes the questions that should be in the survey. Then on when a JButton is pressed it launches another JFrame that prints out those questions as well JTextfields for the person taking to survey to answer.
This begs the question "better in what way?".
Things to consider include...
Upvotes: 1