I tried to add image to my login frame in Netbeans, so I try to change the layout from 'free
Design' to 'Null Layout' (like I see in this video: http://www.youtube.com/watch?v=uZFgiqM0udA), and it's work.
But when I run the program the window open in the left side, and not in the regular size -
as you can see in the picture:
What is the problem?
Welcome to the wonderful world of why you should not use null layouts (and why learning to code a UI with a form designer is also a bad idea).
The problem you are facing is based on the fact that Swing (and AWT) were designed to work with layout managers, this is at the core of how the framework works.
When you call pack on a Window, it asks all it's children what size they would like to be and calculates the best size for the Window.
In your case, because you're not using a layout manager, the window is assuming it's default side of 0x0 (plus the frame border).
To fix the issue I suggest two things. Firstly, stop using the form designer until you understand how the UI is constructed and secondly, make use of one or more layout managers.
Take a look at A Visual Guide to Layout Managers and Using layout managers
I've not had the chance to use it, but it might also be worth while to take a look at MigLayout, it comes highly recommended by many of the users on SO
As far as I know, dont use null layout, use LayoutManagers instead, anyway, you're free, I think you're calling pack() method to the frame and you probably didnt set the aize of frame
or you can move on and start by tamming a little the layout manager.
select your frame in the navigator and then, look for this propierties
preferredSize - The size that frame will take as their default
maximumSize - The maximum size of the frame
minimumSize - Minimum size of the frame
Using Absolute Layout fixed mine! For some reason, default size 0*0 was getting executed on run ( but the frame remains in custom resolution), so changing null layout to absolute is calling the custom frame size.
Related
I am creating simple application in java - Eclipse - WindowBuilder Editor. JFrame`s contentPane has JGoodies FormLayout in which I have to place 3 or 4 Panels - depending on mode.
It is proper way to make if construction that decides if content pane will be divided 1x3 or 1x4(facilitation because between all I use relatedgaps and so on..)?
I am not sure if this is good approach but I do not know how can I do this in other way than if construction. It has to be practical and flexible approach - to handle resizing the window, et cetera..
Common approaches for dynamic layout include these:
Use revalidate(), and possibly repaint(), to layout a Container again after adding or removing components, as shown here.
Replace the layout and validate() the Container, as shown here.
Use CardLayout to replace one panel with another, as shown here and here.
I am using Java Swing and I designed a form page with a few buttons like play, pause, stop & break. They have different sizes, so they seem bad. I want to set size of the buttons to the same size.
How can I do that?
You can use setSize(Dimension d) where you specify the size of each button.
Or you can use different layouts to your application - I am mostly using the GridLayout which works really fine for me - see the tutorial
EDIT:
As mentioned in the comments: Better approach is to use some layout managers to handle the size for you. If you set size of button explicitly via command above, it can cause looking it "not nice" if you resize the window. Layout can do this for you more nicely.
BTW, if you will use
private JFrame application;
application.pack();
prior showing the application to the user, it can "miracelously" cure all "not nice" looking buttons and handles
In my Netbeans code I have JPanels and JDialog which are driving me crazy at times. Some of the controllers on these containers decide not to show up or automatically change size even though I have set up both their size and contents within the code and through using the IDE properties. For instance some of my jButtons on a certain JPanel does not show its text label or the sizes of some of my text field change.
Any solution to this would be grately appreciated!
When you create GUI using the NetBeans IDE wizards the Layout manager attached with JPanel and JFrame is GroupLayout and it works as expected. It keep the size of your JPanel and JFrame as you have specified.
Now if you change the LayoutManager of the JPanel or JFrame then you are on your own. You must know the consequences of changing the LayoutManager and update / add the required code to make the code to run as expected.
I will suggest you to keep the default LayoutManager as GroupLayout if you want to get what you see in the NetBeans component designer.
Unfortunately you did not provide any code snippet that can show your problem. But let me assume that you are confused with layout behavior. Typically we use Layout manager and delegate to it the responsibility of placing and re-sizing the graphical elements. Layout manager does it work when the parent element is being painted, i.e. during execution of method paint() that happens asynchronously and may be caused by various events (e.g. changing focus, re-sizing of window etc).
In this case all your attempts to change size of specific element by calling its setSize() could be overridden by layout manager that decides to change size of the same element differently.
So, if my assumption is correct learn to use layout managers and ask more specific questions if you have any difficulties with them.
everyone, I have some problem with Java I created panel with five rows and one column, also I added button to the one of the rows, finally I added this panel to the frame, and I received button which is stretched to full frame, can I reduce the size of the button, I used
myButton.setSize(10,10);
but it doesn't seem to work, also I use
frame.pack();
may it be the problem, thanks in advance
You should refrain from setting the size yourself. You should select a proper LayoutManager that does the job for you.
(Unless you explicitly do setLayout(null) the sizes you set will be discarded and the current layout manager will assign new sizes to the components.)
You say that you're using a GridLayout. This layout is fairly "unflexible", and if you want the benefits of GridLayout but more flexibility, you could give GridBagLayout a try.
If you don't find a layout manager that suites your needs, don't be afraid of writing your own. (It's five relatively easy methods to implement.)
If you post a screen-shot of your current application, and an explanation on how you want it to look, we'll be able to help you further.
Some useful links
Trail: Using Layout Manager
Create a Custom Swing/AWT Layout Manager in Java
When aloobe seems to have a more general solution for you. I'd say the immediate solution would be to add the button to a JPanel, set the Layoutmanager a layout like GridLayout, or another LayoutManager, if you find another suits you better.
And add this panel to your original panel, in place of the button.
When you are using layout managers (like GridLayout) then calls to setSize() generally don't work, because the layout manager ultimately decides how to size and place each component in a container.
What you can do is call setPreferredSize(), setMaximumSize() and/or setMinimumSize(). Depending on the layout manager in use one or more of these requests (because that's really what they are) will be honoured. When you call frame.pack() it will try to size everything in the container (and subcontainers) to their preferred sizes.
So, in your case, calling myButton.setPreferredSize (10, 10); will probably work. However, it will still be resized if the container changes size. If you don't want that, there are other solutions I can post.
How to dynamically change the size of a JPanel depending on its contents which is a dynamically changing Popup with various size possibilities.
Call revalidate on the JPanel after the size has changed. This will force the layout manager to run again.
In the simplest scenario you'd set a new preferred size, invalidate, validate again and finally request a repaint (or simply call SwingUtilities.updateComponentTreeUI on the panel) but the final say about the panel's size (and position, too) rests with the layout manager of the parent container; the look and feel may play a role, too. An alternative way to set the size is to [re]set the sizeVariant property of the component (a kind of size hint) and then as above, with the same caveats. Thus the answer to your question is: it depends.
If you are a tester and you did not write that code I realize that doesn't help you much. In that case you need to talk to its developer.