gpt4 book ai didi

java - 在 Swing 中使用空布局时,我的组件只有在将鼠标悬停在它们上时才会出现

转载 作者:行者123 更新时间:2023-12-01 18:13:17 25 4
gpt4 key购买 nike

最近我开始使用 Java 中的 Swing 制作一些简单的游戏。我当前的项目是一个类似国际象棋的游戏,所以我想我应该先用 JButtons 制作一个 8 x 8 的网格,然后从那里开始。

问题是,每次我运行我的应用程序时,一半的按钮都会丢失,并且只有当我将鼠标悬停在它们上方时它们才会出现。根据我对这个问题的搜索,大多数建议都说我不应该使用 null 布局,而我应该使用 Swing 中已有的一些布局。但从目前为止我所看到的来看,Swing 布局使用起来很麻烦(至少与 Android 布局相比),而且我现在更喜欢只使用绝对定位。

我还发现添加 panel.repaint();修复了丢失的按钮,但我不喜欢这个解决方案,因为它并没有真正解决问题,而更像是修补它。当使用重绘运行我的应用程序时,我仍然会短暂地看到丢失的按钮,直到它们被重新绘制为止。

所以我要寻找的是为什么这种情况首先发生,以及有没有什么方法可以在不使用不良 Swing 布局的情况下避免这种情况发生。

import javax.swing.*;

public class Main {

static final int TILE = 70;
static final int WIDTH = 600;
static final int HEIGHT = 600;

public static void main(String[] args){
JFrame frame = new JFrame("Knight's tour");
frame.setSize(WIDTH, HEIGHT);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);

JPanel panel = new JPanel();
panel.setLayout(null);
frame.add(panel);

JButton[][] tiles = new JButton[8][8];

for(int i = 0; i < 8; i++){
for(int j = 0; j < 8; j++){
tiles[i][j] = new JButton();
tiles[i][j].setLocation(i*TILE, j*TILE);
tiles[i][j].setSize(TILE, TILE);
panel.add(tiles[i][j]);
}
}

//panel.repaint(); //this thing fixes it, but I am looking for a better fix
}
}

最佳答案

通常情况下,添加面板及其组件后会执行最后操作:

frame.pack();
frame.setVisible(true);

pack() 在首选尺寸上进行一些布局。

也可以做 JTable 8x8。

关于java - 在 Swing 中使用空布局时,我的组件只有在将鼠标悬停在它们上时才会出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31269938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com