2013-11-08 4 views
0

enter image description hereФормат 3 JPanels с использованием BorderLayout

Привет, ребята,

выше скриншот моего кадра, как она выглядит на данный момент. Я хочу, чтобы первый ярлык PlatformTest1 начинался после красной полосы. Красную полоску я нарисовал в себе для ясности. Я использовал Borderlayout с 3 Janels, один на западе, на севере и в центре. Я заполняю Северные и Западные панели ярлыками, которые я получаю из двух списков. В Center-Panel мне нужна сетка с размером list1.size() * list2.size(). Но я просто не получил первый ярлык, добавленный в позицию, где находится красная полоса. Я попытался добавить пустой ярлык, но это не выглядит великолепно.

Вот мой код до сих пор:

public DisplayMapping() { 

    final int x = list1.size(); 
    final int y = list2.size(); 

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(100, 100,600, 500); 
    contentPane = new JPanel(); 
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    setContentPane(contentPane); 
    contentPane.setLayout(new BorderLayout(0, 0)); 

    JPanel panelApps = new JPanel(); 
    panelApps.setBorder(new LineBorder(new Color(0, 0, 0), 2)); 
    contentPane.add(panelApps, BorderLayout.WEST); 
    panelApps.setLayout(new GridLayout(y, 1)); 


    JPanel panelHW = new JPanel(); 
    panelHW.setBorder(new LineBorder(new Color(0, 0, 0), 2)); 
    contentPane.add(panelHW, BorderLayout.NORTH); 
    panelHW.setLayout(new GridLayout(1,x)); 

    JPanel panelGrid = new JPanel(); 
    contentPane.add(panelGrid, BorderLayout.CENTER); 
    panelGrid.setLayout(new GridLayout(1, 0, 0, 0)); 

    for(String s : list1) 
    { 
     JLabel lbl = new JLabel(); 
     lbl.setText(s); 
     panelApps.add(lbl); 
     panelApps.revalidate(); 
     panelApps.repaint(); 
     contentPane.revalidate(); 
     contentPane.repaint(); 
    } 

    for(String s : XMLParser.HardwareListGUI) 
    { 
     JLabel lbl = new JLabel(); 
     lbl.setText(s); 
     panelHW.add(lbl); 
     panelHW.revalidate(); 
     panelHW.repaint(); 
     contentPane.revalidate(); 
     contentPane.repaint(); 
    } 

Я также попытался установить пределы PanelApps немного больше в направлении х, но не работал вне либо. Надеюсь, кто-то может здесь помочь.

Заранее спасибо.

ответ

3

Что вы можете сделать, это установить как вашу текущую северную панель, так и текущую центральную панель внутри панели, находящейся в центре. Таким образом, вы бы что-то вроде этого:

_____________________________________________________ 
|    | Center Panel (also BorderLayout)  | 
|panelApps | ___________________________________ | 
|    | | panelHW       | | 
|    | |___________________________________| | 
|    | | panelGrid       | | 

Таким образом, ваша панель приложения будет идти в верхней части панели содержимого, и ваш HW панели будут идти к вершине, как хорошо, но будет рядом с панелью приложений.

«Граница» центральной панели, которую я установил вокруг панелей HW и Grid, фактически не появится, поскольку панели будут растягиваться до края «центральной панели». Я просто нарисовал это так, чтобы показать «иерархию» панелей.

+0

выглядит хорошо, этот подход, я попробую. Благодарю. – Alika87

+0

@ Alika87 Пожалуйста, отметьте мой ответ как принятый, если он сработает для вас. – gla3dr

+0

Я пробовал, но не так сложно. Я не могу поставить 2 панели на «Center Panel», и если я поместил панельGrid в gridHW, это выглядит странно. Так что до сих пор он не работал для меня. – Alika87

Смежные вопросы