2015-04-13 3 views
1

enter image description hereКак установить максимальную ширину JPanel с учетом потока?

Как изображение показывает: Outer является JPanel_1 с BorderLayout; Слева - JPanel_2 на западе JPanel_1, и он использует GridBadLayout; В JPanel_2 находятся несколько панелей, каждая из которых содержит несколько JButton.

Проблема заключается в том, что JPanel_3 использует FlowLayout, я попытался установить его с максимальной шириной, чтобы кнопки автоматически меняли линию, когда их слишком много. Однако, в зависимости от того, какой из JPanel установить либо size, maximumSize, preferred size, он не работает. Кнопки остаются на одной линии, что делает JPanel слишком широким для меня.

У кого-нибудь есть решение? Благодаря!

ответ

2

Вы можете расширить FlowLayout ограничить предпочтительную ширину, как этот

import javax.swing.*; 
import java.awt.*; 

public class TestMaxWidthFlowLayout { 

    public static void main(String[] args) { 
     JFrame f=new JFrame(); 
     JPanel pButtons=new JPanel(new FlowLayout() { 
      public Dimension preferredLayoutSize(Container target) { 
       Dimension sd=super.preferredLayoutSize(target); 

       sd.width=Math.min(200, sd.width); 

       return sd; 
      } 
     }); 
     for (int i=0;i<20; i++) { 
      pButtons.add(new JButton("b-"+i)); 
     } 

     f.add(pButtons, BorderLayout.WEST); 
     f.add(new JLabel("center"), BorderLayout.CENTER); 

     f.setSize(500, 300); 
     f.setLocationRelativeTo(null); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setVisible(true); 
    } 
} 
3

так, что линии кнопки автоматического изменения, когда есть слишком много.

Вы можете использовать Wrap Layout. Он будет динамически перемещать компоненты в новую строку по мере изменения доступной ширины.

WrapLayout - это расширение FlowLayout, которое будет правильно рассчитать предпочтительный размер панели в качестве обертывания компонентов.

+0

Я пробовал, все еще некоторые проблемы с tabbedPane. Поэтому я, наконец, расширяю FlowLayout, вдохновленный вами и SanisiavL. – bijiDango