2013-11-11 4 views
2

Я создаю игру с минным полем. Мне нужно добавить две кнопки: «Очистить» и «Готово» в отдельном JPanel под сеткой и не могу понять, как это сделать. Ниже приведен код игровой сетки. Благодаря!Как добавить JPanel в JFrame?

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class MineField extends JPanel implements ActionListener{ 

    public static void main(String[] args) { 
     MineField g = new MineField(); 
     JFrame frame = new JFrame("Mine Field"); 
     frame.add(g); 
     frame.setSize(400,400); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
    } 

    private JButton squares[][]; 

    public MineField(){ 
     this.setSize(400,400); 
     this.setLayout(new GridLayout(5,5)); 
     squares = new JButton[5][5]; 
     buildButtons(); 
    } 

    int [][] num = new int [5][5]; 

    private void buildButtons(){ 
     for(int i=0;i<5;i++){ 
      for(int j=0;j<5;j++){ 
       squares[i][j] = new JButton(); 
       squares[i][j].setSize(400,400); 
       this.add(squares[i][j]); 
      } 
     } 
    } 

    public void actionPerformed(ActionEvent e) { 
     // TODO Auto-generated method stub 
    } 

} 
+1

'JFrame.add (Компонент c)' – Justin

+0

Используйте IDE с дизайнером GUI. –

+1

@brifbraff, лучше узнать и понять, как работают менеджеры макетов и дизайн вашего собственного графического интерфейса. – camickr

ответ

6

По умолчанию JFrame использует BorderLayout.

Итак, теперь ваш класс MineField добавляется в центр оформления границы.

Если вы хотите другую панель на раме можно использовать:

JPanel south = new JPanel(); 
south.add(clearButton); 
south.add(doneButton); 
frame.add(south, BorderLayout.SOUTH); 

Прочитайте раздел из свинга учебника по How to Use BorderLayout для получения более подробной информации и примеров, чтобы лучше понять, как менеджер компоновки работы.

0

Мы можем добавлять компоненты друг к другу с помощью метода .add().

два практических Обычаи это было бы:

mainPanel.add(topPanel); //panel to panel 

или Quincunx сказал

JFrame.add(Component c); //component to jframe 
-1

Вы должны изменить код Литт немного, ну вы можете добавить эти несколько строк:

JPanel thePanel = (JPanel)frame.getContentPane(); // this variable will manage the JFrame content 

thePanel.setLayout(new BorderLayout()); // BorderLayout to seperat the Frame on 5 section Center, North, South, Est, West 

JPanel btnPanel = new JPanel(new FlowLayout(FlowLayout.Right)); // this JPanel made to contain the buttons 
btnPanel.add(clearBtn); 
btnPanel.add(doneBtn); 

thePanel.add(g, BorderLayout.CENTER); 
thePanel.add(btnPanel, BorderLayout.SOUTH); 

надеюсь, что это поможет, Салам

+0

Когда я пытаюсь это сделать, он говорит, что мне нужно сделать компоненты кнопок. Я делаю, а потом ничего не меняет. Что мне делать с этим? Спасибо за помощь! – user2980816

+0

-1, @ user2980816, этот ответ был дан ранее. Не нужно загромождать форум дублирующимися ответами. Кроме того, макет по умолчанию для фрейма - BorderLayout, поэтому нет необходимости получать панель содержимого и создавать новый BorderLayout. – camickr

+0

спасибо за вашу критику, я постараюсь быть лучше, потому что я новичок, и я не знал, что мы не можем ответить на хорошие ответы! – BilalDja

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