2013-04-17 3 views
0

для моего начинающего класса Java мы создали автоматическую игру Tic-Tac-Toe, и теперь мы создаем графический интерфейс для его воспроизведения. Тем не менее, у меня много проблем с правильными интервалами/полями. До сих пор я только пытался получить общую структуру для графического интерфейса, а затем я собираюсь вернуться и фактически реализовать игру Tic-Tac-Toe, которую я уже сделал. Итак, далеко, у меня есть это:Смещение границы поля/поля

import java.awt.*; 

import java.awt.event.*; 

import javax.swing.*; 

import javax.swing.border.*; 

public class ITTTGUI extends JFrame implements ActionListener{ 

    //butimport javax.swing.border.*;tons 
    private JPanel sizePanel; 
    private JPanel buttonPanel; 
    private JPanel displayPanel; 
    private JPanel bottomPanel; 
    private JTextField size; 
    private JButton rebuildButton; 
    private JButton[] buttons; 
    private JLabel output; 

    //constructor 
    public NumberChooser(){ 
     setTitle("BitchFace"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     //content pane 
     Container cp = getContentPane(); 

     //add a panel for the size 
     sizePanel = new JPanel(); 
     sizePanel.setBorder(new EmptyBorder(5, 5, 5, 5));//adds margin to panel 
     sizePanel.setLayout(new FlowLayout()); 
     size = new JTextField("3",5); 
     sizePanel.add(new JLabel("N")); 
     sizePanel.add(size); 
     rebuildButton = new JButton("Rebuild"); 
     rebuildButton.addActionListener(this); 
     sizePanel.add(rebuildButton); 
     //add bottom panel for output 

      sizePanel.add(new JButton("Player:"), BorderLayout.EAST); 
      sizePanel.add(new JButton("Move:"), BorderLayout.EAST); 
      sizePanel.add(new JButton("Winner:"), BorderLayout.EAST); 


     //add a panel for the numbers 
     buttonPanel = new JPanel(); 
     buttonPanel.setBorder(new EmptyBorder(5, 5, 5, 5));//adds margin to panel 
     buildButtonsPanel(); 

     //add bottom panel for output 
     JPanel bottomPanel = new JPanel(); 
     bottomPanel.setBorder(new EmptyBorder(5, 5, 5, 5));//adds margin to panel 
     bottomPanel.add(new JButton("New Game"), BorderLayout.SOUTH); 
     bottomPanel.add(new JButton("Advise"), BorderLayout.SOUTH); 
     bottomPanel.add(new JButton("Quit"), BorderLayout.SOUTH); 




     //add panels to main pane 
     cp.setLayout(new BorderLayout()); 
     cp.add(sizePanel, BorderLayout.EAST); 
     cp.add(buttonPanel, BorderLayout.CENTER); 
     cp.add(bottomPanel, BorderLayout.SOUTH); 
     pack(); 
    } 

    //this is a helper method to rebuild the buttons panel 
    private void buildButtonsPanel(){ 
     int n = 3; 
     try{ 
      n = Integer.parseInt(size.getText()); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
     buttonPanel.removeAll(); 
     buttonPanel.setLayout(new GridLayout(n,n,4,4)); 
     buttons = new JButton[n*n]; 
     for(int i=0; i < buttons.length; i++){ 

      buttons[i] = new JButton("*"); 
      buttonPanel.add(buttons[i]); 
      buttons[i].addActionListener(this); 
     } 
     revalidate(); 
     repaint(); 
     pack(); 
    } 

    public void actionPerformed(ActionEvent e){ 
     Object s = e.getSource(); 
     //check to see if the action came from the rebuild button 
     if(s == rebuildButton){ 
      buildButtonsPanel(); 
     } 
     //otherwise it came from the grid 

    } 

    //entry point 
    public static void main(String[] args){ 
     //create the GUI 
     NumberChooser nc = new NumberChooser(); 
     nc.setVisible(true); 
    } 

} 

Это не должно быть точным, как правило, одинаковым. А также нет переменной X или победителя, поскольку я ее не реализовал. Я также попытался изменить поля (5,5,5,5) на понравившиеся (1,1,1,1), но это ничего не изменило, так что меня тоже смутило.

Любая помощь в этом, или как вообще идти об этом назначении, будет оценена по достоинству.

(И это не принимая мои изображения Извините.). ссылки являются:

Проблема заключается в том, что выглядит следующим образом: What my GUI looks like

https://i1224.photobucket.com/albums/ee362/Devolutor/COPimage1_zps459f304b.png

И он должен выглядеть это: What it is supposed to look like

http://i1224.photobucket.com/albums/ee362/Devolutor/COPimage2_zps8981c846.png

+0

Поиск на странице показывает первый '?' происходит в * «Не ответ, который вы ищете?» *. Какой у Вас вопрос? –

+0

Не забудьте изменить строку setTitle(), когда вы включите ее ... да. Я понимаю, что этот вопрос составляет 2 года. – KisnardOnline

ответ

0

Для того, чтобы иметь больше пространства между кнопками, использует ряд пикселей beiiger чем 4 для макета сетки:

buttonPanel.setLayout(new GridLayout(n,n,4,4)); 

Чтобы иметь сетку, а не поток на правой стороне, использовать GridLayout (так же, как вы сделали для ваших кнопок, но с 4 строками и 2 столбцами), а не с FlowLayout.

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