【问题标题】:Putting objects onto Frames将对象放在框架上
【发布时间】:2020-06-13 00:29:24
【问题描述】:

我正在创建一个简单的掷骰子模拟,当按下按钮时掷骰子。我还没有添加动作侦听器,因为在我的框架上显示对象时遇到问题。我创建了一个类,该类生成一个骰子并获取骰子的图像以及滚动的数字,但我似乎无法将对象添加到我的框架上。

public class DieFrame extends JComponent 
{
    private static final int FRAME_WIDTH = 500;
    private static final int FRAME_HEIGHT = 240;
    private JButton rollButton;
    private JLabel player1Score,player2Score, playerTurn;

    Die die1 = new Die(1);
    Die die2 = new Die(1);

    public DieFrame()
    {
        JPanel panel = new JPanel();
        player1Score = new JLabel("Player 1 score:  ");
        player2Score = new JLabel("Player 2 score:  ");
        panel.add(player1Score);
        panel.add(player2Score);
        panel.setBackground(Color.yellow);
        add(panel, BorderLayout.NORTH);
        setSize(FRAME_WIDTH, FRAME_HEIGHT);
        createPlayerTurnPanel();
        createDiePanel();

    }
    public void createPlayerTurnPanel()
    {
        JPanel turnPanel = new JPanel();
        playerTurn = new JLabel("Player ");
        rollButton = new JButton("Roll");
        turnPanel.add(playerTurn);
        turnPanel.add(rollButton);

        add(turnPanel, BorderLayout.SOUTH);
    }

    public void createDiePanel()
    {
        JPanel diePanel = new JPanel();
        diePanel.add(die1);
        diePanel.setBackground(Color.BLACK);
        add(diePanel, BorderLayout.CENTER);
    }
}

【问题讨论】:

    标签: java swing user-interface frame


    【解决方案1】:
    public class DieFrame extends JComponent 
    

    您的课程正在扩展 JComponent。

     add(panel, BorderLayout.NORTH);
    

    您假设组件将使用 BorderLayout。好吧,它没有。它不使用任何布局管理器。

    默认情况下,只有 JFrame (JDialog) 的内容窗格会使用 BorderLayout。

    不要扩展 JComponent。它不是为用作容器而设计的,如果您尝试将其用作容器,它将无法正常工作。

    相反,您可以扩展 JPanel,它被设计为用作容器,尽管它的布局管理器是 FlowLayout,因此您需要将布局设置为 BorderLayout

    尽管您确实不应该扩展 JPanel,因为您没有向面板添加新功能。相反,您应该创建一个类,该类将为您返回一个包含组件的面板。阅读 How to Use Menus 上的 Swing 教程部分。 MenuLookDemo 有一个使用这种方法的工作示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多