java - 添加自定义背景时 JButton 和 JLabel 消失

标签 java swing jframe jbutton jlabel

添加自定义背景时,

JButtonJLabel 消失。我在我的程序中没有发现任何问题,但也许你们找到了解决方案!我想这只是我忘记的一件小事,但我想不通。

代码如下:

GameWindow.java:

setContentPane(new StartImagePanel(RollrackLogo));
out.println("adding JLWelcome");
JLWelcome.setText("Welcome to Rollrack, " + namewindow.name);
add(JLWelcome);
JLWelcome.setVisible(true);
out.println("JLWelcome added");
out.println("adding JBRandom");
JBRandom.setText("Random");
add(JBRandom);
JBRandom.setVisible(true);
out.println("added JBRandom");

背景看起来很完美,但不是 JButtonJLabel!

StartImagePanel.java 的代码:

public class StartImagePanel extends JComponent{
    private Image image;
    public StartImagePanel(Image image) {
        this.image = image;
    }
    @Override
    protected void paintComponent(Graphics g) {
        g.drawImage(image, 0, 0, null);
    }
}

最佳答案

您的按钮和标签已添加到您的 GameWindow 框架中,而它们应该添加到其 contentPane 中,setContentPane(new StartImagePanel(RollrackLogo)); 相反。这就是它们没有显示的原因,它们被添加到框架中。

StartImagePanel 创建一个变量并向其添加按钮和标签,它们应该会显示出来。

StartImagePanel contentPanel = new StartImagePanel(RollrackLogo);
setContentPane(contentPanel);

...

out.println("adding JLWelcome");
JLWelcome.setText("Welcome to Rollrack, " + namewindow.name);
contentPanel.add(JLWelcome);
JLWelcome.setVisible(true);
out.println("JLWelcome added");
out.println("adding JBRandom");
JBRandom.setText("Random");
contentPanel.add(JBRandom);
JBRandom.setVisible(true);
out.println("added JBRandom");

回答争议

第一段中的说法完全错误。这是证明这一点的来源。

import java.awt.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;

public class AddToCustomContentPane {

    public static void main(String[] args) {
        Runnable r = new Runnable() {

            @Override
            public void run() {
                // the GUI as seen by the user (without frame)
                JPanel gui = new JPanel(new FlowLayout());
                gui.setBorder(new EmptyBorder(2, 3, 2, 3));
                gui.setBackground(Color.RED);

                JFrame f = new JFrame("Demo");
                f.setContentPane(gui);

                // Acid test.  Can we add buttons direct to the frame?
                f.add(new JButton("Button 1"));
                f.add(new JButton("Button 2"));

                // Ensures JVM closes after frame(s) closed and
                // all non-daemon threads are finished
                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                // See http://stackoverflow.com/a/7143398/418556 for demo.
                f.setLocationByPlatform(true);

                // ensures the frame is the minimum size it needs to be
                // in order display the components within it
                f.pack();
                // should be done last, to avoid flickering, moving,
                // resizing artifacts.
                f.setVisible(true);
            }
        };
        // Swing GUIs should be created and updated on the EDT
        // http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html
        SwingUtilities.invokeLater(r);
    }
}

在给出自定义面板代码后进行编辑

这是一个片段,可以在黑色图像背景上显示按钮和标签,我删除了不需要的(听众)。

public static void main(String[] v) {

class StartImagePanel extends JPanel {
  private Image image;
  public StartImagePanel(Image image) {
      this.image = image;
  }
  @Override
  protected void paintComponent(Graphics g) {
    g.drawImage(image, 0, 0, null);
  }
}

class GameWindow extends JFrame{
  public GameWindow() {
    BufferedImage RollrackLogo;
    RollrackLogo = new BufferedImage(400,200,BufferedImage.TYPE_INT_RGB);
    final JButton JBRandom = new JButton();
    final JLabel JLWelcome = new JLabel();
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    StartImagePanel panel = new StartImagePanel(RollrackLogo);
    setContentPane(panel);
    setExtendedState(MAXIMIZED_BOTH);
    setVisible(true);
    JLWelcome.setText("Welcome to Rollrack");
    panel.add(JLWelcome);
    JLWelcome.setVisible(true);
    JBRandom.setText("Random");
    panel.add(JBRandom);
    JBRandom.setVisible(true);
  }
}

GameWindow window = new GameWindow();
window.pack();
window.setVisible(true);
}

关于java - 添加自定义背景时 JButton 和 JLabel 消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15003052/

相关文章:

javaws.exe 与 java8 中的 java.exe 相比性能较差

java - 如何从应用程序服务器(EJB)通知(或发送消息) Swing 客户端?

java - 将简单的 Applet GUI 从 Swing 转换为 JavaFX

java - 如何使用 JButton 在 eclipse 上打开一个小输入框

java - 除了在Java中获取屏幕尺寸之外,还可以使用其他方式设置全屏

java - 如何使用 RangeCellAddress 通过 POI 解锁单元格?

java - 通过数据数据库实现搜索字段

java - Android OpenGL ES 1 - 多边形边缘

java - DragTabFrame 关闭不一致

java - 坚持从字符串输入创建 if 语句