2016-04-19 13 views
1

Ich arbeite an Schach-Spiel. Ich habe JFrame, wo ich Container habe, die 2D-Array von JLabel-Feldern enthalten. Jetzt möchte ich meinem Fenster eine Symbolleiste hinzufügen, aber wenn ich das möchte, bröckelt mein Schachbrett. Dieses ist ein Bild, wie mein Fenster mit Schachbrett wie Window aussieht. Ich möchte Symbolleiste am oberen Rand des Fensters hinzufügen, wo ich zum Beispiel Spiel speichern/laden kann usw. Auch ich würde gerne auf der rechten Seite einige Panel hinzufügen, wo ich vorherige Züge sehen kann. Ich würde gerne wissen, wie das geht, ohne mein Schachbrett zu zerstören. Hier ist mein Code:Hinzufügen von Symbolleiste zu GUI in JAVA

public class GUI extends JFrame implements Serializable{ 
public void initGUI() { 
    setTitle("Chess game"); 
    setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 
    ImageIcon img = new ImageIcon("pieceImages/whiteKing.png"); 
    contentPane = getContentPane(); 
    GridLayout gridLayout = new GridLayout(8, 8); 
    contentPane.setLayout(gridLayout); 
    for (int i = 0; i < 8; i++) { 
     for (int j = 0; j < 8; j++) { 
      labels[i][j]=new JLabel(game.getBoard()[i][j].getImagePath()); 
      contentPane.add(labels[i][j]); 
     } 
    } 
    setIconImage(img.getImage()); 
    setResizable(false); 
    setSize(600, 600); 
    setLocationRelativeTo(null); 
    setVisible(true); 
} 

Ich habe Vorschlag einiger JPanel, wie es würde so aussehen:

public class Toolbar extends JPanel implements Serializable { 
    public Toolbar(){ 
     JButton newGameBtn = new JButton("New game"); 
     JButton regretBtn = new JButton("Regret move"); 
     add(newGameBtn); 
     add(regretBtn); 
    } 
} 
+0

Können Sie eine vollständige SSCCE enthalten? Sie haben den Code nicht angezeigt, in dem Sie die Symbolleiste zu Ihrer Anwendung hinzufügen. – Timmos

Antwort

2

Sie einen BorderLayout auf Inhaltsbereich gesetzt werden, fügen Sie die Symbolleiste im Norden, und eine andere Platte, die Etiketten zu halten, in die Mitte.

setTitle("Chess game"); 
    setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 
    ImageIcon img = new ImageIcon("pieceImages/whiteKing.png"); 
    contentPane = getContentPane(); 

    contentPane.setLayout(new BorderLayout()); 

    Toolbar toolbar = new Toolbar(); 

    JPanel labelsPanel = new JPanel(); 

    GridLayout gridLayout = new GridLayout(8, 8); 
    labelsPanel.setLayout(gridLayout); 
    for (int i = 0; i < 8; i++) { 
     for (int j = 0; j < 8; j++) { 
      labels[i][j]=new JLabel(game.getBoard()[i][j].getImagePath()); 
      labelsPanel.add(labels[i][j]); 
     } 
    } 

    contentPane.add(toolbar, BorderLayout.NORTH); 
    contentPane.add(labelsPanel, BorderLayout.CENTER); 

    setIconImage(img.getImage()); 
    setResizable(false); 
    setSize(600, 600); 
    setLocationRelativeTo(null); 
    setVisible(true); 

Beachten Sie auch, dass Sie ein JToolBar verwenden könnte, sehen How to Use Tool Bars

0

Sie zwei Platten verwenden können, eine für die Symbolleiste und die andere Platte als das Hauptspiel Panel.

Legen Sie also in Ihrer GUI-Klasse das Layout als BorderLayout fest und fügen Sie das Symbolleistenfenster mit der NORTH-Einschränkung hinzu und fügen Sie das Spielfeld mit der CENTER-Einschränkung hinzu. Etwas wie:

JFrame frame = new JFrame(); 
      frame.setTitle("Chess game"); 
      frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 
      Container contentPane = frame.getContentPane(); 
      contentPane.setLayout(new BorderLayout()); 
      JPanel toolbar = new JPanel(); // stablish any layout... 
      toolbar.add(new JButton("Save")); 
      // add the rest of the buttons... 

      JPanel game = new JPanel(); // this is your current contentPane 
      GridLayout gridLayout = new GridLayout(8, 8); 
      game.setLayout(gridLayout); 
      game.add(new JButton("Any Component")); 
      game.add(new JButton("Any other Component")); 

      contentPane.add(toolbar, BorderLayout.NORTH); 
      contentPane.add(game, BorderLayout.CENTER); 
Verwandte Themen