Java Swing - JLabel Расположение - PullRequest
4 голосов
/ 19 июля 2010

У меня проблема при настройке местоположения Jlabel.Я установил панель содержимого для некоторого JPanel, создал и попытался добавить свой JLabel.

    JLabel mainTitle = new JLabel("SomeApp");
    mainTitle.setFont(new Font("Arial",2 , 28));
    mainTitle.setBounds(0,0, 115, 130);
    getContentPane().add(mainTitle);

Я хочу, чтобы моя JPanel находилась в верхнем левом углу моего приложения, а я получаю «SomeApp» в верхнем центре (а не в верхнем левом углу).

Кстати, я пытался добавить JButton и я не могу изменить ширину, высоту, x, y JButton.

Ответы [ 3 ]

4 голосов
/ 19 июля 2010

Swing использует Менеджеры макетов для размещения компонентов.

Вы должны понимать, как они работают, чтобы эффективно их использовать.Вы можете установить для менеджера макета значение NULL и выполнить макет самостоятельно, но это не рекомендуется, поскольку вам придется каждый раз отслеживать новые компоненты и самостоятельно выполнять вычисления макета при уменьшении размера окна и т. Д.

Менеджеры раскладки поначалу немного сложны для восприятия.

Ваши окна могут выглядеть так:

так просто, как это http://img827.imageshack.us/img827/7043/capturadepantalla201007z.png

Использованиеэтот код:

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

class JLabelLocation  {

    public static void main( String [] args ) {

        JLabel mainTitle = new JLabel("SomeApp");
        mainTitle.setFont(new Font("Arial",2 , 28));
        //mainTitle.setBounds(0,0, 115, 130); //let the layout do the work

        JFrame frame = new JFrame();
        JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT));// places at the left
        panel.add( mainTitle );

        frame.add( panel );// no need to call getContentPane
        frame.pack();
        frame.setVisible( true );

    }
}
1 голос
/ 19 июля 2010

От того, какой конкретный виджет окажется в своем контейнере, зависит от используемого им менеджера компоновки. Менеджер по расположению определяет, как изменить размеры и расположить виджеты так, чтобы они подходили по размеру. Очевидно, что макет по умолчанию для панели содержимого решил, что лучшим центром для размещения JLabel является верхний центр.

Если вы хотите отказаться от использования менеджера компоновки и просто разместить все самостоятельно (что, кстати, не самый лучший способ выложить вещи, кстати), добавьте:

getContentPane().setLayout(null);
0 голосов
/ 19 июля 2010

Обычно лучше использовать макеты, так как они позволяют динамически изменять размеры компонентов.Вот как бы вы сделали это с BorderLayout:

this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add (new JLabel ("Main title"), BorderLayout.NORTH);

Если вы хотите добавить что-то справа от метки, вы можете создать дополнительную панель с ее собственным макетом:

// Create a panel at the top for the title and anything else you might need   
JPanel titlePanel = new JPanel (new BorderLayout());
titlePanel.add(new JLabel ("Main title"), BorderLayout.WEST);

// Add the title panel to the frame
this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add(titlePanel, BorderLayout.CENTER);

Вот несколько полезных ссылок для начала работы с макетами:

http://download.oracle.com/docs/cd/E17409_01/javase/tutorial/uiswing/layout/visual.html http://download.oracle.com/docs/cd/E17409_01/javase/tutorial/uiswing/layout/using.html

...