How to make blank fields valid until user clicks SAVE -Java - java

This is a simple program that uses a JDialog to add or edit work orders. When the dialog appears, the user will enter information into the fields (name, date, position, billing rate, etc.). The program must validate each of these fields. The problem is that if I leave a field blank and I tab to the next field, the error message pops up. Actually, this isn't a problem, its working as it should, however, I would like to make it so that all blank fields are valid until the user clicks SAVE. Any suggestions or ideas? I have pasted the entire program below so feel free to compile and run it yourself, thank you!
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.lang.*;
import java.awt.event.*;
import javax.swing.filechooser.*;
import java.io.*;
import static javax.swing.GroupLayout.Alignment.*;
public class WorkOrderProject
{
public static void main (String args[])
{
new MyFrameClass();
}
}
class MyFrameClass extends JDialog implements ActionListener
{
JButton addButton, editButton;
JPanel buttonPanel;
WorkOrder workOrderToEdit = new WorkOrder();
MyFrameClass()
{
Container cp;
addButton = new JButton("ADD");
addButton.addActionListener(this);
addButton.setActionCommand("ADD");
editButton = new JButton("EDIT");
editButton.addActionListener(this);
editButton.setActionCommand("EDIT");
buttonPanel = new JPanel(new FlowLayout());
buttonPanel.add(addButton);
buttonPanel.add(editButton);
cp = getContentPane();
cp.add(buttonPanel, BorderLayout.NORTH);
setupMainFrame();
}
void setupMainFrame()
{
Toolkit tk;
Dimension d;
tk = Toolkit.getDefaultToolkit();
d = tk.getScreenSize();
setLayout(new FlowLayout());
setTitle("Work Orders");
setSize(d.width/2, d.height/2);
setLocation(d.width/4, d.height/4);
setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
if(e.getActionCommand().equals("ADD"))
{
System.out.println("ADD");
new MyDialog();
}
else if(e.getActionCommand().equals("EDIT"))
{
System.out.println("EDIT");
new MyDialog(workOrderToEdit);
}
}
}
class MyDialog extends JDialog implements ActionListener
{
JPanel buttonPanel, fieldPanel;
JButton button1, button2, button3, button4;
GroupLayout layout;
WorkOrder workOrderToEdit;
String[] comboTypes = { "Sales", "Hardware", "Electronics" };
JComboBox<String> comboTypesList;
public MyDialog()
{
Container cp;
button1 = new JButton("SAVE");
button1.addActionListener(this);
button1.setActionCommand("SAVE");
button2 = new JButton("CANCEL");
button2.addActionListener(this);
button2.setActionCommand("CANCEL");
button2.setVerifyInputWhenFocusTarget(false);
button3 = new JButton("SAVE AND NEW");
button3.addActionListener(this);
button3.setActionCommand("SAVE AND NEW");
buttonPanel = new JPanel(new FlowLayout());
buttonPanel.add(button2);
buttonPanel.add(button1);
buttonPanel.add(button3);
fieldPanel = setFields();
cp = getContentPane();
cp.add(fieldPanel, BorderLayout.NORTH);
cp.add(buttonPanel, BorderLayout.SOUTH);
setTitle("Add New Work Order");
setupMainFrame();
}
public MyDialog(WorkOrder w)
{
Container cp;
button1 = new JButton("SAVE");
button1.addActionListener(this);
button1.setActionCommand("SAVE");
button2 = new JButton("CANCEL");
button2.addActionListener(this);
button2.setActionCommand("CANCEL");
button2.setVerifyInputWhenFocusTarget(false);
buttonPanel = new JPanel(new FlowLayout());
buttonPanel.add(button2);
buttonPanel.add(button1);
fieldPanel = setFields();
getContentPane().add(fieldPanel, BorderLayout.NORTH);
getContentPane().add(buttonPanel, BorderLayout.SOUTH);
setTitle("Edit Work Order");
setupMainFrame();
}
void setupMainFrame()
{
Toolkit tk;
Dimension d;
tk = Toolkit.getDefaultToolkit();
d = tk.getScreenSize();
setLayout(new FlowLayout());
setSize(d.width/3, d.height/3);
setLocation(d.width/3, d.height/3);
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
setModal(true);
setVisible(true);
}
JPanel setFields()
{
GroupLayout layout;
JPanel p;
JLabel label1, label2, label3, label4, label5;
JTextField text1, text2, text3, text4, text5;
String[] comboTypes = { "-Select-" ,"Sales", "Hardware", "Electronics" };
comboTypesList = new JComboBox<>(comboTypes);
comboTypesList.addActionListener(this);
label1 = new JLabel("Name: ");
label2 = new JLabel("Department: ");
label3 = new JLabel("Date of request: ");
label4 = new JLabel("Date request was fulfilled: ");
label5 = new JLabel("Billing rate: ");
text1 = new JTextField(20);
text1.setInputVerifier(new NameVerifier());
text2 = new JTextField(20);
text3 = new JTextField(20);
text4 = new JTextField(20);
text5 = new JTextField(20);
p = new JPanel();
layout = new GroupLayout(p);
p.setLayout(layout);
layout.setAutoCreateGaps(true);
layout.setAutoCreateContainerGaps(true);
GroupLayout.SequentialGroup hGroup = layout.createSequentialGroup();
hGroup.addGroup(layout.createParallelGroup().addComponent(label1).addComponent(label2).addComponent(label3).addComponent(label4).addComponent(label5));
hGroup.addGroup(layout.createParallelGroup().addComponent(text1).addComponent(comboTypesList).addComponent(text3).addComponent(text4).addComponent(text5));
layout.setHorizontalGroup(hGroup);
GroupLayout.SequentialGroup vGroup = layout.createSequentialGroup();
vGroup.addGroup(layout.createParallelGroup(BASELINE).addComponent(label1).addComponent(text1));
vGroup.addGroup(layout.createParallelGroup(BASELINE).addComponent(label2).addComponent(comboTypesList));
vGroup.addGroup(layout.createParallelGroup(BASELINE).addComponent(label3).addComponent(text3));
vGroup.addGroup(layout.createParallelGroup(BASELINE).addComponent(label4).addComponent(text4));
vGroup.addGroup(layout.createParallelGroup(BASELINE).addComponent(label5).addComponent(text5));
layout.setVerticalGroup(vGroup);
return(p);
}
public void actionPerformed(ActionEvent e)
{
if(e.getActionCommand().equals("SAVE"))
{
System.out.println("SAVED");
dispose();
}
else if(e.getActionCommand().equals("CANCEL"))
{
System.out.println("CANCELED");
dispose();
}
else if(e.getActionCommand().equals("SAVE AND NEW"))
{
System.out.println("SAVED AND NEW");
}
}
}
class WorkOrder
{
String name;
int department;
Object dateRequested;
Object dateFulfilled;
String description;
double billingRate;
}
class NameVerifier extends InputVerifier
{
public boolean verify(JComponent input)
{
String str;
boolean isValid;
int score;
str = ((JTextField)input).getText().trim();
if(str.equals(""))
{
isValid = false;
JOptionPane.showMessageDialog(input.getParent(), "Name field is blank.", "ERROR", JOptionPane.ERROR_MESSAGE);
}
else
{
isValid = true;
}
return(isValid);
}
}

