JButton расширяется, чтобы занять весь фрейм / контейнер
-
10-07-2019 - |
Вопрос
Всем привет.Я пытаюсь создать графический интерфейс 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);
}
}