JButton расширяется, чтобы занять весь кадр / контейнер - PullRequest
7 голосов
/ 23 ноября 2008

Привет всем. Я пытаюсь сделать графический интерфейс с кнопкой и надписью. Я использую макет границы, и метка (в северном поле) отображается нормально, но кнопка занимает остальную часть кадра (она находится в центре поля). есть идеи как это исправить?

Ответы [ 3 ]

13 голосов
/ 23 ноября 2008

Вы должны добавить кнопку на другую панель, а затем добавить эту панель в рамку.

Оказывается, BorderLayout расширяет любой компонент, находящийся посередине

Ваш код должен выглядеть следующим образом:

До

public static void main( String [] args ) {
    JLabel label = new JLabel("Some info");
    JButton button = new JButton("Ok");

    JFrame frame = ... 

    frame.add( label, BorderLayout.NORTH );
    frame.add( button , BorderLayout.CENTER );
    ....

}

Измените его на что-то вроде этого:

public static void main( String [] args ) {
    JLabel label = new JLabel("Some info");
    JButton button = new JButton("Ok");
    JPanel panel = new JPanel();
     panel.add( button );

    JFrame frame = ... 

    frame.add( label, BorderLayout.NORTH );
    frame.add( panel , BorderLayout.CENTER);
    ....

}

До / После

До http://img372.imageshack.us/img372/2860/beforedl1.png После http://img508.imageshack.us/img508/341/aftergq7.png

3 голосов
/ 13 марта 2013

Или просто используйте Абсолютный макет. Это на паллете макетов.

Или включите его с помощью:

frame = new JFrame();
... //your code here

// to set absolute layout.
frame.getContentPane().setLayout(null);

Таким образом, вы можете свободно размещать элемент управления в любом месте.

0 голосов
/ 25 ноября 2008

Опять:)


    import javax.swing.*;

    public class TestFrame extends JFrame {
        public TestFrame() {
            JLabel label = new JLabel("Some info");
            JButton button = new JButton("Ok");
            Box b = new Box(BoxLayout.Y_AXIS);
            b.add(label);
            b.add(button);
            getContentPane().add(b);

        }
        public static void main(String[] args) {
            JFrame f = new TestFrame();
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.setLocationRelativeTo(null);
            f.setVisible(true);

        }
    }
...