Java Box.glue не работает, как ожидалось - PullRequest
1 голос
/ 25 июля 2011

Я пишу класс, в котором я хочу иметь возможность добавлять неизвестное количество панелей в другую JPanel в вертикальной BoxLayout.Каждая из этих панелей состоит из метки в качестве заголовка и другой панели.Я хочу, чтобы панели, которые добавляются ко всем, были расположены вверху панели (в данном случае Gui), поэтому я добавил вертикальный клей внизу.У меня все работало, как и ожидалось, пока мне не пришлось переделывать часть кода, чтобы разместить главную панель (представленную графическим интерфейсом) в области прокрутки.для простоты я смог продублировать мою проблему в следующем коде.при запуске вы заметите, что клей не занимает пустое пространство, а скорее делится между другими панелями.Я установил размер для jframe, а не использовал .pack (), чтобы проиллюстрировать это.

public class Gui extends JFrame {

public Gui() {
    getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS));
    getContentPane().add(new Panel());
    getContentPane().add(new Panel());
    getContentPane().add(new Panel());
    getContentPane().add(new Panel());
    getContentPane().add(Box.createVerticalGlue());
}

public class Panel extends JPanel{

    public Panel(){
        this.setLayout(new BorderLayout());
        this.add(new JLabel("Title"), BorderLayout.NORTH);
        JPanel panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
        this.add(panel);
        panel.add(new JButton("button"));
    }
}
public static void main (String[] args){
    Gui g = new Gui();
    g.setSize(240, 320);
    g.setLocationRelativeTo(null);
    g.setVisible(true);
    g.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

1 Ответ

4 голосов
/ 25 июля 2011

Если вы вызовете this.setBorder(BorderFactory.createLineBorder(Color.BLACK)) в классе Panel и panel.setBorder(BorderFactory.createLineBorder(Color.RED)) во вложенном JPanel, вы увидите, что между этими компонентами нет «пустого пространства».


enter image description here


РЕДАКТИРОВАТЬ

Заменив менеджер раскладки Panel на BoxLayout, вы получите следующее -

enter image description here

Если честно, вам просто нужно поиграть с вашими менеджерами по расположению.Я рекомендую вам прочитать Расположение компонентов в контейнере , прежде чем продолжить работу с Swing.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...