Java устанавливает размеры JPanel - PullRequest
0 голосов
/ 01 августа 2011

Я создал JPanel внутри JPanel, и я хотел бы установить для его атрибута width и height некоторые конкретные числа.вот что у меня есть.

  searchPanel.setLayout(new GridBagLayout());
     GridBagConstraints c = new GridBagConstraints();
     searchPanel.setBorder(BorderFactory.createCompoundBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED), new EmptyBorder(12, 12, 12, 12)));

     c.insets = new Insets(2, 2, 2, 2);
     c.fill = GridBagConstraints.HORIZONTAL;

     c.weightx = 1;
     c.weighty = 1;
     c.gridx = 0;
     c.gridy = 0;
     searchPanel.add(typeLabel, c);

     c.weightx = .8;
     c.weighty = 1;
     c.gridx = 0;
     c.gridy = 1;
     searchPanel.add(typeComboBox, c); 
    ....

     yearComboBox.setModel(this.yearDefaultCombo);
     typeComboBox.setModel(this.typeDefaultCombo);

     updateYearComboBox();

     this.setLayout(new BorderLayout(10, 10));
     this.setBorder(new EmptyBorder(10, 10, 10, 10));

     searchPanel.setSize(200, 100);
     this.add(searchPanel, BorderLayout.NORTH);

В коде «this» относится к родительскому JPanel.Прямо сейчас моя внутренняя "searchPanel" растянута по всей верхней части экрана из-за ограничения BorderLayout.NORTH, но я хочу, чтобы она была только маленькой панелью в левом верхнем углу, однако setSize у меня не сработала.

спасибо.

1 Ответ

3 голосов
/ 01 августа 2011

Большинство менеджеров компоновки уважают предпочтительный размер больше, чем размер, поэтому вы можете попробовать setPreferredSize (...) на вашем JPanel.Но независимо от того, что вы делаете, если вы добавите его BorderLayout.NORTH, он растянется, чтобы заполнить всю северную позицию вмещающей JPanel.Вы можете вложить вашу searchPanel в другую JPanel (возможно, использующую BoxLayout) и добавить этот JPanel BorderLayout.NORTH.

Пожалуйста, прочитайте руководства по макету и их API, так как большая часть этого объясняется там.

...