The problem is that if I leave a field blank and I tab to the next field, the error message pops up.
Don't use an InputVerifier. The purpose of the InputVerifier is to validate a text field when it loses focus.
I would like to make it so that all blank fields are valid until the user clicks SAVE.
Add your validation logic (for all the fields) to the ActionListener of the "Save" button.
So you would use the InputVerifier on each text field to validate the format of the data entered (when the data is entered). For example, for the "billing rate" you would verify that the value is a double number, the date fields contain a valid date.
Then in the "Save" listener you validate that all fields contain data. So if the data is in a valid format and all fields contain data, then you know the forum can be submitted for processing.

Related

How can I transfer data between one jframe to another jframe?

I'm new to java and for some reason I don't know any other way to transfer the data from another frame after pressing submit. For example, it will show the output frame the label and textfield that the user wrote in the first frame like this "Name: "user's name". If you do know please post the code I should put, thank you!
package eventdriven;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class EventDriven extends JFrame {
JPanel items = new JPanel();
JLabel fName = new JLabel("First Name: ");
JLabel lName = new JLabel("Last Name: ");
JLabel mName = new JLabel("Middle Name: ");
JLabel mNum = new JLabel("Mobile Number: ");
JLabel eAdd = new JLabel("Email Address: ");
JTextField fname = new JTextField(15);
JTextField lname = new JTextField(15);
JTextField mname = new JTextField(15);
JTextField mnum = new JTextField(15);
JTextField eadd = new JTextField(15);
JButton submit = new JButton("Submit");
JButton clear = new JButton("Clear All");
JButton okay = new JButton("Okay");
JTextArea infos;
JFrame output;
public EventDriven()
{
this.setTitle("INPUT");
this.setResizable(false);
this.setSize(230, 300);
this.setLocation(300, 300);
this.setLayout(new FlowLayout(FlowLayout.CENTER));
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.add(fName);
this.add(fname);
this.add(lName);
this.add(lname);
this.add(mName);
this.add(mname);
this.add(mNum);
this.add(mnum);
this.add(eAdd);
this.add(eadd);
submit.addActionListener(new btnSubmit());
this.add(submit);
clear.addActionListener(new btnClearAll());
this.add(clear);
okay.addActionListener(new btnOkay());
this.add(items);
this.setVisible(true);
}
class btnSubmit implements ActionListener{
#Override
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == submit)
{
submit.setEnabled(false);
output = new JFrame("OUTPUT");
output.show();
output.setSize(300,280);
output.setTitle("OUTPUT");
output.add(okay);
output.setLayout(new FlowLayout(FlowLayout.CENTER));
}
}
}
class btnClearAll implements ActionListener{
#Override
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == clear)
{
fname.setText(null);
lname.setText(null);
mname.setText(null);
mnum.setText(null);
eadd.setText(null);
submit.setEnabled(true);
output.dispose();
}
}
}
class btnOkay implements ActionListener{
#Override
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == okay)
{
fname.setText(null);
lname.setText(null);
mname.setText(null);
mnum.setText(null);
eadd.setText(null);
submit.setEnabled(true);
output.dispose();
}
}
}
public static void main(String[] args)
{
EventDriven window = new EventDriven();
}
}
It's not clear what problem you are having displaying a value from one field in another frame. But here's an example of doing that (with fields reduced to just one for demonstration):
public class EventDriven extends JFrame {
private final JTextField nameField = new JTextField(15);
private final JButton submit = new JButton("Submit");
private final JButton clear = new JButton("Clear All");
public EventDriven() {
setTitle("Input");
setLayout(new FlowLayout(FlowLayout.CENTER));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(new JLabel("Name: "));
add(nameField);
submit.addActionListener(this::showOutput);
add(submit);
clear.addActionListener(this::clearInput);
add(clear);
pack();
}
private void showOutput(ActionEvent ev) {
submit.setEnabled(false);
JDialog output = new JDialog(EventDriven.this, "Output", true);
output.add(new Label("Name: " + nameField.getText()), BorderLayout.CENTER);
JButton okButton = new JButton("OK");
output.add(okButton, BorderLayout.SOUTH);
okButton.addActionListener(bv -> output.setVisible(false));
output.pack();
output.setVisible(true);
}
private void clearInput(ActionEvent ev) {
nameField.setText(null);
submit.setEnabled(true);
}
public static void main(String[] args) {
EventDriven window = new EventDriven();
window.setVisible(true);
}
}
You will also see that I've simplified your action listeners to demonstrate an easier way to respond to user driven event.s

