【问题标题】:I want to use Jframe to display an image for 5 seconds [duplicate]我想使用 Jframe 显示图像 5 秒 [重复]
【发布时间】:2020-02-09 19:43:49
【问题描述】:

我正在使用 JFrame 制作游戏。在开始之前,我希望一张图片显示五秒钟,然后开始游戏的其余部分。游戏在调用 GUI 构造函数时开始:

public GUI() {
    JFrame frame = new JFrame("Razor Fin"); //initialize JFrame
    frame.getContentPane().setBackground(Color.BLACK);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(1275,760);
    frame.setResizable(false);
    frame.setLayout(new FlowLayout());
    frame.add(Box.createRigidArea(new Dimension(110,100)));

    frame.setVisible(true);
    try {dispLogo(frame);} catch (Exception e) {e.printStackTrace();}

    jta = new JTextArea(30,90); //initializing the output field. The constructor takes in lines of text to set size, not pixel measurements.
    jta.setEditable(false);
    jta.setBackground(c);
    frame.add(new JScrollPane(jta));
    DefaultCaret caret = (DefaultCaret)jta.getCaret();
    caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE); 
    frame.add(Box.createRigidArea(new Dimension(110,100)));

    jta2 = new JTextField();
    jta2.setBackground(c);
    jta2.setForeground(Color.WHITE);
    jta2.setPreferredSize(new Dimension(500,20)); 
    jta2.setHorizontalAlignment((int) JTextField.CENTER_ALIGNMENT); 
    frame.add(new JScrollPane(jta2));
    jta2.addActionListener(this); 
    frame.setVisible(true);
}

GUI 构造函数在创建文本框之前调用 dispLogo:

static void dispLogo(JFrame frame) throws InterruptedException
{
    ImageIcon image = new ImageIcon("logo.png");
    JLabel imageLabel = new JLabel(image); 
    frame.add(imageLabel);
    imageLabel.setVisible(true);
    TimeUnit.SECONDS.sleep(5);
    imageLabel.setVisible(false);
}

不是显示图像,而是黑屏。有人知道如何解决吗?

【问题讨论】:

    标签: java image swing jframe


    【解决方案1】:

    构造函数不应该创建一个 JFrame,或者让它可见。这是一个建议的顺序:

    1. 您的 main() 应该创建一个可运行文件。它的 run() 方法创建一个模态 JDialog 来显示初始图像。

    2. 然后 run() 方法创建 GUI 的其余部分 - 一个带有内容的 JPanel;将面板添加到 JFrame,打包框架并使其可见。

    3. 将 runnable 传递给 SwingUtilities.invokeLater()。

    4. 您可以创建并启动一个 SwingTimer,它会在 5 秒后关闭图像对话框。

    【讨论】:

    • 好的,但是如何在不改变整个程序的情况下解决问题?
    • 您的意思是,“我如何做错了却仍然可以工作?”你没有。您必须更改整个程序。正如你所写的那样,它完全不正确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 2011-04-02
    • 1970-01-01
    相关资源
    最近更新 更多