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

StackOverflow https://stackoverflow.com/questions/311876

Вопрос

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

Это было полезно?

Решение

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

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

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

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

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

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

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

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

Еще раз:)


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

        }
    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top