Hi guys,
I have to realize a dynamic graphical application using java swing...In this application I have a jframe and a jmenu bar. Using jcheckboxmenuitem located in menu "Algorithms", I have to add/remove complex jpanels (eventually containing jcombox, jlabel, jtextfield) in the jframe when jcheckboxmenuitem are checked/unchecked. Initially, the frame is empty.....For adding/removing a new jpanel in the frame, I use contentPane.add()/contentPane.remove() followed by contentPane.revalidate() (contentPane is a jpanel) and contentPane.repaint(). It seems work fine but....Is this approach correct to realize a java swing application where jpanels are add/remove at runtime??? It ALWAYS works fine???
Here is reported the schema of my application....
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;
import org.pushingpixels.substance.api.SubstanceLookAndFeel;
import org.pushingpixels.substance.api.skin.SaharaSkin;
public class NewMainFrame extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel contentPane;
private ListJCheckBoxMenuItem list = null;
/**
* Launch the application.
*/
public static void main(String[] args) {
JFrame.setDefaultLookAndFeelDecorated(true);
JDialog.setDefaultLookAndFeelDecorated(true);
UIManager.put("OptionPane.yesButtonText", "Yes");
UIManager.put("OptionPane.cancelButtonText", "Cancel");
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
SubstanceLookAndFeel.setSkin(new SaharaSkin());
NewMainFrame frame = new NewMainFrame();
frame.setVisible(true);
frame.setForeground(Color.BLUE);
}
catch (Exception e) {
e.printStackTrace();
}
}
});
}
public NewMainFrame() {
setTitle("** XX v1.1 ** ");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 1024, 768);
setResizable(false);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JMenuBar menubar = new JMenuBar();
JMenu startMenu = new JMenu("Start");
JMenuItem itemX = new JMenuItem("X");
JMenuItem itemY = new JMenuItem("Y");
JMenuItem itemZ = new JMenuItem("Z");
JMenuItem itemClose = new JMenuItem("Close");
startMenu.add(itemX);
startMenu.add(itemY);
startMenu.add(itemZ);
startMenu.add(new JSeparator());
startMenu.add(itemClose);
JMenu algorithmMenu = new JMenu("Algorithms");
list = new ListJCheckBoxMenuItem();
list.addNewActionListener(ListJCheckBoxMenuItem.E , new EActionListener());
list.addNewActionListener(ListJCheckBoxMenuItem.A, new AActionListener());
list.addNewActionListener(ListJCheckBoxMenuItem.I, new IActionListener());
list.addNewActionListener(ListJCheckBoxMenuItem.F, new FActionListener());
list.addNewActionListener(ListJCheckBoxMenuItem.D, new DActionListener());
list.addNewActionListener(ListJCheckBoxMenuItem.B, new BActionListener());
list.addNewActionListener(ListJCheckBoxMenuItem.E, new EActionListener());
list.addNewActionListener(ListJCheckBoxMenuItem.H, new IActionListener());
list.addNewActionListener(ListJCheckBoxMenuItem.G, new GActionListener());
for(int i = 0; i < list.numItem(); i++) {
algorithmMenu.add(list.getElement(i));
}
JMenu aboutMenu = new JMenu("About");
JMenuItem itemInfo = new JMenuItem("Info about XX...");
aboutMenu.add(itemInfo);
menubar.add(startMenu);
menubar.add(algorithmMenu);
menubar.add(aboutMenu);
this.setJMenuBar(menubar);
}//End of main
private void createAPanel() {
//add/remove a new jpanel to contentPane
}
private void createBPanel() {
//add/remove a new jpanel to contentPane
}
private void createCPanel() {
//add/remove a new jpanel to contentPane
}
private void createDPanel() {
//add/remove a new jpanel to contentPane
}
private void createEPanel() {
//add/remove a new jpanel to contentPane
}
private void createFPanel() {
//add/remove a new jpanel to contentPane
}
private void createGPanel() {
//add/remove a new jpanel to contentPane
}
private void createHPanel() {
//add/remove a new jpanel to contentPane
}
private void createIPanel() {
//add/remove a new jpanel to contentPane
}
class AActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
createIPanel();
contentPane.revalidate();
contentPane.repaint();
}
}
class BActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
createHPanel();
contentPane.revalidate();
contentPane.repaint();
}
}
class CActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
createGPanel();
contentPane.revalidate();
contentPane.repaint();
}
}
class EActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
createFPanel();
contentPane.revalidate();
contentPane.repaint();
}
}
class DActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
createEPanel();
contentPane.revalidate();
contentPane.repaint();
}
}
class FActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
createDPanel();
contentPane.revalidate();
contentPane.repaint();
}
}
class GActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
createCPanel();
contentPane.revalidate();
contentPane.repaint();
}
}
class HActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
createBPanel();
contentPane.revalidate();
contentPane.repaint();
}
}
class IActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
createAPanel();
contentPane.revalidate();
contentPane.repaint();
}
}
}
import java.awt.event.ActionListener;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JMenuItem;
public class ListJCheckBoxMenuItem {
public static final int E = 0;
public static final int A = 1;
public static final int I = 2;
public static final int F = 3;
public static final int D = 4;
public static final int B = 5;
public static final int G = 6;
public static final int H = 7;
private static final int C = 8;
private JCheckBoxMenuItem [] listItem;
public ListJCheckBoxMenuItem() {
listItem = new JCheckBoxMenuItem[9];
listItem[A] = new JCheckBoxMenuItem("A");
listItem[B] = new JCheckBoxMenuItem("B");
listItem[C] = new JCheckBoxMenuItem("C");
listItem[D] = new JCheckBoxMenuItem("D");
listItem[E] = new JCheckBoxMenuItem("E");
listItem[F] = new JCheckBoxMenuItem("F");
listItem[G] = new JCheckBoxMenuItem("G");
listItem[H] = new JCheckBoxMenuItem("H");
listItem[I] = new JCheckBoxMenuItem("I");
}
public boolean isActivated(int jCheckBoxMenuItemIndex) {
return listItem[jCheckBoxMenuItemIndex].getState();
}
public void addNewActionListener(int index_menu, ActionListener listener) {
listItem[index_menu].addActionListener(listener);
}
public int numItem() {
return listItem.length;
}
public JMenuItem getElement(int i2) {
return listItem[i2];
}
}
I hope that problem is clear..If it isn't clear, please tell me...
Thanks a lot!!!
Edited by: user13735352 on 14-gen-2011 2.11