GUI不显示我为它设置的背景(编译)

时间:2014-04-23 22:36:07

标签: java bluej

我正在尝试为我想要制作的游戏创建一个GUI,游戏无关紧要。

根据我应该做的是向我展示一个带有框架和图片的GUI,然而,只有框架显示,图像无处可寻:(

有谁能告诉我我做错了什么? 感谢您的时间!

     import javax.swing.JFrame;
     import javax.swing.JPanel;
     import javax.swing.ImageIcon;
     import javax.swing.JLabel;
     import javax.swing.*;
     import java.awt.BorderLayout;
     import java.awt.*;

     public class Graph
     {
     int maxX,maxY;
     private JFrame frame;

     Graph()
     {
     Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
     maxX = screenSize.width;
     maxY = screenSize.height;
     frame = new JFrame("My Application");
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     frame.setSize(maxX, maxY);
     frame.setLocationRelativeTo(null);
     JLabel label = new JLabel(icon);
     JPanel panel = new JPanel(new BorderLayout());
     panel.add(label, BorderLayout.CENTER);
     frame.add(panel, BorderLayout.CENTER);
     frame.setVisible(true);




    }


    public String g()
    {

    return this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath().replaceAll("´        20", " ");
    }

    public static void main(String args[]) {
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            Graph g = new Graph();
        }
    });
    }
    }

1 个答案:

答案 0 :(得分:0)

此示例应显示执行所需操作的正确顺序。此外,SwingUtilities.invokeLater()方法是您应该启动swing应用程序的方式。这使用了您可以阅读的有关here的EDT。另一个注意事项是你设置了框架的大小,但是当它显示时它会小得多。那是因为你使用了frame.pack()来确保只有你真正需要的空间用完了。

import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Graph {
    JFrame frame;

    public Graph() {
        frame = new JFrame("My Application");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(1366,770);
        frame.setLocationRelativeTo(null);

        JLabel label = new JLabel("SomeLabel");
        JPanel panel = new JPanel(new BorderLayout());
        panel.add(label, BorderLayout.CENTER);

        frame.add(panel, BorderLayout.CENTER);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String args[]) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                Graph g = new Graph();
            }
        });
    }
}