A fixed size window in Java

C

C.

Hello. I am writing a Java application with Swing and I need a Window
with a fixed size, because every time I call "pack" because some
components of that window change, the Window is resized to fit exactly
that components.

If I use Frame.setPreferredSize(...) then the components are not shown
correctly when I call pack (some ones are displayed over other ones and
so on).

What can I do to implement a fixed size window?

Thank-you very much.
 
T

Thomas Hawtin

C. said:
Hello. I am writing a Java application with Swing and I need a Window
with a fixed size, because every time I call "pack" because some
components of that window change, the Window is resized to fit exactly
that components.

If you use validate instead of pack, then the window will not be
resized. However, if the window is set to small, it'll be a mess.
If I use Frame.setPreferredSize(...) then the components are not shown
correctly when I call pack (some ones are displayed over other ones and
so on).

Adding the contents of your window to a scroll pane is worth doing. Even
if the window is resized too small, it still wont look totally daft.

You might be better off setting a minimum size. Then if the contents are
too big for the size you have set, a sufficient size will be used. From
1.5, the minimum size of a frame will tend to be honoured when the user
resizes.

It can be useful to override a container's getXyzSize method. For
instance, a minimum size that is below the preferred size can cause a
mess. Or the preferred size might be silly small, and you want to add
some internal padding on.

Tom Hawtin
 
C

C.

Thomas Hawtin escribió:
If you use validate instead of pack, then the window will not be
resized. However, if the window is set to small, it'll be a mess.


Adding the contents of your window to a scroll pane is worth doing. Even
if the window is resized too small, it still wont look totally daft.

You might be better off setting a minimum size. Then if the contents are
too big for the size you have set, a sufficient size will be used. From
1.5, the minimum size of a frame will tend to be honoured when the user
resizes.

It can be useful to override a container's getXyzSize method. For
instance, a minimum size that is below the preferred size can cause a
mess. Or the preferred size might be silly small, and you want to add
some internal padding on.

Tom Hawtin

I have tried that but now I have the same problem. The objets are not
shown correctly. I have a Panel with some JLables layed out with
GridBagLayout. When some labels are deleted and I want to be redisplayed
that area using validate(), then the old labels are not removed (the
actual JLabel are removed, but their graphics are not).
 
T

Thomas Hawtin

C. said:
The problem is that the window is not repainted. I have minimized and
maximized it and the display area has been repainted ok. But calling
repaint() after validate() doesn't work.

parent.revalidate(); parent.repaint(); should work. A big advantage of
revalidate over invalidate is that you can call it as much as you want,
but all the calls will be collected together so it wont be slow.

Tom Hawtin
 
C

C.

I have tried that but now I have the same problem. The objets are not
shown correctly. I have a Panel with some JLables layed out with
GridBagLayout. When some labels are deleted and I want to be redisplayed
that area using validate(), then the old labels are not removed (the
actual JLabel are removed, but their graphics are not).

The problem is that the window is not repainted. I have minimized and
maximized it and the display area has been repainted ok. But calling
repaint() after validate() doesn't work.

How do you think I can fix that?

Thanks!!!
 
J

James McGill

Hello. I am writing a Java application with Swing and I need a Window
with a fixed size, because every time I call "pack" because some
components of that window change, the Window is resized to fit exactly
that components.

If I use Frame.setPreferredSize(...) then the components are not shown
correctly when I call pack (some ones are displayed over other ones and
so on).

What can I do to implement a fixed size window?

Thank-you very much.

It might be worth your while to look into JLayeredPane. Instead of a
LayoutManager, it lets you stack things on top of another with specific
Bounds relative to the container. This gives you some control that
regular layout managers don't.

You will still have the same problems if you pack() a container, but if
the LayeredPane's bounds and size getters return the right values, it
will do the right thing.

Lot of work, but any kind of custom layout always is, and LayeredPane is
not that bad...
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,020
Latest member
GenesisGai

Latest Threads

Top