Very new to using Java and spent hours looking for a solution, but I cannot find out how to get the input collected by a JTextField
with a button and ActionListener
then be used for a getter method that can receive idNum
so I can use the input in another class.
import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; public class Staff extends JFrame implements ActionListener { private staffBooking staffBooking = new staffBooking(); String weekArray[] = { "Week1", "Week2" }; String dayArray[] = { "Monday" , "Tuesday", "Wednesday", "Thursday", "Friday" }; JPanel panel = new JPanel(); JLabel weekLabel = new JLabel("Week: ", SwingConstants.RIGHT); JLabel dayLabel = new JLabel("Day: ", SwingConstants.RIGHT); JLabel idLabel = new JLabel("ID: ", SwingConstants.RIGHT); static JTextField id = new JTextField("",2); JComboBox weekDrop = new JComboBox(weekArray); JComboBox dayDrop = new JComboBox(dayArray); JButton button = new JButton("Submit"); private static int idNum; public Staff() { setTitle("Staff"); setSize(250,250); setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); setLocationRelativeTo(null); setLayout(new GridLayout(4, 2)); add(weekLabel); add(weekDrop); add(dayLabel); add(dayDrop); add(idLabel); add(id); add(panel); add(button); button.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ if(id.getText().equals("")==false) { if (e.getSource() == button) { staffBooking.setEnabled(true); staffBooking.setVisible(true); idNum = Integer.parseInt(id.getText()); } } } }); } public static int getID() { return idNum; } }
Advertisement
Answer
I believe what you are trying to do is something like this:
import javax.swing.*; import javax.swing.SwingConstants; public class Staff extends JFrame /*implements ActionListener*/ { private final JPanel panel = new JPanel(); private final JLabel idLabel = new JLabel("ID: ", SwingConstants.RIGHT); private final JTextField id = new JTextField("",5); private final JButton button = new JButton("Submit"); private int idNum; public Staff() { StaffBooking staffBooking = new StaffBooking(this); setTitle("Staff"); setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); setLocationRelativeTo(null); panel.add(idLabel); panel.add(id); panel.add(button); add(panel); button.addActionListener(e -> { if(! id.getText().isEmpty()) { idNum = Integer.parseInt(id.getText()); staffBooking.setVisible(true); } }); pack(); setVisible(true); } public int getID() { return idNum; } public static void main(String[] args) { new Staff(); } } class StaffBooking extends JDialog { public StaffBooking(Staff staff) { JPanel panel = new JPanel(); JLabel idLabel = new JLabel(" "); JButton button = new JButton("Show ID"); button.addActionListener(e -> { idLabel.setText(String.valueOf(staff.getID())); }); panel.add(button); panel.add(idLabel); add(panel); setLocationRelativeTo(null); pack(); } }
Using a setter in StaffBooking
would be better in this case:
public class Staff extends JFrame /*implements ActionListener*/ { private final JPanel panel = new JPanel(); private final JLabel idLabel = new JLabel("ID: ", SwingConstants.RIGHT); private final JTextField id = new JTextField("",5); private final JButton button = new JButton("Submit"); public Staff() { StaffBooking staffBooking = new StaffBooking(); setTitle("Staff"); setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); setLocationRelativeTo(null); panel.add(idLabel); panel.add(id); panel.add(button); add(panel); button.addActionListener(e -> { if(! id.getText().isEmpty()) { int idNum = Integer.parseInt(id.getText()); staffBooking.setID(idNum); staffBooking.setVisible(true); } }); pack(); setVisible(true); } public static void main(String[] args) { new Staff(); } } class StaffBooking extends JDialog { private int idNum; public StaffBooking() { JPanel panel = new JPanel(); JLabel idLabel = new JLabel(" "); JButton button = new JButton("Show ID"); button.addActionListener(e -> { idLabel.setText(String.valueOf(idNum)); }); panel.add(button); panel.add(idLabel); add(panel); setLocationRelativeTo(null); pack(); } public void setID(int idNum) { this.idNum = idNum; } }
A further improvement oof the structure can be achieved by using a model class, shared between Staff
and StaffBooking
:
public class Staff extends JFrame /*implements ActionListener*/ { private final JPanel panel = new JPanel(); private final JLabel idLabel = new JLabel("ID: ", SwingConstants.RIGHT); private final JTextField id = new JTextField("",5); private final JButton button = new JButton("Submit"); public Staff() { Model model = new Model(); StaffBooking staffBooking = new StaffBooking(model); setTitle("Staff"); setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); setLocationRelativeTo(null); panel.add(idLabel); panel.add(id); panel.add(button); add(panel); button.addActionListener(e -> { if(! id.getText().isEmpty()) { int idNum = Integer.parseInt(id.getText()); model.setID(idNum); staffBooking.setVisible(true); } }); pack(); setVisible(true); } public static void main(String[] args) { new Staff(); } } class StaffBooking extends JDialog { public StaffBooking(Model model) { JPanel panel = new JPanel(); JLabel idLabel = new JLabel(" "); JButton button = new JButton("Show ID"); button.addActionListener(e -> { idLabel.setText(String.valueOf(model.getID())); }); panel.add(button); panel.add(idLabel); add(panel); setLocationRelativeTo(null); pack(); } } class Model{ private int idNum; public int getID() { return idNum; } public void setID(int idNum) { this.idNum = idNum; } }