I have been looking for multiple ways to open a JFrame with a button. One of the ways I found was to establish the JFrame with a method and call upon that method with the button. That however does not seem to be working with my program. Could someone please tell me what I am doing wrong? I am pretty new to Java and am trying to learn on my own and seem to be doing a pretty terrible job of it. I am trying to create a Catalog and at the bottom of it have a button called "Make a New Purchase" which will open a new JFrame that will allow someone to enter their information. Much of the code in the program is unnecessary and I will edit it later, such as the multiple JPanels. All I need to do is get the new JFrame to come up with the button click. The showNewFrame() method is what I am trying to have activated by the button press.
public class Catalog extends JFrame
{
//Construct a panel for each row
JPanel firstRow = new JPanel();
JPanel secondRow = new JPanel();
JPanel thirdRow = new JPanel();
JPanel fourthRow = new JPanel();
JPanel fifthRow = new JPanel();
JPanel sixthRow = new JPanel();
JPanel seventhRow = new JPanel();
JPanel eighthRow = new JPanel();
JPanel ninthRow = new JPanel();
JPanel tenthRow = new JPanel();
JPanel eleventhRow = new JPanel();
JPanel twelvethRow = new JPanel();
JPanel thirteenthRow = new JPanel();
JPanel fourteenthRow = new JPanel();
JPanel fifteenthRow = new JPanel();
JPanel sixteenthRow = new JPanel();
JPanel seventeenthRow = new JPanel();
JPanel eighteenthRow = new JPanel();
JPanel nineteenthRow = new JPanel();
JPanel twentiethRow = new JPanel();
JPanel twentyfirstRow = new JPanel();
JPanel twentysecondRow = new JPanel();
JPanel twentythirdRow = new JPanel();
JPanel twentyfourthRow = new JPanel();
//Construct a panel for the fields and buttons
JPanel fieldPanel = new JPanel();
JPanel buttonPanel = new JPanel();
//Construct labels and text boxes
JLabel coatOneLabel = new JLabel("Coat One");
ImageIcon pictureOne = new ImageIcon("C:\\Users\\p6\\Desktop\\prodImage.jpeg");
JLabel picLabelOne = new JLabel(pictureOne);
JLabel priceOneLabel = new JLabel("Price:");
JLabel coatTwoLabel = new JLabel("Coat Two");
ImageIcon pictureTwo = new ImageIcon("snow.png");
JLabel picLabelTwo = new JLabel(pictureTwo);
JLabel priceTwoLabel = new JLabel("Price:");
JLabel coatThreeLabel = new JLabel("Coat Three");
ImageIcon pictureThree = new ImageIcon("snow.png");
JLabel picLabelThree = new JLabel(pictureThree);
JLabel priceThreeLabel = new JLabel("Price:");
JLabel coatFourLabel = new JLabel("Coat Four");
ImageIcon pictureFour = new ImageIcon("snow.png");
JLabel picLabelFour = new JLabel(pictureFour);
JLabel priceFourLabel = new JLabel("Price:");
JLabel coatFiveLabel = new JLabel("Coat Five");
ImageIcon pictureFive = new ImageIcon("snow.png");
JLabel picLabelFive = new JLabel(pictureFive);
JLabel priceFiveLabel = new JLabel("Price:");
JLabel coatSixLabel = new JLabel("Coat Six");
ImageIcon pictureSix = new ImageIcon("snow.png");
JLabel picLabelSix = new JLabel(pictureSix);
JLabel priceSixLabel = new JLabel("Price:");
JLabel coatSevenLabel = new JLabel("Coat Seven");
ImageIcon pictureSeven = new ImageIcon("snow.png");
JLabel picLabelSeven = new JLabel(pictureSeven);
JLabel priceSevenLabel = new JLabel("Price:");
JLabel coatEightLabel = new JLabel("Coat Eight");
ImageIcon pictureEight = new ImageIcon("snow.png");
JLabel picLabelEight = new JLabel(pictureEight);
JLabel priceEightLabel = new JLabel("Price:");
//Construct buttons
JButton submitButton = new JButton("Make A Purchase");
JButton exitButton = new JButton("Not Right Now");
public static void main(String[] args)
{
//set the look and feel of the interface
try
{
UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
}
catch(Exception e)
{
JOptionPane.showMessageDialog(null,"The UIManager could not set the Look and Feel for this application.","Error",JOptionPane.INFORMATION_MESSAGE);
}
Catalog f = new Catalog();
f.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
f.setSize(800,600);
f.setTitle("Coat Catalog");
f.setResizable(false);
f.setLocation(200,200);
f.setVisible(true);
}
public Catalog()
{
Container c = getContentPane();
c.setLayout((new BorderLayout()));
fieldPanel.setLayout(new GridLayout(20,10));
FlowLayout rowSetup = new FlowLayout(FlowLayout.LEFT,5,3);
firstRow.setLayout(rowSetup);
secondRow.setLayout(rowSetup);
thirdRow.setLayout(rowSetup);
fourthRow.setLayout(rowSetup);
fifthRow.setLayout(rowSetup);
sixthRow.setLayout(rowSetup);
seventhRow.setLayout(rowSetup);
eighthRow.setLayout(rowSetup);
ninthRow.setLayout(rowSetup);
tenthRow.setLayout(rowSetup);
eleventhRow.setLayout(rowSetup);
twelvethRow.setLayout(rowSetup);
thirteenthRow.setLayout(rowSetup);
fourteenthRow.setLayout(rowSetup);
fifteenthRow.setLayout(rowSetup);
sixteenthRow.setLayout(rowSetup);
seventeenthRow.setLayout(rowSetup);
eighteenthRow.setLayout(rowSetup);
nineteenthRow.setLayout(rowSetup);
twentiethRow.setLayout(rowSetup);
twentyfirstRow.setLayout(rowSetup);
twentysecondRow.setLayout(rowSetup);
twentythirdRow.setLayout(rowSetup);
twentyfourthRow.setLayout(rowSetup);
buttonPanel.setLayout(new FlowLayout(FlowLayout.CENTER));
//Add fields to rows
firstRow.add(coatOneLabel);
firstRow.add(coatTwoLabel);
secondRow.add(picLabelOne);
secondRow.add(picLabelTwo);
thirdRow.add(priceOneLabel);
thirdRow.add(priceTwoLabel);
fourthRow.add(coatThreeLabel);
fourthRow.add(coatFourLabel);
fifthRow.add(picLabelThree);
fifthRow.add(picLabelFour);
sixthRow.add(priceThreeLabel);
sixthRow.add(priceFourLabel);
seventhRow.add(coatFiveLabel);
seventhRow.add(coatSixLabel);
eighthRow.add(picLabelFive);
eighthRow.add(picLabelSix);
ninthRow.add(priceFiveLabel);
ninthRow.add(priceSixLabel);
tenthRow.add(coatSevenLabel);
tenthRow.add(coatEightLabel);
eleventhRow.add(picLabelSeven);
eleventhRow.add(picLabelEight);
twelvethRow.add(priceSevenLabel);
twelvethRow.add(priceEightLabel);
//Add rows to panel
fieldPanel.add(firstRow);
fieldPanel.add(secondRow);
fieldPanel.add(thirdRow);
fieldPanel.add(fourthRow);
fieldPanel.add(fifthRow);
fieldPanel.add(sixthRow);
fieldPanel.add(seventhRow);
fieldPanel.add(eighthRow);
fieldPanel.add(ninthRow);
fieldPanel.add(tenthRow);
fieldPanel.add(eleventhRow);
fieldPanel.add(twelvethRow);
fieldPanel.add(thirteenthRow);
fieldPanel.add(fourteenthRow);
fieldPanel.add(fifteenthRow);
fieldPanel.add(sixteenthRow);
fieldPanel.add(seventeenthRow);
fieldPanel.add(eighteenthRow);
fieldPanel.add(nineteenthRow);
fieldPanel.add(twentiethRow);
fieldPanel.add(twentyfirstRow);
fieldPanel.add(twentysecondRow);
fieldPanel.add(twentythirdRow);
fieldPanel.add(twentyfourthRow);
//Add button to panel
buttonPanel.add(submitButton);
buttonPanel.add(exitButton);
//Add panels to frame
c.add(fieldPanel, BorderLayout.CENTER);
c.add(buttonPanel, BorderLayout.SOUTH);
exitButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent h)
{
if (h.getSource() == exitButton)
{
System.exit(0);
}
}
});
//Add functionality to buttons
submitButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent d)
{
if (d.getSource() == submitButton)
{
showNewFrame();
}
}
});
}
private void showNewFrame()
{
JFrame BillPayer = new JFrame("BillPayer");
BillPayer.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
BillPayer.pack();
BillPayer.setVisible(true);
class BillPayer extends JFrame implements ActionListener
{
//Declare output stream
DataOutputStream output;
//Construct a panel for each row
JPanel firstRow = new JPanel();
JPanel secondRow = new JPanel();
JPanel thirdRow = new JPanel();
JPanel fourthRow = new JPanel();
JPanel fifthRow = new JPanel();
JPanel sixthRow = new JPanel();
JPanel seventhRow = new JPanel();
JPanel eighthRow = new JPanel();
//Construct a panel for the fields and buttons
JPanel fieldPanel = new JPanel();
JPanel buttonPanel = new JPanel();
//Construct labels and text boxes
JLabel acctNumLabel = new JLabel("Account Number: ");
JTextField acctNum = new JTextField(15);
JLabel pmtLabel = new JLabel("Payment Amount:");
JTextField pmt = new JTextField(10);
JLabel firstNameLabel = new JLabel("First Name: ");
JTextField firstName = new JTextField(10);
JLabel lastNameLabel = new JLabel("Last Name:");
JTextField lastName = new JTextField(20);
JLabel addressLabel = new JLabel("Address:");
JTextField address = new JTextField(35);
JLabel cityLabel = new JLabel("City: ");
JTextField city = new JTextField(10);
JLabel stateLabel = new JLabel("State:");
JTextField state = new JTextField(2);
JLabel zipLabel = new JLabel("Zip:");
JTextField zip = new JTextField(9);
//Construct button
JButton submitButton = new JButton("Submit");
public void main(String[] args)
{
//set the look and feel of the interface
try
{
UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
}
catch(Exception e)
{
JOptionPane.showMessageDialog(null,"The UIManager could not set the Look and Feel for this application.","Error",JOptionPane.INFORMATION_MESSAGE);
}
BillPayer f = new BillPayer();
f.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
f.setSize(450,300);
f.setTitle("Crandall Power and Light Customer Payments");
f.setResizable(false);
f.setLocation(200,200);
f.setVisible(true);
}
public BillPayer()
{
Container c = getContentPane();
c.setLayout((new BorderLayout()));
fieldPanel.setLayout(new GridLayout(8,1));
FlowLayout rowSetup = new FlowLayout(FlowLayout.LEFT,5,3);
firstRow.setLayout(rowSetup);
secondRow.setLayout(rowSetup);
thirdRow.setLayout(rowSetup);
fourthRow.setLayout(rowSetup);
fifthRow.setLayout(rowSetup);
sixthRow.setLayout(rowSetup);
seventhRow.setLayout(rowSetup);
eighthRow.setLayout(rowSetup);
buttonPanel.setLayout(new FlowLayout(FlowLayout.CENTER));
//Add fields to rows
firstRow.add(acctNumLabel);
firstRow.add(pmtLabel);
secondRow.add(acctNum);
secondRow.add(pmt);
thirdRow.add(firstNameLabel);
thirdRow.add(lastNameLabel);
fourthRow.add(firstName);
fourthRow.add(lastName);
fifthRow.add(addressLabel);
sixthRow.add(address);
seventhRow.add(cityLabel);
seventhRow.add(stateLabel);
seventhRow.add(zipLabel);
eighthRow.add(city);
eighthRow.add(state);
eighthRow.add(zip);
//Add rows to panel
fieldPanel.add(firstRow);
fieldPanel.add(secondRow);
fieldPanel.add(thirdRow);
fieldPanel.add(fourthRow);
fieldPanel.add(fifthRow);
fieldPanel.add(sixthRow);
fieldPanel.add(seventhRow);
fieldPanel.add(eighthRow);
//Add button to panel
buttonPanel.add(submitButton);
//Add panels to frame
c.add(fieldPanel, BorderLayout.CENTER);
c.add(buttonPanel, BorderLayout.SOUTH);
//Add functionality to buttons
submitButton.addActionListener(this);
//Get the current date and open the file
Date today = new Date();
SimpleDateFormat myFormat = new SimpleDateFormat("MMddyyyy");
String filename = "payments" + myFormat.format(today);
try
{
output = new DataOutputStream(new FileOutputStream(filename));
}
catch(IOException io)
{
JOptionPane.showMessageDialog(null,"The program could not create a storage location. Please check the disk drive and then run the program again.","Error",JOptionPane.INFORMATION_MESSAGE);
System.exit(1);
}
addWindowListener(
new WindowAdapter()
{
public void windowClosing(WindowEvent f)
{
int answer = JOptionPane.showConfirmDialog(null,"Are you sure you want to exit and submit the file?", "File Submission",JOptionPane.YES_NO_OPTION);
if (answer == JOptionPane.YES_OPTION)
System.exit(0);
}
}
);
}
public void actionPerformed(ActionEvent f)
{
String arg = f.getActionCommand();
if(checkFields())
{
try
{
output.writeUTF(acctNum.getText());
output.writeUTF(pmt.getText());
output.writeUTF(firstName.getText());
output.writeUTF(lastName.getText());
output.writeUTF(address.getText());
output.writeUTF(city.getText());
output.writeUTF(state.getText());
output.writeUTF(zip.getText());
JOptionPane.showMessageDialog(null,"The payment information has been saved.","Submission successful",JOptionPane.INFORMATION_MESSAGE);
}
catch(IOException c)
{
System.exit(1);
}
clearFields();
}
}
public boolean checkFields()
{
if ((acctNum.getText().compareTo("")<1) ||
(pmt.getText().compareTo("")<1) ||
(firstName.getText().compareTo("")<1) ||
(lastName.getText().compareTo("")<1) ||
(address.getText().compareTo("")<1) ||
(city.getText().compareTo("")<1) ||
(state.getText().compareTo("")<1) ||
(zip.getText().compareTo("")<1))
{
JOptionPane.showMessageDialog(null,"You must complete all fields.","Data Entry Error",JOptionPane.WARNING_MESSAGE);
return false;
}
else
{
return true;
}
}
public void clearFields()
{
//Clear fields and reset the focus
acctNum.setText("");
pmt.setText("");
firstName.setText("");
lastName.setText("");
address.setText("");
city.setText("");
state.setText("");
zip.setText("");
acctNum.requestFocus();
}
}
}
}
I tried to make quite a few changes to the program. The issue is that now the button does bring up a new window but the window doesn't include the data I need it to have. It has the title "Coat Payment", so I believe it is getting to everything but the inner class I have in the BillPayer method (the inner class is PaymentScreen). Once again I believe that my ignorance is leading me astray.
//Add functionality to buttons
submitButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent d)
{
if (d.getSource() == submitButton)
{
BillPayer();
}
}
});
}
private void BillPayer()
{
JDialog PaymentScreen = new JDialog();
PaymentScreen.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
PaymentScreen.setSize(900,600);
PaymentScreen.setTitle("Coat Payment");
PaymentScreen.setResizable(false);
PaymentScreen.setLocation(200,200);
PaymentScreen.setVisible(true);
class PaymentScreen extends JDialog implements ActionListener
{