加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – JPanel周围的数字; JPanel边界?

发布时间:2020-12-15 02:12:29 所属栏目:Java 来源:网络整理
导读:我正在创建一个迷你游戏而且我被卡住了.这个网格应该是nxn,但在这种情况下它是6×6,直到我解决了问题. 无论如何,我想创建一个透明的边框 这将在每个单元格上方添加居中数字(在左侧和上方,但是,稍后我必须添加权限侧和向下).这样做有什么好办法?我四处搜寻,
我正在创建一个迷你游戏而且我被卡住了.这个网格应该是nxn,但在这种情况下它是6×6,直到我解决了问题.

无论如何,我想创建一个透明的边框

enter image description here

这将在每个单元格上方添加居中数字(在左侧和上方,但是,稍后我必须添加权限侧和向下).这样做有什么好办法?我四处搜寻,因为我知道国际象棋棋盘有这种“边界”,我实际上搜查了它们,但没有运气.

这是一个代码片段,单元格包含在一个简单的JPanel中,而其他所有内容都在JFrame中.

public GameFrame() {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            } catch (ClassNotFoundException | InstantiationException | IllegalAccessException
                    | UnsupportedLookAndFeelException ex) {
            }

            JFrame frame = new JFrame("Game");
            frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
            frame.setLayout(new BorderLayout());
            frame.add(new GamePanel());
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);

            JMenuBar menubar = new JMenuBar();
            JMenu menu1 = new JMenu ("New");
            menubar.add(menu1);
            JMenu menu2 = new JMenu ("Load");
            menubar.add(menu2);
            JMenu menu3 = new JMenu ("Save");
            menubar.add(menu3);
            JMenu menu4 = new JMenu ("Size");
            menubar.add(menu4);
            JMenu menu5 = new JMenu ("Check");
            menubar.add(menu5);
            JMenu menu6 = new JMenu ("Solve");
            menubar.add(menu6);
            frame.setJMenuBar(menubar);
        }
    });

}

public class GamePanel extends JPanel {
    public GamePanel() {
        setLayout(new GridBagLayout());

        GridBagConstraints gbc = new GridBagConstraints();
        for (int row = 0; row < 6; row++) {
            for (int col = 0; col < 6; col++) {
                gbc.gridx = col;
                gbc.gridy = row;

                CellPanel cellPanel = new CellPanel();
                Border border = null;
                if (row < 5) {
                    if (col < 5) {
                        border = new MatteBorder(1,1,Color.GRAY);
                    } else {
                        border = new MatteBorder(1,Color.GRAY);
                    }
                } else {
                    if (col < 5) {
                        border = new MatteBorder(1,Color.GRAY);
                    }
                }
                cellPanel.setBorder(border);
                add(cellPanel,gbc);
            }
        }
    }
}
public class CellPanel extends JPanel {
    Color defaultBackground;

    public CellPanel() {
        addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                defaultBackground = getBackground();

                if (getBackground().equals(Color.BLUE)) { 
                    setBackground(null);
                } else {
                    setBackground(Color.BLUE);
                }
            }

        });
    }

    public Dimension getPreferredSize() {
        return new Dimension(50,50);
    }
}

Picture

解决方法

也许尝试在gridbaglayout中添加一个额外的列和行.然后在for()构造中将它们作为特殊情况控制或在1处启动索引,然后返回并在for()构造之外解决它们.

创建另一个可以用作CellLabel的继承JPanel,特别是如果它们看起来都相似的话.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读