–EDIT–
I have got a welcome window consisting of two JLabels. It has a link to a timer counting from 3 to 0. After that time, a new window, “UsedBefore”, containing JLabel and radio buttons should automatically appear in the place of the previous one. When I run the “Launcher”, the first window shows up with counter displaying 3,2,1,0 and then nothing happens.
I think the problem lies in poor referencing, but I’m not sure. I’ve got “Launcher” class:
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
Welcome window = new Welcome();
window.setVisible(true);
}
});
} // end main
Where I launch the “Welcome” window:
public Welcome() {
init();
}
public void init() {
// here I'm adding stuff to the window and then I have:
setLayout(cardLayout);
add(big, "1welcome");
// UsedBefore.MakeUsedBeforeWindow(); // ???
new MyTimer(this).start();
} // end init
this goes to MyTimer which does the countdown and:
welcome.showNextWindow(); // private Welcome welcome;
we go back to the “Welcome” class:
public void showNextWindow() {
cardLayout.next(this);
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
private static void createAndShowGUI() {
JFrame frame = new JFrame("My Frame");
frame.getContentPane().add(new Welcome());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(550, 450);
frame.setResizable(false);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
and finally the “UsedBefore” class:
public UsedBefore() {
super(new BorderLayout());
init();
}
public void MakeUsedBeforeWindow() {
String q = "Have you used GUI before?";
JPanel area = new JPanel(new BorderLayout());
add(area, "2usedBefore?");
area.setBackground(Color.white);
JLabel textLabel = new JLabel("<html><div style=\"text-align: center;\">"
+ q + "</html>", SwingConstants.CENTER);
textLabel.setForeground(Color.green);
Font font = new Font("SansSerif", Font.PLAIN, 30);
textLabel.setFont(font);
textLabel.setBorder(new EmptyBorder(0, 0, 250, 0)); //top, left, bottom, right
area.add(textLabel, SwingConstants.CENTER);
add(area, "2usedBefore?");
}
with its main:
public static void main(String[] args) {
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
public static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("RadioButtons");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Create and set up the content pane - not sure how to do it
// JComponent newContentPane = new UsedBefore();
// newContentPane.setOpaque(true); //content panes must be opaque
// frame.setContentPane(newContentPane);
// frame.getContentPane().add(new UsedBefore());
//Display the window.
frame.setSize(550, 450);
frame.setResizable(false);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
That’s quite a journey. Sorry for a lot of code, I hope the path is clear. Once I’ve got 1->2->3 links right, I should be able to do the rest of them, so any help is appreciated. Thank you.
I suggest a slightly different approach. Why not building
JPanelinstead of Windows and adding/removing theseJPanelat the desire time.Ex (here
welcomepanel is shown first with its decreasing counter and when the counter reach 0,otherpanel is shown):