> Dear experts,
> i'm a student from Italy and i'm approaching java language.
[quoted text clipped - 22 lines]
> setLocation(350, 200);
> add(panel, BorderLayout.CENTER);
If you are expecting to use the BorderLayout, you must set the container's
layout manager setLayout (new BorderLayout ()). The default is flow
layout--I'm not sure what you'll get without it.
> pack();
> setVisible(true);
[quoted text clipped - 3 lines]
> protected JPanel createPanel() {
> panel = new JPanel();
And set it here also.
panel.setLayout (new BorderLayout ());
Matt Humphrey matth@ivizNOSPAM.com http://www.iviz.com/
> Dear experts,
> i'm a student from Italy and i'm approaching java language.
[quoted text clipped - 17 lines]
> super(title);
> panel = createPanel();
Your global var 'panel' is set by createPanel() and
then reassigned with the return value. Big flaw in
programming.
> setPreferredSize(new Dimension(310, 100));
> setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
> setLocation(350, 200);
> add(panel, BorderLayout.CENTER);
The contentPane (which is a panel) of a frame has the
BorderLayout ...
> pack();
> setVisible(true);
[quoted text clipped - 3 lines]
> protected JPanel createPanel() {
> panel = new JPanel();
... but every newly created panel has a FlowLayout.
> stopButton = new JButton("Stop!");
>
[quoted text clipped - 7 lines]
> stopButton.setEnabled(true);
> stopButton.setVisible(true);
You don't need to explicitely set the button visible.
> panel.add(stopButton, BorderLayout.SOUTH);
> return panel;
[quoted text clipped - 34 lines]
>
> Sergio.
Despite some flaws in your prog I changed nothing except:
adding this:
import java.awt.*;
import javax.swing.*;
adding this to the classes body:
public static void main( String []args ) {
new ProgressMonitor( "Hallo" );
}
and replacing the line
> BAR_MAX = AnalisiParagrafi.getNumberOfParags() - 1;
with
BAR_MAX = 200;
.
I didn't get the problem you discribed, the button you
missed was placed exactly beneath the progress bar. (after
resizing the window it moved to a position after the bar,
so you might consider the hint Matt gave.)
Maybe you should report back the exact circumstances under
which your prog runs.
Best regards,
Bart
P.S. from these two lines I know you use java version 1.5
> setPreferredSize(new Dimension(310, 100));
> add(panel, BorderLayout.CENTER);
but even with 1.4 I cannot reproduce your error.
Sergio - 21 Aug 2006 20:45 GMT
Bart Rider ha scritto:
> > public ProgressMonitor(String title) {
> > super(title);
[quoted text clipped - 3 lines]
> then reassigned with the return value. Big flaw in
> programming.
...you know, i'm a beginner, let me make these mistakes :P
i don't want my program is perfect, i want that my program works.
[cut]
> Despite some flaws in your prog I changed nothing except:
> adding this:
[quoted text clipped - 21 lines]
> Maybe you should report back the exact circumstances under
> which your prog runs.
as i've noticed if u invoke my class with a simple call procedure, it
works fine.
I'll try to explain how my program works (sorry for my poor english).
My program makes some operations on the paragraphs of a text.
When i push a button 'GO' in the main window of my program, the text's
processing starts and this Progress Monitor panel becomes visible.
I need, in this Progress Monitor panel, the progress bar updated for
each paragraph, (the 'i' index is the number of the current paragraph,
BAR_MAX is the edge of my progress bar) and the stop button visible to
stop the execution when i want.
I dont use threads (another big mistake...i know) and i've tried to
follow Matt's advice, but it doesn't work.
I wanna thank all of you for the precious help.
Sergio.
Bart Rider - 22 Aug 2006 10:50 GMT
> [...skip...]
>
[quoted text clipped - 10 lines]
>
> Sergio.
When you push your 'GO' button, code in any actionPerformed()-
method associated with the button is run. Do you leave that
actionPerformed method without doing anything and WITHOUT
disposing the ProgressMonitor frame? Try it and I think, the
frame is shown properly.
I think, the problem you face is that the GUI is not updated
properly, thus you don't see the 'stop'-button. Note, that
the GUI runs wrapped by an Event Dispatching Thread (edt).
When you click the button your own methods (actionPerformed)
are executed and the edt is not able to update the GUI until
your method is left.
Facing this, there is now other way than threads. :)
Best regards,
Bart