Re: silly newbie GUI ques
To: comp.lang.java.gui
RedGrittyBrick wrote:
printdude1968@gmail.com wrote:
<snip Q about app design using execution of separate programs to
organise elements of an application>
Here's a working example of what I was talking about. It is minimal but
should give an idea about one way (of many) of organising code for a
Swing GUI application.
----------------------- ClubApp.java -----------------------
package ClubApp;
// Licence: GPL RedGrittyBrick.org 2007 :-)
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class ClubMaster {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame f = new JFrame("Club Master");
f.add(new MainPanel(f));
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setVisible(true);
}
});
}
}
--------------------- MainPanel.java ------------------------
package ClubApp;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class MainPanel extends JPanel implements ActionListener {
JFrame parent;
JButton memberButton, eventButton;
// View
MainPanel(JFrame parent) {
this.parent = parent;
setLayout(new BoxLayout(this, BoxLayout.LINE_AXIS));
memberButton = new JButton("members");
eventButton = new JButton("events");
memberButton.addActionListener(this);
eventButton.addActionListener(this);
add(memberButton);
add(eventButton);
}
// Controller
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
if (command.equals("members")) {
JOptionPane.showMessageDialog(parent,
new MembersPanel(parent));
} else if (command.equals("events")) {
JOptionPane.showMessageDialog(parent,
new EventsPanel(parent));
}
}
}
------------------ MembersPanel.java -----------------------
package ClubApp;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class MembersPanel extends JPanel {
MembersPanel(JFrame parent) {
add(new JLabel("A list of members"));
}
}
-------------------- EventsPanel.java -----------------------
package ClubApp;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class EventsPanel extends JPanel {
EventsPanel(JFrame parent) {
add(new JLabel("A list of events"));
}
}
-------------------------------------------------------------
When you compile the above you will get four class files. Don't worry
about that, they are *not* four "programs", they together comprise one
program. For deployment I would package them into a single executable
ClubMaster.jar file.
Note that in the "Controller" section of MainPanel I could, instead of
using JOptionPane, create JFrames to hold the new xxxPanel() or I could
add them to a new card in a CardPanel in MainPanel's "View" section.
I've omitted any business functionality. I'd maybe have JTables to list
the members, I'd have a separate MemberModel that extends
AbstractTableModel and fetches the member list data from a database.
For brevity I've omitted MemberPanel (singular). I would add
ActionListener and add/edit/delete buttons to MembersPanel (plural),
MembersPanel could have a Controller section like the Controller section
of MainPanel to open new windows containing a data entry form defined in
MemberPanel (singular)
Note my use of the terms Model, View and Controller. This is an
important design pattern in OO languages.
When I was starting out learning Swing, An example such as the above
might have saved me weeks of work! I hope others find it of some use.
---
* Synchronet * The Whitehouse BBS --- whitehouse.hulds.com --- check it out free usenet!
--- Synchronet 3.15a-Win32 NewsLink 1.92
Time Warp of the Future BBS - telnet://time.synchro.net:24