我想知道为什么我的按钮在我将鼠标悬停在其所在位置之后才显示在面板上?如果我调整窗口大小,它也会再次消失。 MainMenuScreen 只是我用作背景图像的图像。
//MainMenu setup
JPanel card2 = new JPanel();
card2.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.insets = new Insets(2,2,2,2);
gbc.anchor = GridBagConstraints.CENTER;
MainMenuScreen mms = new MainMenuScreen();
mms.setLayout(new FlowLayout());
card2.add(mms);
card2.add(menuButton1, gbc);
这是我如何通过背景图像进行设置。
public class MainMenuScreen extends JPanel{
private static final long serialVersionUID = 1L;
private BufferedImage background;
public MainMenuScreen() {
try {
background = ImageIO.read(new File("M&M Arcade.png"));
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public Dimension getPreferredSize() {
return new Dimension(800, 600);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (background != null) {
int x = (getWidth() - background.getWidth());
int y = (getHeight() - background.getHeight());
g.drawImage(background, x, y, this);
}
Graphics2D g2d = (Graphics2D) g;
g2d.setPaint(Color.white);
}
}
最佳答案
JButton
不会显示,因为您对 MainMenuScreen
组件和 JButton< 使用相同的
GridBagConstraints
值menuButton1
,即它们存在于同一位置。一旦调整了gbc
的值,就会出现该按钮。最好始终使用 add 的正确重载方法。使用 GridBagLayout
添加到容器时。
编辑:
关于如何在 JPanel
容器上实现背景图像已经有很多讨论。值得注意的是 Background Panel .
关于java - JButton 仅在我将鼠标悬停在其上后才出现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15452150/