You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java游戏物品栏显示异常问题求助及修复方案分享

问题:Java Swing物品栏显示异常(横向滚动条+按钮尺寸过大)

场景说明

Game类中的makeInventory方法通过为玩家物品栏内的每个物品创建按钮(并绑定监听器)来生成物品栏,过程中会调用GameUI实例的字段(已知该实现不规范,优先以完成功能为主):

public void makeInventory() {
        ui.listPanel.removeAll();

        InventoryHandler iHandler = new InventoryHandler();

        for (Item item : player.getInventory()) {
            JButton inventoryButton = new JButton(item.getName());
            inventoryButton.setBackground(Color.black);
            inventoryButton.setForeground(Color.white);
            inventoryButton.setFont(ui.normalFont);
            inventoryButton.setFocusPainted(false);
            inventoryButton.addActionListener(iHandler);
            inventoryButton.setActionCommand("item");

            ui.listPanel.add(inventoryButton);
        }

        ui.listPanel.revalidate();
        ui.listPanel.repaint();
    }

面板等组件的初始化在GameUI类的createInventoryArea方法中完成,使用JScrollPane避免物品过多时布局混乱:

public void createInventoryArea() {
    listPanel = new JPanel();
    listPanel.setBackground(Color.black);
    listPanel.setLayout(new GridLayout());

    inventoryScroll = new JScrollPane(listPanel);
    inventoryScroll.setBounds(550, 350, 300, 200);
    inventoryScroll.setBorder(null);
    inventoryScroll.setVisible(false);

    con.add(inventoryScroll);
}

当前问题

物品栏显示异常:滚动条呈横向位于底部,且按钮尺寸过大,不确定需要修改哪些部分,寻求更高效的实现建议。

已解决方案

通过以下调整解决了问题:

  • 设置VERTICAL_SCROLLBAR_ALWAYS强制使用垂直滚动条
  • 将listPanel的布局改为BoxLayout
  • 手动调整按钮尺寸避免错位

内容的提问来源于stack exchange,提问作者Enes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 22:03:11