SketchySteve
asked on
Using Invisible Panels to Create a GUI
I'm brushing up on my Java by re-writing a small customer DB application. When I did this for the first time in Uni I made to classic OO beginers mistake of turning one class into the entire program (almost!).
This time round I want to completely seperate the interface from the implemtation and core data. I will do this by creating a GUI class which contains the frame, all the screens (for adding, searching etc..) and stores of the text boxes responces will be stored in as static variable which can be easly accessed by any class handling datainput to the core class.
I'm currently working on the GUI, what I've done is created two panels so far - the main screen and add client. There is a button on the main screen called add client - when it is pressed the main screen panel's visible property is set to false and the add client panel is set to visible. Unfortunately all that happens is the frame goes blank although it should display the add client panel. Also the header label does not display on the main menu panel if I also add it to the add client panel.
I've included the code below.
Thanks
Steve
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class MenuSystem extends javax.swing.JFrame {
private javax.swing.JPanel rootMenuPanel, addClientPanel;
private javax.swing.JButton viewEditCustBut, addCustBut, remCustBut, dispBadBorBut,
adjRateBut, loadDBBut, saveDBBut, addCustConfirmBut;
private javax.swing.JLabel headerlbl, templbl;
/* Constructor */
public MenuSystem(){
initComponants();
}
private void initComponants() {
/** Create Header Lable **/
headerlbl = new javax.swing.JLabel();
headerlbl.setText("Virtual Bank Customer DB");
headerlbl.setFont(new java.awt.Font("Karate", 1, 18));
headerlbl.setBorder(new javax.swing.border.EtchedB order());
/** Create Root Panel **/
rootMenuPanel = new javax.swing.JPanel();
rootMenuPanel.setPreferred Size(new java.awt.Dimension(450, 300));
rootMenuPanel.setLayout(ne w org.netbeans.lib.awtextra. AbsoluteLa yout());
rootMenuPanel.add(headerlb l, new org.netbeans.lib.awtextra. AbsoluteCo nstraints( 70, 10, 260, 40));
/** Create Root Panel Buttons **/
viewEditCustBut = new javax.swing.JButton("View and Edit Customer Details");
dispBadBorBut = new javax.swing.JButton("Displ ay Bad Borrowers");
adjRateBut = new javax.swing.JButton("Adjus t Rates");
addCustBut = new javax.swing.JButton("Add Customer");
remCustBut = new javax.swing.JButton("Remov e Customer");
loadDBBut = new javax.swing.JButton("Load Database");
saveDBBut = new javax.swing.JButton("Save Database");
/** Add Root Panel Buttons **/
rootMenuPanel.add(viewEdit CustBut, new org.netbeans.lib.awtextra. AbsoluteCo nstraints( 89, 70, 220, 25));
rootMenuPanel.add(addCustB ut, new org.netbeans.lib.awtextra. AbsoluteCo nstraints( 30, 120, 140, 20));
rootMenuPanel.add(remCustB ut, new org.netbeans.lib.awtextra. AbsoluteCo nstraints( 30, 160, 140, 20));
rootMenuPanel.add(loadDBBu t, new org.netbeans.lib.awtextra. AbsoluteCo nstraints( 250, 120, 140, 20));
rootMenuPanel.add(saveDBBu t, new org.netbeans.lib.awtextra. AbsoluteCo nstraints( 250, 160, 140, 20));
rootMenuPanel.add(dispBadB orBut, new org.netbeans.lib.awtextra. AbsoluteCo nstraints( 120, 230, 160, 20));
rootMenuPanel.add(adjRateB ut, new org.netbeans.lib.awtextra. AbsoluteCo nstraints( 120, 260, 160, 20));
/** Create Add Client Panel **/
addClientPanel = new javax.swing.JPanel();
addClientPanel.setVisible( false);
addClientPanel.setPreferre dSize(new java.awt.Dimension(450, 300));
addClientPanel.setLayout(n ew org.netbeans.lib.awtextra. AbsoluteLa yout());
addClientPanel.add(headerl bl, new org.netbeans.lib.awtextra. AbsoluteCo nstraints( 70, 10, 260, 40));
/** Create Client Panel Buttons **/
addCustConfirmBut = new javax.swing.JButton("addCu stConfirmB ut");
/** Add Add Client Panel Buttons **/
addClientPanel.add(addCust ConfirmBut , new org.netbeans.lib.awtextra. AbsoluteCo nstraints( 89, 70, 220, 25));
/** Add Button Actions **/
addCustBut.addActionListen er(new java.awt.event.ActionListe ner(){
public void actionPerformed(java.awt.e vent.Actio nEvent evt) {
rootMenuPanel.setVisible(f alse);
addClientPanel.setVisible( true);
}
});
getContentPane().add(rootM enuPanel, java.awt.BorderLayout.CENT ER);
pack();
}
}
/*
* run.java
*
* Created on 02 October 2004, 14:39
*/
/**
*
* @author Steve
*/
public class Run {
/** Creates a new instance of run */
public Run() {
}
public static void main(String[] args) {
MenuSystem myMenuSystem;
myMenuSystem = new MenuSystem();
myMenuSystem.setVisible(tr ue);
}
}
This time round I want to completely seperate the interface from the implemtation and core data. I will do this by creating a GUI class which contains the frame, all the screens (for adding, searching etc..) and stores of the text boxes responces will be stored in as static variable which can be easly accessed by any class handling datainput to the core class.
I'm currently working on the GUI, what I've done is created two panels so far - the main screen and add client. There is a button on the main screen called add client - when it is pressed the main screen panel's visible property is set to false and the add client panel is set to visible. Unfortunately all that happens is the frame goes blank although it should display the add client panel. Also the header label does not display on the main menu panel if I also add it to the add client panel.
I've included the code below.
Thanks
Steve
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class MenuSystem extends javax.swing.JFrame {
private javax.swing.JPanel rootMenuPanel, addClientPanel;
private javax.swing.JButton viewEditCustBut, addCustBut, remCustBut, dispBadBorBut,
adjRateBut, loadDBBut, saveDBBut, addCustConfirmBut;
private javax.swing.JLabel headerlbl, templbl;
/* Constructor */
public MenuSystem(){
initComponants();
}
private void initComponants() {
/** Create Header Lable **/
headerlbl = new javax.swing.JLabel();
headerlbl.setText("Virtual
headerlbl.setFont(new java.awt.Font("Karate", 1, 18));
headerlbl.setBorder(new javax.swing.border.EtchedB
/** Create Root Panel **/
rootMenuPanel = new javax.swing.JPanel();
rootMenuPanel.setPreferred
rootMenuPanel.setLayout(ne
rootMenuPanel.add(headerlb
/** Create Root Panel Buttons **/
viewEditCustBut = new javax.swing.JButton("View and Edit Customer Details");
dispBadBorBut = new javax.swing.JButton("Displ
adjRateBut = new javax.swing.JButton("Adjus
addCustBut = new javax.swing.JButton("Add Customer");
remCustBut = new javax.swing.JButton("Remov
loadDBBut = new javax.swing.JButton("Load Database");
saveDBBut = new javax.swing.JButton("Save Database");
/** Add Root Panel Buttons **/
rootMenuPanel.add(viewEdit
rootMenuPanel.add(addCustB
rootMenuPanel.add(remCustB
rootMenuPanel.add(loadDBBu
rootMenuPanel.add(saveDBBu
rootMenuPanel.add(dispBadB
rootMenuPanel.add(adjRateB
/** Create Add Client Panel **/
addClientPanel = new javax.swing.JPanel();
addClientPanel.setVisible(
addClientPanel.setPreferre
addClientPanel.setLayout(n
addClientPanel.add(headerl
/** Create Client Panel Buttons **/
addCustConfirmBut = new javax.swing.JButton("addCu
/** Add Add Client Panel Buttons **/
addClientPanel.add(addCust
/** Add Button Actions **/
addCustBut.addActionListen
public void actionPerformed(java.awt.e
rootMenuPanel.setVisible(f
addClientPanel.setVisible(
}
});
getContentPane().add(rootM
pack();
}
}
/*
* run.java
*
* Created on 02 October 2004, 14:39
*/
/**
*
* @author Steve
*/
public class Run {
/** Creates a new instance of run */
public Run() {
}
public static void main(String[] args) {
MenuSystem myMenuSystem;
myMenuSystem = new MenuSystem();
myMenuSystem.setVisible(tr
}
}
For the header labels, simply make two and give each a different label. As for your problem with the client panel not showing, make sure you add it to the content pane as it doesn't seem that you do in the above code. If you don't add the panel to a Frame/JFrame.getContentPan e(), it can't be displayed. ;)
ASKER
I've added the client panel to the frame using
getContentPane().add(addCl ientPanel, java.awt.BorderLayout.CENT ER);
but to no avail. Here is my modified code, why's dosnt the header label appear on either panel either?
Cheers
Steve
/*
* run.java
*
* Created on 02 October 2004, 14:39
*/
/**
*
* @author Steve
*/
public class Run {
/** Creates a new instance of run */
public Run() {
}
public static void main(String[] args) {
MenuSystem myMenuSystem;
myMenuSystem = new MenuSystem();
myMenuSystem.setVisible(tr ue);
}
}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class MenuSystem extends javax.swing.JFrame {
private javax.swing.JPanel rootMenuPanel, addClientPanel;
private javax.swing.JButton viewEditCustBut, addCustBut, remCustBut, dispBadBorBut,
adjRateBut, loadDBBut, saveDBBut, addCustConfirmBut;
private javax.swing.JLabel headerlbl, templbl;
/* Constructor */
public MenuSystem(){
initComponants();
}
private void initComponants() {
/** Create Header Lable **/
headerlbl = new javax.swing.JLabel();
headerlbl.setText("Virtual Bank Customer DB");
headerlbl.setFont(new java.awt.Font("Karate", 1, 18));
headerlbl.setBorder(new javax.swing.border.EtchedB order());
/** Create Root Panel **/
rootMenuPanel = new javax.swing.JPanel();
rootMenuPanel.setPreferred Size(new java.awt.Dimension(450, 300));
rootMenuPanel.setLayout(ne w org.netbeans.lib.awtextra. AbsoluteLa yout());
rootMenuPanel.add(headerlb l, new org.netbeans.lib.awtextra. AbsoluteCo nstraints( 70, 10, 260, 40));
/** Create Root Panel Buttons **/
viewEditCustBut = new javax.swing.JButton("View and Edit Customer Details");
dispBadBorBut = new javax.swing.JButton("Displ ay Bad Borrowers");
adjRateBut = new javax.swing.JButton("Adjus t Rates");
addCustBut = new javax.swing.JButton("Add Customer");
remCustBut = new javax.swing.JButton("Remov e Customer");
loadDBBut = new javax.swing.JButton("Load Database");
saveDBBut = new javax.swing.JButton("Save Database");
/** Add Root Panel Buttons **/
rootMenuPanel.add(viewEdit CustBut, new org.netbeans.lib.awtextra. AbsoluteCo nstraints( 89, 70, 220, 25));
rootMenuPanel.add(addCustB ut, new org.netbeans.lib.awtextra. AbsoluteCo nstraints( 30, 120, 140, 20));
rootMenuPanel.add(remCustB ut, new org.netbeans.lib.awtextra. AbsoluteCo nstraints( 30, 160, 140, 20));
rootMenuPanel.add(loadDBBu t, new org.netbeans.lib.awtextra. AbsoluteCo nstraints( 250, 120, 140, 20));
rootMenuPanel.add(saveDBBu t, new org.netbeans.lib.awtextra. AbsoluteCo nstraints( 250, 160, 140, 20));
rootMenuPanel.add(dispBadB orBut, new org.netbeans.lib.awtextra. AbsoluteCo nstraints( 120, 230, 160, 20));
rootMenuPanel.add(adjRateB ut, new org.netbeans.lib.awtextra. AbsoluteCo nstraints( 120, 260, 160, 20));
/** Create Add Client Panel **/
addClientPanel = new javax.swing.JPanel();
addClientPanel.setVisible( false);
addClientPanel.setPreferre dSize(new java.awt.Dimension(450, 300));
addClientPanel.setLayout(n ew org.netbeans.lib.awtextra. AbsoluteLa yout());
addClientPanel.add(headerl bl, new org.netbeans.lib.awtextra. AbsoluteCo nstraints( 70, 10, 260, 40));
/** Create Client Panel Buttons **/
addCustConfirmBut = new javax.swing.JButton("Confi rm");
/** Add Add Client Panel Buttons **/
addClientPanel.add(addCust ConfirmBut , new org.netbeans.lib.awtextra. AbsoluteCo nstraints( 89, 70, 220, 25));
/** Add Button Actions **/
addCustBut.addActionListen er(new java.awt.event.ActionListe ner(){
public void actionPerformed(java.awt.e vent.Actio nEvent evt) {
rootMenuPanel.setVisible(f alse);
addClientPanel.setVisible( true);
}
});
rootMenuPanel.setVisible(t rue);
addClientPanel.setVisible( false);
getContentPane().add(addCl ientPanel, java.awt.BorderLayout.CENT ER);
getContentPane().add(rootM enuPanel, java.awt.BorderLayout.CENT ER);
pack();
}
}
getContentPane().add(addCl
but to no avail. Here is my modified code, why's dosnt the header label appear on either panel either?
Cheers
Steve
/*
* run.java
*
* Created on 02 October 2004, 14:39
*/
/**
*
* @author Steve
*/
public class Run {
/** Creates a new instance of run */
public Run() {
}
public static void main(String[] args) {
MenuSystem myMenuSystem;
myMenuSystem = new MenuSystem();
myMenuSystem.setVisible(tr
}
}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class MenuSystem extends javax.swing.JFrame {
private javax.swing.JPanel rootMenuPanel, addClientPanel;
private javax.swing.JButton viewEditCustBut, addCustBut, remCustBut, dispBadBorBut,
adjRateBut, loadDBBut, saveDBBut, addCustConfirmBut;
private javax.swing.JLabel headerlbl, templbl;
/* Constructor */
public MenuSystem(){
initComponants();
}
private void initComponants() {
/** Create Header Lable **/
headerlbl = new javax.swing.JLabel();
headerlbl.setText("Virtual
headerlbl.setFont(new java.awt.Font("Karate", 1, 18));
headerlbl.setBorder(new javax.swing.border.EtchedB
/** Create Root Panel **/
rootMenuPanel = new javax.swing.JPanel();
rootMenuPanel.setPreferred
rootMenuPanel.setLayout(ne
rootMenuPanel.add(headerlb
/** Create Root Panel Buttons **/
viewEditCustBut = new javax.swing.JButton("View and Edit Customer Details");
dispBadBorBut = new javax.swing.JButton("Displ
adjRateBut = new javax.swing.JButton("Adjus
addCustBut = new javax.swing.JButton("Add Customer");
remCustBut = new javax.swing.JButton("Remov
loadDBBut = new javax.swing.JButton("Load Database");
saveDBBut = new javax.swing.JButton("Save Database");
/** Add Root Panel Buttons **/
rootMenuPanel.add(viewEdit
rootMenuPanel.add(addCustB
rootMenuPanel.add(remCustB
rootMenuPanel.add(loadDBBu
rootMenuPanel.add(saveDBBu
rootMenuPanel.add(dispBadB
rootMenuPanel.add(adjRateB
/** Create Add Client Panel **/
addClientPanel = new javax.swing.JPanel();
addClientPanel.setVisible(
addClientPanel.setPreferre
addClientPanel.setLayout(n
addClientPanel.add(headerl
/** Create Client Panel Buttons **/
addCustConfirmBut = new javax.swing.JButton("Confi
/** Add Add Client Panel Buttons **/
addClientPanel.add(addCust
/** Add Button Actions **/
addCustBut.addActionListen
public void actionPerformed(java.awt.e
rootMenuPanel.setVisible(f
addClientPanel.setVisible(
}
});
rootMenuPanel.setVisible(t
addClientPanel.setVisible(
getContentPane().add(addCl
getContentPane().add(rootM
pack();
}
}
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
thanks!