Re: How to change JPanels?
On Feb 14, 4:50 pm, Lew <no...@lewscanon.com> wrote:
On 02/14/2011 03:02 PM, Eric wrote:
So now my previous sample looks like this. I hope I'm doing this
right now. I'm not sure if it's the most efficient syntax but it
works.
... imports elided ...
public class TestWindow {
InnerTestWindow win = null;
protected class InnerTestWindow extends JFrame {
protected CardLayout cardLayout = null;
protected Container contentPane = null;
protected JPanel panelOne = null;
protected JPanel panelTwo = null;
private JTextArea dummyTextOne = null;
private JTextArea dummyTextTwo = null;
protected InnerTestWindow() {
contentPane = getContentPane();
contentPane.setLayout(new CardLayout())=
;
cardLayout = (CardLayout)contentPane.=
getLayout();
MenuBar menuBar = new MenuBar();
Menu menu = new Menu("Test");
addMenuItem(menu,"First","FirstItem",ne=
w
FirstItemListener());
menuBar.add(menu);
setMenuBar(menuBar);
setDefaultCloseOperation( WindowConstants.DISPOSE_ON_CLOSE );
setSize(600, 600);
setLocation(100, 100);
panelOne = new JPanel();
contentPane.add(panelOne,"Panel One");
dummyTextOne = new JTextArea("Panel O=
ne");
panelOne.add(dummyTextOne);
panelTwo = new JPanel();
contentPane.add(panelTwo,"Panel Two");
dummyTextTwo = new JTextArea("Panel T=
wo");
panelTwo.add(dummyTextTwo);
setContentPane(contentPane);
loadOne();
}
private void addMenuItem(Menu menu, String menuI=
temTitle,
String menuItemName, ActionListener menuListener) {
MenuItem menuItem = new MenuItem(menu=
ItemTitle);
menuItem.setActionCommand(menuItemName)=
;
menuItem.addActionListener(menuListener=
);
menu.add(menuItem);
}
protected class FirstItemWorker extends SwingWor=
ker {
BufferedImage[] renderedPngPages = nu=
ll;
int waitTime;
protected FirstItemWorker(int waitTimeI=
n) {
waitTime = waitTimeIn;
}
protected Integer doInBackground() {
long t0, t1;
t0 = System.currentTime=
Millis();
ntTimeMillis();
} while ((t1 - t0)< (wait=
Time));
return 0;
}
protected void done() {
if (isCancelled()) {
return;
}
loadOne();
}
}
private class FirstItemListener implements Actio=
nListener {
public void actionPerformed(ActionEvent=
ev) {
loadTwo();
FirstItemWorker fiw = new =
FirstItemWorker(3000);
fiw.execute();
}
}
protected void loadOne() {
cardLayout.show(contentPane, "Panel One=
");
repaint();
}
public void loadTwo() {
cardLayout.show(contentPane, "Panel Two=
");
repaint();
}
}
public void createWindow() {
win = new InnerTestWindow();
win.setVisible(true);
}
public static void main(String[] args) throws Exception {
TestWindow testWin = new TestWindow();
testWin.createWindow();
}
}
You need to construct and stasrt your 'TestWindow' instance on the EDT, a=
s
others have warned you.
Not sure why you feel the need to initialize member variables to 'null' t=
hat
are already initialized to 'null', but they're your wasted keystrokes and
microseconds of redundant initialization.
You might want to use 'sleep()' or a variant instead of a CPU-gobbling ti=
ght
loop for the 'doInBackground()'.
--
Lew
Honi soit qui mal y pense.- Hide quoted text -
- Show quoted text -
I'm not sure if objects need to be set to null or if they'll do that
automatically. I just threw that in because I had a case once where
Eclipse gave me a warning about "object may not have been
initialized".
I don't normally tell programs to sleep so I'm not familiar enough
with the command. I didn't write the loop. I just copied and pasted
that from the internet somewhere. I just needed some code to kill a
few seconds to demonstrate. That's not real code. The part I'm
concerned about are the gui commands.
I'm not sure what you mean about creating a window on the EDT. Isn't
every program running on a thread? If I create the window, wouldn't
that make that thread the EDT? There's nothing in that thread other
than the create window so I don't understand the problem. I have code
right after the create window in the real program which doesn't
reference gui. Couldn't I just write that code with the SwingWorker
the same way I wrote the process for the FirstItemListener?