Java JPanel周围的数字;杰帕内尔边界?

Java JPanel周围的数字;杰帕内尔边界?,java,swing,jpanel,border,Java,Swing,Jpanel,Border,我正在制作一个迷你游戏,我被卡住了。这个网格应该是nxn,但在我弄清楚之前,这个网格是6x6 无论如何,我想创建一个透明的边框 这将在每个单元格上方添加居中的数字(在左侧和上方,但是,稍后我必须添加右侧和下方)。这样做的好方法是什么?我四处搜索,因为我知道棋盘有这样的“边界”,我实际上搜索了它们,但没有运气 这是一个代码片段,单元格包含在一个简单的JPanel中,而其他所有内容都在JFrame中 public GameFrame() { EventQueue.invokeLater(n

我正在制作一个迷你游戏,我被卡住了。这个网格应该是nxn,但在我弄清楚之前,这个网格是6x6

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

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

这是一个代码片段,单元格包含在一个简单的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, 0, 0, Color.GRAY);
                    } else {
                        border = new MatteBorder(1, 1, 0, 1, Color.GRAY);
                    }
                } else {
                    if (col < 5) {
                        border = new MatteBorder(1, 1, 1, 0, Color.GRAY);
                    } else {
                        border = new MatteBorder(1, 1, 1, 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);
    }
}
公共游戏框架(){
invokeLater(新的Runnable(){
公开募捐{
试一试{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}catch(ClassNotFoundException |实例化Exception | IllegalacessException
|不受支持的LookandFeelEx){
}
JFrame=新JFrame(“游戏”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(新的BorderLayout());
frame.add(新游戏面板());
frame.pack();
frame.setLocationRelativeTo(空);
frame.setVisible(true);
JMenuBar menubar=新的JMenuBar();
JMenu菜单1=新JMenu(“新”);
菜单栏。添加(菜单1);
JMenu菜单2=新JMenu(“加载”);
菜单栏。添加(菜单2);
JMenu菜单3=新JMenu(“保存”);
菜单栏。添加(菜单3);
JMenu菜单4=新JMenu(“大小”);
菜单栏。添加(菜单4);
JMenu菜单5=新JMenu(“检查”);
菜单栏。添加(菜单5);
JMenu菜单6=新JMenu(“解决”);
菜单栏。添加(菜单6);
frame.setJMenuBar(菜单栏);
}
});
}
公共类游戏面板扩展了JPanel{
公共游戏小组(){
setLayout(新的GridBagLayout());
GridBagConstraints gbc=新的GridBagConstraints();
用于(int行=0;行<6;行++){
for(int col=0;col<6;col++){
gbc.gridx=col;
gbc.gridy=行;
CellPanel CellPanel=新的CellPanel();
Border=null;
如果(第5行){
if(col<5){
边框=新的蒙版边框(1,1,0,0,颜色为灰色);
}否则{
边框=新的蒙版边框(1,1,0,1,颜色为灰色);
}
}否则{
if(col<5){
边框=新的蒙版边框(1,1,1,0,颜色为灰色);
}否则{
边框=新的蒙版边框(1,1,1,1,颜色为灰色);
}
}
cellPanel.命令(边框);
添加(电池板,gbc);
}
}
}
}
公共类CellPanel扩展了JPanel{
颜色背景;
公共小组委员会(){
addMouseListener(新的MouseAdapter(){
公共无效mouseClicked(MouseEvent e){
defaultBackground=getBackground();
如果(getBackground().equals(Color.BLUE)){
倒退(空);
}否则{
挫折背景(颜色:蓝色);
}
}
});
}
公共维度getPreferredSize(){
返回新维度(50,50);
}
}

也许可以尝试在gridbaglayout中添加额外的列和行。然后在for()构造中将它们作为特殊情况进行控制,或者从1开始索引,然后返回并在for()构造之外对它们进行寻址


创建另一个继承的JPanel,您可以将其用作CellLabel,特别是当它们看起来都很相似时

您可以将一些
JLabel
s添加到网格中相应的位置。在源代码中,缺少
CellPanels
的类。如果您可以添加这个类,那么该程序将可由SO用户进行测试。@pzaenger好的。我会查出来的,谢谢。@Intai'sei你能用主方法添加零件吗?我认为pzaenger是对的,简单地添加一些标签可能是完成任务的最简单的方法。1)为了更快地获得更好的帮助,发布一个或多个标签。2) 提供最小尺寸的ASCII艺术或GUI预期布局的简单绘图,如果可以调整大小,则具有更大的宽度和高度。3) 另见。