JButton расширяется, чтобы занять весь фрейм / контейнер

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
8
0
24 101
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

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

Оказывается, 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

Какой тогда LayoutManger по умолчанию на панели? FlowLayout?

Allain Lalonde 23.11.2008 05:23

Очередной раз :)


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

        }
    }

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

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

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

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

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

Другие вопросы по теме