How to turn a random int into a String for use in if/else?

So I'm writing a program for my AP Comp Sci class and I need some help with parsing ints and such.
How do I take a random integer and turn it into a string that can be used inside an if/else statement?
import java.awt.*;
import java.awt.event.*;
import java.awt.Container;
import javax.swing.*;
import java.lang.*;
import java.io.*;
import java.util.*;
class LibraryGUI {
// variables and objects
JFrame frame, frame2, frame3;
JPanel panel, panel2, panel3;
JLabel label, label2, label3, label4;
JButton button1;
JButton button2, button3, enter2;
JTextField username, logincred;
Random r = new Random();
public LibraryGUI()
{
frame = new JFrame("LexCorp Library");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
label = new JLabel("Welcome to LexCorp Library");
button1 = new JButton("Login");
button1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
frame3 = new JFrame("Find Account");
panel3 = new JPanel();
enter2 = new JButton("Enter");
frame3.setLayout(new GridLayout(1,1));
panel3.setBackground(Color.white);
panel3.setSize(700,700);
label4 = new JLabel("Enter account number");
logincred = new JTextField("\t\t");
logincred.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent j){
String choose = logincred.getText();
}
});
panel3.add(label4);
panel3.add(logincred);
panel3.add(enter2);
frame3.getContentPane().add (panel3);
frame3.pack();
frame3.setVisible(true);
//internalcode
}
});
button2 = new JButton("Make a new Account");
button2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent f){
//GUI Section
frame2 = new JFrame("Make a new account");
//frame2.setLayout(new GridLayout(4,4));
panel2 = new JPanel();
panel2.setLayout(new GridLayout(4,3));
//panel2.setLayout(new FlowLayout());
label2 = new JLabel("Account's name");
username = new JTextField();
int acc = r.nextInt(1000);
label3 = new JLabel("Your account number is " +acc);
button3 = new JButton("Enter");
button3.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ent){
JOptionPane.showMessageDialog(frame, "Account Created");
frame2.dispose();
}
});
panel2.add(label2);
panel2.add(username);
panel2.add(button3);
panel2.add(label3);
frame2.pack();
username.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
String user = username.getText();
System.out.println(user);
}
});
panel2.setSize(700,700);
panel2.setBackground(Color.LIGHT_GRAY);
frame2.getContentPane().add (panel2);
frame2.pack();
frame2.setVisible(true);
//internalCode
}
});
//panel properties
panel = new JPanel();
panel.setSize(700,700);
panel.setLayout(new GridLayout(10,10));
panel.setBackground(Color.yellow);
//add-ins
panel.add(label);
panel.add(button1);
panel.add(button2);
frame.getContentPane().add (panel);
}
public void display()
{
frame.pack();
frame.setVisible(true);
}
}
(take an..) integer and turn it into a string that can be used inside an IF ElSE
How about instead don't convert it? The conditions of an if statement can work with integers, and do it more easily than strings!
E.G.
int x = random.nextInt(100);
if (x < 50) {
//..
if an int primitive type goes with a string, then the result will be a string.
for example,
int b=3;
String bs = b+"";
then the bs will be "3"
If you are interested in programming, I will suggest you to read "Think in Java." Reading it helps me a lot.
Please use:
Integer.toString(int)
and not:
int + ""
It is the more elegant way and also easier to process by the JVM. It is not a complex operation either way but is the correct way to do it.

Java grid layout GUI - how to enter new pane on event?

How can I set a button to link to a completely different grid pane? If I click the JButton "More options" for example, I want it to link me to a new page with more JButton options. Right now, everything is static.
The program right now just calculates the area of a rectangle given an length and width when you press "Calculate." The grid layout is 4 x 2, denoted by JLabel, JTextField, and JButton listed below.
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class RectangleProgram extends JFrame
{
private static final int WIDTH = 400;
private static final int HEIGHT = 300;
private JLabel lengthL, widthL, areaL;
private JTextField lengthTF, widthTF, areaTF;
private JButton calculateB, exitB;
//Button handlers:
private CalculateButtonHandler cbHandler;
private ExitButtonHandler ebHandler;
public RectangleProgram()
{
lengthL = new JLabel("Enter the length: ", SwingConstants.RIGHT);
widthL = new JLabel("Enter the width: ", SwingConstants.RIGHT);
areaL = new JLabel("Area: ", SwingConstants.RIGHT);
lengthTF = new JTextField(10);
widthTF = new JTextField(10);
areaTF = new JTextField(10);
//SPecify handlers for each button and add (register) ActionListeners to each button.
calculateB = new JButton("Calculate");
cbHandler = new CalculateButtonHandler();
calculateB.addActionListener(cbHandler);
exitB = new JButton("Exit");
ebHandler = new ExitButtonHandler();
exitB.addActionListener(ebHandler);
setTitle("Sample Title: Area of a Rectangle");
Container pane = getContentPane();
pane.setLayout(new GridLayout(4, 2));
//Add things to the pane in the order you want them to appear (left to right, top to bottom)
pane.add(lengthL);
pane.add(lengthTF);
pane.add(widthL);
pane.add(widthTF);
pane.add(areaL);
pane.add(areaTF);
pane.add(calculateB);
pane.add(exitB);
setSize(WIDTH, HEIGHT);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
private class CalculateButtonHandler implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
double width, length, area;
length = Double.parseDouble(lengthTF.getText()); //We use the getText & setText methods to manipulate the data entered into those fields.
width = Double.parseDouble(widthTF.getText());
area = length * width;
areaTF.setText("" + area);
}
}
public class ExitButtonHandler implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
}
public static void main(String[] args)
{
RectangleProgram rectObj = new RectangleProgram();
}
}
You can use CardLayout. It allows the two or more components share the same display space.
Here is a simple example
public class RectangleProgram {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
#Override
public void run() {
JFrame frame = new JFrame("Area of a Rectangle");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTextField lengthField = new JTextField(10);
JTextField widthField = new JTextField(10);
JTextField areaField = new JTextField(10);
JButton calculateButton = new JButton("Calculate");
JButton exitButton = new JButton("Exit");
final JPanel content = new JPanel(new CardLayout());
JButton optionsButton = new JButton("More Options");
optionsButton.addActionListener(new ActionListener() {
#Override
public void actionPerformed(ActionEvent e) {
CardLayout cardLayout = (CardLayout) content.getLayout();
cardLayout.next(content);
}
});
JPanel panel = new JPanel(new GridLayout(0, 2)) {
#Override
public Dimension getPreferredSize() {
return new Dimension(250, 100);
}
};
panel.add(new JLabel("Enter the length: ", JLabel.RIGHT));
panel.add(lengthField);
panel.add(new JLabel("Enter the width: ", JLabel.RIGHT));
panel.add(widthField);
panel.add(new JLabel("Area: ", JLabel.RIGHT));
panel.add(areaField);
panel.add(calculateButton);
panel.add(exitButton);
JPanel optionsPanel = new JPanel();
optionsPanel.add(new JLabel("Options", JLabel.CENTER));
content.add(panel, "Card1");
content.add(optionsPanel, "Card2");
frame.add(content);
frame.add(optionsButton, BorderLayout.PAGE_END);
frame.pack();
frame.setVisible(true);
}
});
}
}
Read How to Use CardLayout

