微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JLabel 未显示在我的 JButton 网格中

如何解决JLabel 未显示在我的 JButton 网格中

创建一个名为黑白棋的游戏,我正在尝试将黑白计数器的起始位置(使用 JLabel标记'W''B'添加到板的中间彼此斜对,但由于某种原因,只有 2 个显示,另外 2 个没有显示,我不明白为什么。

我该如何修复它?

Image

import java.io.*;
import java.util.*;
import java.lang.*;
import java.awt.*;
import javax.swing.*;

public class reversi
{
    // instance variables - replace the example below with your own
    private JFrame frame;
    private JLabel userName1; 
    private JLabel userName2;
    private JTextField textUsername1;
    private JTextField textUsername2;
    private JButton startButton;
    private JButton [][] squares = new JButton[8][8];
    private JLabel whites = new JLabel("W");
    private JLabel blacks = new JLabel("B");
    
    /**
     * 
     */
    public reversi()
    {
        // initialise instance variables
        gui();
        
    }

    /**
     * 
     */
    public void gui()
    {
        frame = new JFrame("reversi Game");
        frame.setSize(800,800);
        frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
        //frame.setLayout(new BoxLayout(frame,BoxLayout.X_AXIS));
        
        JPanel userInterface = new JPanel(new GridBagLayout());
        userInterface.setBackground(Color.LIGHT_GRAY);
        userInterface.setBorder(BorderFactory.createBevelBorder(0));
        //userInterface.setPreferredSize(new Dimension(350,700));
        GridBagConstraints c = new GridBagConstraints();
        //c.anchor = GridBagConstraints.norTH;
        
        JPanel board = new JPanel();
        board.setBackground(Color.GRAY);
        board.setBorder(BorderFactory.createBevelBorder(1));
        board.setPreferredSize(new Dimension(750,700));
        
        userName1 = new JLabel("Enter First player: ");
        userName2 = new JLabel("Enter Second player: ");
        textUsername1 = new JTextField(15);
        textUsername2 = new JTextField(15);
        startButton = new JButton("START");
        
        c.gridx = 0;
        c.gridy = 0; 
        userInterface.add(userName1,c);
        
        c.gridx = 1;
        userInterface.add(textUsername1,c);
        
        c.gridx = 0;
        c.gridy = 1;
        userInterface.add(userName2,c);
        
        c.gridx = 1;
        userInterface.add(textUsername2,c);
        
        c.gridx = 0;
        c.gridy = 2;
        c.gridwidth = 2;
        c.anchor = GridBagConstraints.soUTH;
        userInterface.add(startButton,c);
        
        userInterface.setBorder(BorderFactory.createTitledBorder(
        BorderFactory.createEtchedBorder(),"Players/scoreboard"));
        
        
        board.setLayout(new GridLayout(8,8));
        for(int i = 0; i< 8; i++){
            for (int j = 0; j < 8; j++)
             {
            squares[i][j] = new JButton();
            squares[i][j].setBackground(Color.GREEN);
            board.add(squares[i][j]);
            }
        }
        
        squares[4][3].add(blacks);
        squares[4][4].add(whites);
        squares[3][4].add(blacks);
        squares[3][3].add(whites);
        
        frame.add(board,BorderLayout.CENTER);
        JPanel wrapper = new JPanel();
        wrapper.add(userInterface);
        frame.add(wrapper,BorderLayout.LINE_END);
        
        makeMenuBar();
        frame.pack();
        frame.setVisible(true);
    }
    
    private void makeMenuBar()
    {
        //Finish coding later
        JMenuBar menubar = new JMenuBar();
        frame.setJMenuBar(menubar);
        
        JMenu fileMenu = new JMenu("File");
        menubar.add(fileMenu);
        
        JMenuItem saveFile = new JMenuItem("Save File");
        fileMenu.add(saveFile);
        
        JMenuItem quitGame = new JMenuItem("Quit");
        fileMenu.add(quitGame);
        quitGame.addActionListener(ev -> {quit(); });
        
    }
    
    
    private void quit()
    {
        System.exit(0);
    }
}

解决方法

每个组件(即您的 JLabelswhitesblacks))只能添加到容器中一次,如果您需要添加更多标签,即使它们具有相同的标签String 里面,你必须为那些创建一个新对象,否则这些将显示在你添加的最后一个容器中。

squares[4][3].add(blacks);
squares[4][4].add(whites);
squares[3][4].add(blacks); // Only this one is added
squares[3][3].add(whites); // Only this one is added

您将需要这样的东西,或者有一个 JLabels 数组并将它们添加到您所有的 squares 中,然后只需调用 yourJLabelArray[i][j].setText("W")(或 "B"

squares[4][3].add(new JLabel("B"));
squares[4][4].add(new JLabel("W"));
squares[3][4].add(new JLabel("B"));
squares[3][3].add(new JLabel("W"));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。