Invsible Button!?
Dear experts,
i'm a student from Italy and i'm approaching java language.
I have a curious problem with the Swing components (Java 1.5).
I've wrote this class for a customizable progress monitor frame (very
simple):
public class ProgressMonitor extends JFrame{
/**
*
*/
private static final long serialVersionUID = 1L;
public final static int ONE_SECOND = 1000;
private JPanel panel;
public static JProgressBar progressBar;
public static int BAR_MAX;
private JButton stopButton;
public ProgressMonitor(String title) {
super(title);
panel = createPanel();
setPreferredSize(new Dimension(310, 100));
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
setLocation(350, 200);
add(panel, BorderLayout.CENTER);
pack();
setVisible(true);
validate();
}
protected JPanel createPanel() {
panel = new JPanel();
stopButton = new JButton("Stop!");
BAR_MAX = AnalisiParagrafi.getNumberOfParags() - 1;
if(BAR_MAX == -1) BAR_MAX = 0;
progressBar = new JProgressBar(0, BAR_MAX);
progressBar.setPreferredSize(new Dimension(300, 20));
progressBar.setValue(0);
progressBar.setStringPainted(true);
panel.add(progressBar, BorderLayout.CENTER);
stopButton.setEnabled(true);
stopButton.setVisible(true);
panel.add(stopButton, BorderLayout.SOUTH);
return panel;
}
/**
* Create the GUI and show it. For thread safety,
* this method should be invoked from the
* event-dispatching thread.
*/
public void updateProgressBar(int i){
Rectangle progressRect = progressBar.getBounds();
progressRect.x = 0;
progressRect.y = 0;
progressBar.setValue(i);
progressBar.paintImmediately(progressRect);
if(i == BAR_MAX) this.setVisible(false);
}
}
In this frame i've put a progress bar (updated by an index 'i') and a
Stop Button.
The problem is that, when i invoke this class during main program's
elaboration, it displays the main frame, the progress bar (an
appropriate external method udpate it) but there is no button in the
window!
I can't really understand why...the strange thing is that if i call
this class with this simple line of code (out of the main program):
ProgressMonitor pm = new ProgressMonitor("Program is running...");
....it works!
Does anybody know this problem?
Thanks in advance for all your help!
Sergio.