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

Java Swing – JPanel和GridLayout边距/填充

发布时间:2020-12-15 05:22:44 所属栏目:Java 来源:网络整理
导读:我正在努力用 Java构建一个国际象棋游戏,我目前在使用Swing完全按照我想要的方式获取GUI时遇到了一些麻烦.我正在使用GridLayout来组织一个8×8 ChessButtons网格(它覆盖JButton,以便我可以在其中存储额外的信息,如坐标).最初,ChessButtons不会出现,除非我mou
我正在努力用 Java构建一个国际象棋游戏,我目前在使用Swing完全按照我想要的方式获取GUI时遇到了一些麻烦.我正在使用GridLayout来组织一个8×8 ChessButtons网格(它覆盖JButton,以便我可以在其中存储额外的信息,如坐标).最初,ChessButtons不会出现,除非我moused over它们,但我通过将每个ChessButton放在一个单独的JPanel并将每个按钮的setPreferredSize()设置为设置的高度和宽度来解决这个问题.

现在,我的问题是每个按钮上方(和/或下方?)似乎有一个小的边距或填充.我已经确保为GridLayout设置setHgap(0)和setVgap(0),所以我很确定神秘的边缘来自按钮或JPanels.但是,我似乎无法摆脱它们,而且它们似乎会导致每个ChessButton在我老鼠的时候向上/向下移动一点点.

我意识到这个问题的描述可能有点难以想象,所以我采取了截图(使用JButtons而不是ChessButton,因此间隙更容易识别):http://img3.imageshack.us/img3/6656/jbuttonmargins.png

这是我用来初始化每个ChessButton的代码:

chessBoard = new JPanel(new GridLayout(8,8,0));
    chessBoard.setBorder(BorderFactory.createEmptyBorder());

    for (int i = 0; i <= 65; i++) {
            //Create a new ChessButton
            ChessButton button = new ChessButton("hi");
            button.setBorder(BorderFactory.createEmptyBorder());
            button.setPreferredSize(new Dimension(75,75));
            button.setMargin(new Insets(0,0));

            //Create a new JPanel that the ChessButton will go into
            JPanel buttonPanel = new JPanel();
            buttonPanel.setPreferredSize(new Dimension(75,75));
            buttonPanel.setBorder(BorderFactory.createEmptyBorder());
            buttonPanel.add(button);

            //Add the buttonPanel to the grid
            chessBoard.add(buttonPanel);
    }

那么,我怎样才能摆脱按钮之间的这些垂直空间呢?我对Swing比较新,所以如果答案非常明显,我很抱歉,但我很感激任何人可能提供的任何帮助!提前致谢!

解决方法

Originally,the ChessButtons wouldn’t appear unless I moused over them,but I solved that problem by placing each ChessButton inside a separate JPanel and setting each button’s setPreferredSize() to a set height and width

这不是正确的解决方案.没有理由使用JPanel来按住按钮.事实上,这可能是问题的原因.将它们添加到GridLayout时,按钮应显示.如果它们没有显示它可能是因为您在使GUI可见后将按钮添加到GUI.组件应该在显示之前添加到GUI中.

Now,my problem is that there seems to be a small margin or padding above (and/or below?) each button

我不明白为什么也没有横向差距.创建JPanel时,默认情况下它使用FlowLayout,它还包含5像素的水平/垂直间隙.所以我理解为什么你可能有10像素的垂直间隙.我不明白为什么没有横向差距.

如果您需要更多帮助,请在SSCCE上展示问题. SSCCE应该使用常规的JButton.在开始使用自定义组件之前,先了解使用标准组件的基础知识.这样您就知道问题是否与您的自定义代码有关.

(编辑:李大同)

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

    推荐文章
      热点阅读