Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Swing将背景图像添加到JFrame_Java_Image_Swing_Background_Jframe - Fatal编程技术网

Java 使用Swing将背景图像添加到JFrame

Java 使用Swing将背景图像添加到JFrame,java,image,swing,background,jframe,Java,Image,Swing,Background,Jframe,您好,我一直在遵循关于如何将背景图像添加到JFrame的多个指南。然而,当运行我的程序时,背景只在左下角和底部显示了一点背景图像 这是我目前的代码: private int width = 1280; private int height = 720; private String title = "Creation - " + Component.versionID + " Launcher"; private JPanel window = new JPanel(); private J

您好,我一直在遵循关于如何将背景图像添加到JFrame的多个指南。然而,当运行我的程序时,背景只在左下角和底部显示了一点背景图像

这是我目前的代码:

private int width = 1280;
private int height = 720;

private String title = "Creation - " + Component.versionID + " Launcher";

private JPanel window = new JPanel();
private JFrame frame = new JFrame();
private JLabel name, version;


private JButton play, options, changelog, quit;
private Rectangle rPlay, rOptions, rChangelog, rQuit, rName, rVersion;
private int buttonWidth = 200;
private int buttonHeight = 80;

public Menu (Component component) {
    frame.setTitle(title);
    frame.setSize(new Dimension(width, height));
    frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
    frame.add(component);
    frame.getContentPane().add(window);
    frame.setResizable(false);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
    frame.setIconImage(new ImageIcon("res/icon.png").getImage());

    setLayout(new BorderLayout());
    JLabel background = new JLabel(new ImageIcon("res/background.png"));
    frame.add(background);
    background.setLayout(new FlowLayout());

    window.setLayout(null);
    drawButtons();
    frame.repaint();
    frame.pack();
}

private void drawButtons() {

    name = new JLabel("Creation");
    rName = new Rectangle((width/2) - (buttonWidth/2) + 60, 20, buttonWidth, buttonHeight);
    name.setBounds(rName);
    window.add(name);

    play = new JButton("Play");
    rPlay = new Rectangle((width/2) - (buttonWidth/2), 250, buttonWidth, buttonHeight);
    play.setBounds(rPlay);
    window.add(play);

    options = new JButton("Options");
    rOptions = new Rectangle((width/2) - (buttonWidth/2), 350, buttonWidth, buttonHeight);
    options.setBounds(rOptions);
    window.add(options);

    changelog = new JButton("View change-log");
    rChangelog = new Rectangle((width/2) - (buttonWidth/2), 450, buttonWidth, buttonHeight);
    changelog.setBounds(rChangelog);
    window.add(changelog);

    quit = new JButton("Quit");
    rQuit = new Rectangle((width/2) - (buttonWidth/2), 550, buttonWidth, buttonHeight);
    quit.setBounds(rQuit);
    window.add(quit);

    play.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            Component component = new Component();
            frame.dispose();
            component.start();
        }
    });
    options.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {

        }
    });
    changelog.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {

        }
    });
    quit.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {        
            System.exit(0);
        }
    });
}
(如您所见)我的JFrame大小是1280x720。这与背景图像大小相同,因此我看不出任何问题。如果有人能帮我编辑代码或给我指针,我只是在寻找按钮后面显示的背景图像

  • 如果您的GUI与图像大小相同,则将BuffereImage添加到JLabel,并将JLabel添加到JFrame的contentPane,而不是一些不显示图像的JPanel
  • 不要使用空布局和
    setBounds(…)
    ,而是使用合适的布局管理器。虽然对新手来说空布局似乎更容易,但这通常只是因为您可能不熟悉如何使用布局管理器,相信我,创建和维护使用行为良好的布局管理器的GUI要容易得多
  • 给JPanel/contentPane一个合适的布局,因为您将向它添加组件
  • 如果您的GUI与图像大小相同,则将BuffereImage添加到JLabel,并将JLabel添加到JFrame的contentPane,而不是一些不显示图像的JPanel
  • 不要使用空布局和
    setBounds(…)
    ,而是使用合适的布局管理器。虽然对新手来说空布局似乎更容易,但这通常只是因为您可能不熟悉如何使用布局管理器,相信我,创建和维护使用行为良好的布局管理器的GUI要容易得多
  • 给JPanel/contentPane一个合适的布局,因为您将向它添加组件
  • 类MyFrame {

    }

    类MyFrame {


    }

    “JFrame大小为1280x720。这与背景图像大小相同”…不,不会。框架具有装饰,这意味着应用程序可用的空间将是
    frame.size-frame border insetts
    。与其直接设置帧大小,不如使用一个自定义组件返回内容区域的
    preferredSize
    ,并将其用作帧内容窗格…”JFrame大小为1280x720。这与背景图像大小相同“…不,不会。框架具有装饰,这意味着应用程序可用的空间将是
    frame.size-frame border insetts
    。与其直接设置帧大小,不如使用一个自定义组件返回内容区域的
    preferredSize
    ,并将其用作帧内容窗格……您好,我对Java编码非常陌生,您能给我提供一些示例代码吗?感谢您的快速回复。我们不是来为您编写代码的。试着自己编写代码。如果有什么你不懂的地方,那么问一个关于你不懂的部分的后续问题。您可以从阅读Swing教程开始,该教程提供了使用Swing的基础知识。您好,我对Java编码非常陌生,您能给我提供一些示例代码吗?感谢您的快速回复。我们不是来为您编写代码的。试着自己编写代码。如果有什么你不懂的地方,那么问一个关于你不懂的部分的后续问题。您可以从阅读Swing教程开始,该教程提供了使用Swing的基本知识。
    String filename = "demo//6.jpg";
    
    BufferedImage image = ImageIO.read(new File(filename));
    
    //Create Image Label
    JLabel label = new JLabel(new ImageIcon(image));
    label.setBounds(0, 0, image.getWidth(), image.getHeight());
    lpane.setLayout(null);
    lpane.setPreferredSize(new Dimension(image.getWidth(), image.getHeight()));
    lpane.add(label, new Integer(JLayeredPane.DEFAULT_LAYER-1));
    ImageIcon ic=new ImageIcon("demo//12.jpg");
    but.setIcon(ic);
    
    public static void main(String arr[])
    {
       JPanel panel=new JPanel()
       {
           @Override
           protected void paintComponent(Graphics g)
           {
               try
               {
                   BufferedImage image = ImageIO.read(new File("C://Users//MulayamYadav//Desktop//1.jpg"));
                   Image image1=image.getScaledInstance(getWidth(), getHeight(), Image.SCALE_SMOOTH);
                   g.drawImage(image1, 0, 0, null);
                }catch(Exception ex)
                {
                  System.out.println(ex);
                }
            }
       };
       JFrame frame=new JFrame();
       panel.setLayout(new FlowLayout());
       panel.add(new JButton("Button1"));
       panel.add(new JButton("Button2"));
       add(panel);
       frame.setVisible(true);