2015-04-07 3 views
1

Я хочу добавить CellPanel, который расширяет JPanel внутри a JPanel. Я делаю это, потому что у меня есть кнопки, которые удаляют содержимое из этих JPanels и добавляют другие компоненты. Проблема в том, что FlowLayoutJPanel s не позиционирует мой CellPanel в верхнем левом углу. Что я могу сделать?JPanel внутри JPanel добавляет верхнюю обивку

Вот код, где я с этой проблемой:

JFrame mazeFrame = new JFrame("Create and Play"); 
    mazeFrame.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);   
    mazeFrame.setSize(640, 480); 
    mazeFrame.setResizable(false); 
    mazeFrame.setLocationRelativeTo(null); 
    mazeFrame.setLayout(new GridLayout(rows,columns));//max(7,10) 

    JPanel[] cellr = new JPanel[rows*columns]; 
    for(int i=0;i<rows*columns; i++){ 
     cellr[i] = new JPanel(); 
     cellr[i].setPreferredSize(new Dimension(mazeFrame.getWidth()/columns,mazeFrame.getHeight()/rows)); 
     mazeFrame.getContentPane().add(cellr[i]); 
    } 

    for(int i=0;i<rows*columns; i++){ 
     CellPanel cell = new CellPanel(wall.getImage()); 
     cell.setPreferredSize(new Dimension(mazeFrame.getWidth()/columns,mazeFrame.getHeight()/rows)); 
     cellr[i].add(cell); 
    } 

Что он показывает: enter image description here

+0

Вы можете попробовать и сначала добавить CellPanel в свой JPanel, а затем добавить JPanel в JFrame. Вы также можете избавиться от вызовов setPrefferedSize, поскольку GridLayout должен иметь возможность автоматически определять размер. –

+1

Две вещи: вы можете предоставить свойство 'hgap' и' vgap' 'GridLayout' и не использовать размер кадра, чтобы попытаться рассчитать размер ваших компонентов, он включает в себя декорации кадров – MadProgrammer

+0

Проблема в том, что я добавьте CellPanel в JPanel. Если я добавлю CellPanel непосредственно в mazeFrame, он отлично работает. Проблема, я думаю, с FlowLayout JPanel, который не выравнивает мою CellPanel в верхнем левом углу. – Andrew

ответ

0

Я сделал некоторые исследования, и я нашел решение.

JPanel[] cellr = new JPanel[rows*columns]; 
    for(int i=0;i<rows*columns; i++){ 
     cellr[i] = new JPanel(); 
     cellr[i].setLayout(new GridBagLayout()); 
     mazeFrame.getContentPane().add(cellr[i]); 
    } 

    GridBagConstraints g = new GridBagConstraints(); 
    for(int i=0;i<rows*columns; i++){ 
     CellPanel cell = new CellPanel(wall.getImage()); 
     cell.setPreferredSize(new Dimension(mazeFrame.getWidth()/columns,mazeFrame.getHeight()/rows)); 
     g.fill = GridBagConstraints.BOTH; 
     g.weightx = 1; 
     g.weighty = 1; 
     cellr[i].add(cell,g); 
    } 
Смежные вопросы