Can't seem to get .remove to work

So for a class that I am currently taking I need to create an ATM System. So, I decided to have 2 panels. A main panel, where all of the processes take place, and an options panel, where the options are listed for the user. The problem, as mentioned above, is that I can't seem to get the main panel to be removed so I can actually replace it with the panel for, say the create account screen. In fact, all that happens is that the terminal window shows. Completely blank. As far as I have checked, the buttons event is firing and it even gets past the remove function.
In any event, I can't seem to figure out what the problem is, perhaps it is because the button being pressed is also being removed with the panel. Here's the related code.
public class AccountSystem extends JFrame implements ActionListener
{
public static Account currentuser = new Account(); //This is so that the methods know which account is currently logged in so they can perform operations on it.
public static int count=0;
public static Account acc[] = new Account[1000];
public static String parts[] = new String[3];
private JButton login, logout, createacc, deposit1, deposit2, withdraw1, withdraw2, transfer1, transfer2, nevermind;
private JPanel options, mainarea, titlecard;
private JTextField username, password, transfer, depositarea, withdrawarea, retypearea;
private JLabel userprompt, depositprompt, withdrawpromt, balancedisp, passwordprompt, mainmessage, title;
private String newuser, newpass, newpassconfirm;
BorderLayout borderlayout;
GridLayout gridlayout;
public AccountSystem()
{
borderlayout = new BorderLayout();
borderlayout.setHgap(5);
borderlayout.setVgap(5);
//Establishing our buttons here.
JButton login = new JButton("Login");
login.addActionListener(this);
JButton createacc = new JButton("New Account");
createacc.addActionListener(this);
//Establishing our panels here.
JPanel options = new JPanel();
JPanel mainarea = new JPanel();
JPanel titlecard = new JPanel();
//Establishing our JLabel here.
JLabel userprompt = new JLabel("Username: ");
JLabel passwordprompt = new JLabel("Password: ");
JLabel title = new JLabel(" LOGIN ");
//Establishing our textfields here.
JTextField username = new JTextField(20);
JTextField password = new JTextField(20);
JTextField transfer = new JTextField(20);
JTextField withdrawarea = new JTextField(20);
//Building the GUI here.
titlecard.setSize(500,50);
titlecard.setLocation (0,0);
mainarea.setSize(300,450);
mainarea.setLocation(0,50);
options.setSize(150,450);
options.setLocation(300,50);
titlecard.add(title);
mainarea.add(userprompt);
mainarea.add(username);
mainarea.add(passwordprompt);
mainarea.add(password);
mainarea.add(login);
mainarea.add(createacc);
getContentPane().setLayout(null);
getContentPane().add(titlecard);
getContentPane().add(mainarea);
getContentPane().add(options);
}
}
public void actionPerformed (ActionEvent e)
{
if ((e.getActionCommand()).equals("Login"))
{
login();
}
else if ((e.getActionCommand()).equals("New Account"))
{
accountmaker();
}
else if ((e.getActionCommand()).equals("Deposit Funds"))
{
deposit();
}
else if ((e.getActionCommand()).equals("Withdraw Funds"))
{
withdraw();
}
else if ((e.getActionCommand()).equals("Withdraw"))
{
withdrawprocedure();
}
else if ((e.getActionCommand()).equals("Create Account"))
{
accountprocedure();
}
}
public void accountmaker() //This is the screen where the user creates the account they want to. Of course, something needed to be done to differentiate this screen and the login screen.
{
currentuser = null; //This is so that the program doesn't get somehow confused when dealing with multiple uses of the program.
getContentPane().remove(mainarea);
title.setText("Create New Account");
mainarea = new JPanel();
JLabel userprompt = new JLabel ("Username: ");
JLabel passwordprompt = new JLabel("Password: ");
JLabel retype = new JLabel ("Retype: "); //This is what makes it different from the login screen
createacc = new JButton ("Create Account");
createacc.addActionListener(this);
JButton nevermind = new JButton("Cancel");
nevermind.addActionListener(this);
JTextField username = new JTextField(20);
JTextField password = new JTextField(20);
retypearea = new JTextField(20);
mainarea.setSize(300,500);
mainarea.setLocation(0,0);
mainarea.add(userprompt);
mainarea.add(username);
mainarea.add(passwordprompt);
mainarea.add(password);
mainarea.add(retype);
mainarea.add(retypearea);
getContentPane().add(mainarea);
getContentPane().invalidate();
getContentPane().validate();
getContentPane().repaint();
}
And this is the Account class that the program uses.
public class Account
{
private String username;
private String password;
private double balance=0;
public void deposit (double deposit)
{
balance += deposit;
}
public void withdraw (double withdraw)
{
balance -= withdraw;
}
public void setBalance (double newbalance)
{
balance = newbalance;
}
public void setUsername (String newusername)
{
username = newusername;
}
public void setPassword (String newpassword)
{
password = newpassword;
}
public String getUsername ()
{
return username;
}
public double getbalance ()
{
return balance;
}
public String getpassword()
{
return password;
}
}
If I understand correctly.. you basically need to replace the main panel with account panel on certain event!
I have written example code (please modify it according to your project)
In this code.. I have created 4 panels namely
Component Panel: To hold all components
Main Panel: contains the label with text "Main Panel" and its border is painted RED
Account Panel: contains the label with text "Account Panel" and its border is painted GREEN
Option Panel: empty panel with its border is painted BLUE
Two buttons:
Account Button: Which should replace Main Panel with Account Panel
Main Button: Which should replace Account Panel with Main Panel
Using GridBagLayout, all you need to do is to place Main Panel and Account Panel at the same location i.e. gridx = 0 and gridy = 0 for both. At first Main Panel shall be displayed. On event "Account Button" set Main Panel's visibility false and Account Panels' true. For event "Main Button" do the vica versa. GridBagLayout is fantastic dynamic layout which manages the empty spacing by itslef without any distortion.
public class SwingSolution extends JFrame implements ActionListener
{
private JPanel componentPanel = null;
private JPanel mainPanel = null;
private JLabel mainLabel = null;
private JPanel optionPanel = null;
private JPanel accountPanel = null;
private JLabel accountLabel = null;
private JButton replaceToAccountPanel = null;
private JButton replaceToMainPanel = null;
private final static String MAIN_TO_ACCOUNT = "MainToAccount";
private final static String ACCOUNT_TO_MAIN = "AccountToMain";
public JPanel getComponentPanel()
{
if(null == componentPanel)
{
componentPanel = new JPanel();
GridBagLayout gridBagLayout = new GridBagLayout();
componentPanel.setLayout(gridBagLayout);
GridBagConstraints constraint = new GridBagConstraints();
constraint.insets = new Insets(10, 10, 10, 10);
mainPanel = new JPanel();
constraint.gridx = 0;
constraint.gridy = 0;
mainPanel.setMinimumSize(new Dimension(100, 50));
mainPanel.setPreferredSize(new Dimension(100, 50));
mainPanel.setMaximumSize(new Dimension(100, 50));
mainPanel.setBorder(
BorderFactory.createLineBorder(Color.RED));
mainLabel = new JLabel("Main Panel");
mainPanel.add(mainLabel);
componentPanel.add(mainPanel, constraint);
accountPanel = new JPanel();
constraint.gridx = 0;
constraint.gridy = 0;
accountPanel.setMinimumSize(new Dimension(100, 50));
accountPanel.setPreferredSize(new Dimension(100, 50));
accountPanel.setMaximumSize(new Dimension(100, 50));
accountPanel.setBorder(
BorderFactory.createLineBorder(Color.GREEN));
accountLabel = new JLabel("Account Panel");
accountPanel.add(accountLabel);
componentPanel.add(accountPanel, constraint);
optionPanel = new JPanel();
constraint.gridx = 0;
constraint.gridy = 1;
optionPanel.setMinimumSize(new Dimension(100, 50));
optionPanel.setPreferredSize(new Dimension(100, 50));
optionPanel.setMaximumSize(new Dimension(100, 50));
optionPanel.setBorder(
BorderFactory.createLineBorder(Color.BLUE));
componentPanel.add(optionPanel, constraint);
replaceToAccountPanel = new JButton("Account Button");
replaceToAccountPanel.setName(MAIN_TO_ACCOUNT);
constraint.gridx = 0;
constraint.gridy = 2;
replaceToAccountPanel.setSize(new Dimension(800, 30));
replaceToAccountPanel.addActionListener(this);
componentPanel.add(replaceToAccountPanel, constraint);
replaceToMainPanel = new JButton("Main Button");
replaceToMainPanel.setName(ACCOUNT_TO_MAIN);
constraint.gridx = 1;
constraint.gridy = 2;
replaceToMainPanel.setMinimumSize(new Dimension(800, 30));
replaceToMainPanel.addActionListener(this);
componentPanel.add(replaceToMainPanel, constraint);
}
return componentPanel;
}
public void actionPerformed (ActionEvent evt)
{
JButton buttonClicked = (JButton) evt.getSource();
if(buttonClicked != null)
{
if(buttonClicked.getName().equals(MAIN_TO_ACCOUNT))
{
mainPanel.setVisible(false);
accountPanel.setVisible(true);
}
else if(buttonClicked.getName().equals(ACCOUNT_TO_MAIN))
{
mainPanel.setVisible(true);
accountPanel.setVisible(false);
}
}
}
public static void main(String[] args)
{
JFrame frame = new JFrame();
SwingSolution main = new SwingSolution();
frame.setTitle("Simple example");
frame.setSize(400, 300);
frame.setLocationRelativeTo(null);
frame.setContentPane(main.getComponentPanel());
frame.setVisible(true);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}

How I can get output from 1st frame textfield input text to 2nd frame textArea

Here is my 1st frame - I want went I input text in textfield example name then click button report will display output to 2nd frame using textArea... please help me
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
public class Order extends JFrame implements ActionListener
{
private JPanel pInfo,pN, pIC, pDate,Blank,pBlank, button, pTotal;
private JLabel nameL,icL,DateL;
private JTextField nameTF, icTF;
private JFormattedTextField DateTF;
private JButton calB,clearB,exitB,reportB;
public Order()
{
Container contentPane = getContentPane();
contentPane.setLayout(new BorderLayout());
contentPane.setBackground(Color.gray);
pInfo = new JPanel();
pN = new JPanel();
pIC = new JPanel();
pDate = new JPanel();
nameTF = new JTextField(30);
icTF = new JTextField(30);
DateTF = new JFormattedTextField(
java.util.Calendar.getInstance().getTime());
DateTF.setEditable (false);
DateTF.addActionListener(this);
nameL = new JLabel(" NAME : ",SwingConstants.RIGHT);
icL = new JLabel(" IC : ",SwingConstants.RIGHT);
DateL = new JLabel(" DATE :",SwingConstants.RIGHT);
pInfo.setLayout(new GridLayout(10,2,5,5));
pInfo.setBorder(BorderFactory.createTitledBorder
(BorderFactory.createEtchedBorder(),"ORDER"));
pN.add(nameL);
pN.add(nameTF);
pIC.add(icL);
pIC.add(icTF);
pDate.add(DateL);
pDate.add(DateTF);
pInfo.add(pN);
pInfo.add(pIC);
pInfo.add(pDate);
pInfo.setBackground(Color.GRAY);
pN.setBackground(Color.gray);
pIC.setBackground(Color.gray);
pDate.setBackground(Color.gray);
nameL.setForeground(Color.black);
icL.setForeground(Color.black);
DateL.setForeground(Color.black);
nameTF.setBackground(Color.pink);
icTF.setBackground(Color.pink);
DateTF.setBackground(Color.pink);
contentPane.add(pInfo,BorderLayout.CENTER);
Blank = new JPanel();
pBlank = new JPanel();
button = new JPanel();
calB = new JButton("CALCULATE");
calB.setToolTipText("Click to calculate");
clearB = new JButton("RESET");
clearB.setToolTipText("Click to clear");
reportB = new JButton ("REPORT");
reportB.setToolTipText ("Click to print");
exitB = new JButton("EXIT");
exitB.setToolTipText("Click to exit");
Blank.setLayout(new GridLayout(2,2));
Blank.setBorder(BorderFactory.createTitledBorder
(BorderFactory.createEtchedBorder(),""));
button.setLayout(new GridLayout(1,4));
button.add(calB,BorderLayout.WEST);
button.add(clearB,BorderLayout.CENTER);
button.add(reportB,BorderLayout.CENTER);
button.add(exitB,BorderLayout.EAST);
Blank.add(pBlank);
Blank.add(button);
contentPane.add(Blank,BorderLayout.SOUTH);
Blank.setBackground(Color.gray);
pBlank.setBackground(Color.gray);
calB.setForeground(Color.black);
clearB.setForeground(Color.black);
reportB.setForeground(Color.black);
exitB.setForeground(Color.black);
calB.setBackground(Color.pink);
clearB.setBackground(Color.pink);
reportB.setBackground(Color.pink);
exitB.setBackground(Color.pink);
calB.addActionListener(this);
clearB.addActionListener(this);
reportB.addActionListener(this);
exitB.addActionListener(this);
}
public void actionPerformed(ActionEvent p)
{
if (p.getSource() == calB)
{
}
else if (p.getSource() == clearB)
{
}
else if (p.getSource () == reportB)
{
}
else if (p.getSource() == exitB)
{
}
}
public static void main (String [] args)
{
Order frame = new Order();
frame.setTitle("Order");
frame.setSize(500,500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setVisible(true);
frame.setLocationRelativeTo(null);//center the frame
}
}
If you only have one String to pass, add it to the constructor of your second JFrame:
public class SecondFrame extends JFrame {
public SecondFrame(String someValueFromFirstFrame) {
someTextField.setText(someValueFromFirstFrame);
}
}
and pass it when creating the second JFrame:
SecondFrame secondFrame = new SecondFrame(firstTextField.getText());
If there is more than one attribute to pass, consider putting them together in another class and pass the instance of this class. This saves you from changing the constructor every time you need to pass an additional variable.
Simply add some reference to the first frame in the second or pass the value you're interested in to the second frame before you display it.
As for the code example you requested:
public class SecondFrame extends JFrame {
private JFrame firstFrame;
public SecondFrame(JFrame firstFrame) {
this.firstFrame = firstFrame;
}
}
Now you can obtain everything there is to obtained from the firstFrame through the internal reference to it.

Categories

Resources