Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > Не меняется размер формы (swing)


Автор: Allexm 24.10.2010, 01:42
Недавно начал изучать Java. Попробовал поиграться с gui-интерфейсом, да размер формы меняться не хочет. Ни setSize(), ни setBounds() его не берёт. Location меняется, а size -- нет. Я не знаю, быть может его как-то перерисовать нужно после изменений. Помогите, знающие люди.
Код

import java.awt.*;
import javax.swing.*;        

public class HelloWorldSwing {
    private static void createAndShowGUI() {
        //Create and set up the window.
        JFrame frame = new JFrame("Hello World Swing");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //frame.setBounds(100, 100, 500, 500);
        frame.setSize(500, 500);

        //Add the ubiquitous "Hello World" label.
        JLabel label = new JLabel("Hello World!");
        frame.getContentPane().add(label);

        //Add the new button.
        JButton button = new JButton("Test button");
        frame.getContentPane().add(button);

        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }

    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();
            }
        });
    }
}

OS: Ubuntu 10.10
Java: java 1.6.0_20; javac 1.6.0_20
Editor: gedit

Автор: mgarin 24.10.2010, 02:23
Советую почитать, скажем, вот этот источник:
http://download.oracle.com/javase/tutorial/uiswing/layout/visual.html

Вполне ясно и с кратинками smile

В целом - вы пытаетесь статично задать размеры компонентов,
а нужно пользоваться Layout Manager'ами.

Они позволяют как-раз таки размещать компоненты там где надо и как надо.

P.S. А чтобы работал ваш пример - вы должны использовать null layout, т.е. в вашем примере:
Код
        frame.getContentPane().setLayout(null);

Автор: Allexm 24.10.2010, 09:23
mgarin, спасибо.

Автор: Connie 24.10.2010, 15:23
pack() вызываемый в конце "упаковывает" (странно, что название что то напоминает) форму, т.е. берет размеры preffered из размеров компонентов и приводит размер формы, что бы она ему соответствовала, соответственно все предыдущие попытки изменить размер формы сбрасываются.

Код

//Display the window.
//        frame.pack();
frame.setSize(800,600);//try this and in such order
        frame.setVisible(true);

Автор: Allexm 24.10.2010, 15:46
Connie, спасибо. Теперь понятна суть явления.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)