【问题标题】:Buttons wont appear when added to JLabel containing buffered image添加到包含缓冲图像的 JLabel 时不会出现按钮
【发布时间】:2018-07-22 18:39:51
【问题描述】:

所以我有一个缓冲图像加载到JLabel

当我启动程序时,只显示图像,但不显示按钮。

我尝试将JButtons 直接添加到JLabel,结果相同。但是,如果我将buttonPanel 直接添加到框架中,按钮最终会可见。但是,如果我将JLabel 直接添加到框架中,然后添加buttonPanel,则只有按钮可见。

public void setProp(){
    //frame properties
    mainFrame.setSize(1200, 845); //JFrame
    mainFrame.setVisible(false);
    mainFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

    //layout properties
    buttonLayout.setHgap(100); //GridLayout
    buttonLayout.setColumns(1);
    buttonLayout.setRows(6);

    //panel properties
    buttonPanel.setLayout(buttonLayout);
    buttonPanel.setVisible(true);
    buttonPanel.setOpaque(false);


    //button properties
    newGame.setOpaque(false);
    newGame.setContentAreaFilled(false);
    newGame.setBorderPainted(false);
    newGame.setForeground(Color.WHITE);
    newGame.setFont(buttonFont);
    newGame.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            //launch designated method
        }
    });

    loadGame.setOpaque(false);
    loadGame.setContentAreaFilled(false);
    loadGame.setBorderPainted(false);
    loadGame.setForeground(Color.WHITE);
    loadGame.setFont(buttonFont);
    loadGame.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            //launch designated method
        }
    });

    credits.setOpaque(false);
    credits.setContentAreaFilled(false);
    credits.setBorderPainted(false);
    credits.setForeground(Color.WHITE);
    credits.setFont(buttonFont);
    credits.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            //launch designated method
        }
    });

    exit.setOpaque(false);
    exit.setContentAreaFilled(false);
    exit.setBorderPainted(false);
    exit.setForeground(Color.WHITE);
    exit.setFont(buttonFont);
    exit.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            System.exit(0);
        }
    });

    //background properties
    background = importPic("D:/programming rescources/strategy game/resources/images/mmpic.JPG");

    //adding components to mainFrame
    buttonPanel.add(newGame); //adding all buttons onto JPanel with GridLayout
    buttonPanel.add(loadGame);
    buttonPanel.add(credits);
    buttonPanel.add(exit);

    background.add(buttonPanel);//this is the JLabel with the buffered image

    mainFrame.add(background);
}

【问题讨论】:

    标签: java swing jbutton jlabel layout-manager


    【解决方案1】:

    好吧,我解决了这个问题。我通过将 BorderLayout 添加到背景 (JLabel),然后将背景添加到 JFrame 来做到这一点。

    【讨论】:

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