2015-08-13 3 views
1

Возможно ли иметь 5 JPanels в строке в одном кадре? Heres мой код, вы можете получить лучшее понимание вопроса:Могу ли я иметь 5 панелей подряд

setLayout(new BorderLayout()); 
add(mainOrderInfo, BorderLayout.WEST); 
add(meatPanel, BorderLayout.WEST); 
add(cheesePanel, BorderLayout.CENTER); 
add(ingrediantsPanel, BorderLayout.EAST); 
add(addonsPanel, BorderLayout.EAST); 

Когда код сбежались все я получаю являются meatPanel, cheesePanel и ingrediantsPanel. Я хотел бы, чтобы mainOrderInfo находился слева от meatPanel и addonsPanel справа от ingredientsPanel. Мне кажется, что это просто вопрос кода или порядок кода, о котором я не знаю.

+0

Используйте 'GridLayout' или' GridBagLayout' см [Как использовать GridLayout] (https://docs.oracle.com/javase/tutorial/uiswing/layout/grid.html) и [Как для использования GridBagLayout] (http://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html) для получения более подробной информации – MadProgrammer

+0

Спасибо всем за ответы, которые будут работать идеально, и теперь у меня есть куча разных вариантов пытаться. Спасибо –

+0

Спасибо @poke за редактирование сообщения его намного больше. В будущем я постараюсь убедиться, что разные фрагменты кода в моем описании соответствуют коду, который намного легче идентифицировать. –

ответ

1

GridLayout

См How to Use GridLayout для более подробной информации

GridLayout

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.GridLayout; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class Test { 

    public static void main(String[] args) { 
     new Test(); 
    } 

    public Test() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     public TestPane() { 
      setLayout(new GridLayout(1, 5)); 
      add(createPanel(Color.WHITE)); 
      add(createPanel(Color.BLACK)); 
      add(createPanel(Color.RED)); 
      add(createPanel(Color.GREEN)); 
      add(createPanel(Color.BLUE)); 
     } 

     protected JPanel createPanel(Color color) { 
      JPanel panel = new JPanel() { 
       @Override 
       public Dimension getPreferredSize() { 
        return new Dimension(50, 50); 
       } 
      }; 
      panel.setBackground(color); 
      return panel; 
     } 

    } 

} 

GridBagLayout

Смотрите How to Use GridBagLayout для получения более подробной информации

GridBagLayout

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.GridLayout; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class Test { 

    public static void main(String[] args) { 
     new Test(); 
    } 

    public Test() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     public TestPane() { 
      setLayout(new GridBagLayout()); 
      GridBagConstraints gbc = new GridBagConstraints(); 
      gbc.gridx = 0; 
      gbc.gridy = 0; 
      add(createPanel(Color.WHITE), gbc); 
      gbc.gridx++; 
      add(createPanel(Color.BLACK), gbc); 
      gbc.gridx++; 
      add(createPanel(Color.RED), gbc); 
      gbc.gridx++; 
      add(createPanel(Color.GREEN), gbc); 
      gbc.gridx++; 
      add(createPanel(Color.BLUE), gbc); 
     } 

     protected JPanel createPanel(Color color) { 
      JPanel panel = new JPanel() { 
       @Override 
       public Dimension getPreferredSize() { 
        return new Dimension(50, 50); 
       } 
      }; 
      panel.setBackground(color); 
      return panel; 
     } 

    } 

} 
2

У вас может быть много панелей в ряд с макетом BoxLayout.

Пакеты Swing включают диспетчер компоновки общего назначения с именем BoxLayout. BoxLayout либо складывает свои компоненты друг на друга , либо помещает их в ряд - ваш выбор. Вы можете подумать об этом как о версии FlowLayout , но с большей функциональностью.

Для ваших панелей (ingrediantsPanel, addonsPanel) положить панели желательно к Box box = new Box(BoxLayout.X_AXIS); и добавить box на восток. Панели будут расположены вдоль оси х.

1

Это должно решить вашу проблему

setLayout (новый GridLayout (1,5));

add(mainOrderInfo); 

add(meatPanel); 

add(cheesePanel); 

add(ingrediantsPanel); 

add(addonsPanel; 
Смежные вопросы