2014-01-26 2 views
4

У меня есть панель кода нижеНевозможно установить BoxLayout (JPanel) правильно GridLayout/FlowLayout

public class PhotoBox extends JPanel { 


    private JLabel photoIcon; 
    private JLabel photoName; 
    private JLabel print; 
    private ImageHelper imageHelper; 


    public PhotoBox(File file, JLabel print) throws IOException { 

     imageHelper = new ImageHelper(); 
     this.photoIcon = new JLabel(); 
     this.photoIcon.setIcon(imageHelper.createThumbnails(file)); 
     this.photoIcon.setMaximumSize(new Dimension(200, 150)); 
     this.photoIcon.setAlignmentX(Component.CENTER_ALIGNMENT); 

     this.photoName = new JLabel(); 
     photoName.setText((file.getName().length()) > 20 ? file.getName().substring(0,10)+".." : file.getName()); 
     this.photoName.setAlignmentX(Component.CENTER_ALIGNMENT); 


     this.print = new JLabel(); 
     this.print.setText(print.getText()); 
     this.print.setAlignmentX(Component.CENTER_ALIGNMENT); 

     setLayout(new BoxLayout(this , BoxLayout.Y_AXIS)); 
     setBorder(BorderFactory.createLineBorder(Color.black)); 
     //setPreferredSize(new Dimension(200,150)); 

     add(this.photoIcon); 
     add(this.photoName); 
     add(this.print); 
    } 
} 

Теперь я добавляю список такой панели на другой JPanel с имеет GridLayout

JPanel tile = new JPanel(); 
GridLayout layout = new GridLayout(0,4); 
tile.setLayout(layout); 
PhotoBox vBox = new PhotoBox(file,filePrints.get(file.getName())); 
tile.add(vBox); 

Но то, что я, наконец, получить что-то вроде этого

GridLayout Gap error

Я не понимаю, почему это все пространство занимает все мои объекты PhotoBox. Я хочу, чтобы изображения были близки друг к другу. Не забыть, я уже пробовал PrefSize(), и он не работает.

Использование WrapLayout/FlowLayout

enter image description here

Edit:

Что теперь я чувствую, что проблема с BoxLayout в PhotoBox.

ответ

2

Пожалуйста, проверьте высоту изображения, потому что раскладка правильные AFAICS, нет ничего другого. : D

+0

Спасибо, что именно там, где проблема была – ItachiUchiha

+0

Нет проблем .. :) – TheLittleNaruto

2

Это характер GridLayout. Он занимает свободное место и делит его поровну между всеми компонентами. Взгляните на How to Use GridLayout.

Как исправить будет сведено к тому, что вы хотите. Вы можете использовать GridBagLayout, но вы несете ответственность за предоставление ограничений, определяющих местоположение каждого компонента.

Вы также можете взглянуть на Wrap Layout Rob Camick. Это FlowLayout, поскольку он, вероятно, должен быть выполнен, поскольку он обеспечивает перенос строк для компонентов.

Вы должны взглянуть на A Visual Guide to Layout Managers для получения дополнительных идей.

Вы можете также рассмотреть вопрос о принятии взглянуть на MigLayout

+0

WrapBox помогает. Но если вы ясно видите, что граница была размещена на PhotoBox, и, похоже, это занимает много места, как я могу это уменьшить? – ItachiUchiha

+0

Обновлено мой вопрос – ItachiUchiha

+0

'WrapLayout' является расширением' FlowLayout', вы можете изменить 'hgap' и' vgap' через конструктор, вместо этого попробуйте передать '0, 0' – MadProgrammer

2

GridLayout собирается заполнить имеющееся пространство, которое он помещается. Поэтому контейнер, который title добавляется фактически должны иметь, что высота доступна и GridLayout заполняет его. существует

Три варианта для исправления:

  • Используйте другой менеджер компоновки для названий
  • Использовать другой макет для контейнера вы добавляете его.
  • Поместите свои книги в новом JPanel, который имеет FlowLayout, а затем добавить это «средний человек» JPanel в свой верхний контейнер вместо «названия»
Смежные вопросы