Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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 设置背景图像时遇到的问题_Java_User Interface_Background - Fatal编程技术网

Java 设置背景图像时遇到的问题

Java 设置背景图像时遇到的问题,java,user-interface,background,Java,User Interface,Background,可能重复: 我不知道如何在我的窗口上设置背景图像。我不确定我的代码有什么问题。该图像称为Background.jpg 有人知道我的代码哪里出了问题,以及如何修复吗 //apples code import javax.swing.JFrame; import java.applet.*; import javax.swing.*; import java.awt.*; import java.awt.Graphics; import java.awt.image.BufferedImag

可能重复:

我不知道如何在我的窗口上设置背景图像。我不确定我的代码有什么问题。该图像称为Background.jpg
有人知道我的代码哪里出了问题,以及如何修复吗

//apples code  

import javax.swing.JFrame;
import java.applet.*;
import javax.swing.*;
import java.awt.*;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
import java.awt.*;
import javax.swing.*;

class  Apples{

public static void main(String[] args) {
  gui go = new gui();
  go.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  go.setSize(200,290);
  go.setVisible(true);



 }
}



 //Gui Code

    import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.*;
import java.awt.Color;
import java.awt.Font;
import javax.swing.JFrame;
import javax.swing.JTextArea;

public class gui extends JFrame{
     private JButton A;
     private JButton B;
     private JButton C;
     private JButton D;
     private JButton E;
     private JButton F;
     private JButton G;
     private JButton H;
     private JButton I;
     private JButton J;
     private JButton K;
     private JButton L;
     private JButton M;
     private JButton N;
     private JButton O;
     private JButton P;
     private JButton Q;
     private JButton R;
     private JButton S;
     private JButton T;
     private JButton U;
     private JButton V;
     private JButton W;
     private JButton X;
     private JButton Y;
     private JButton Z;

     public gui(){
        super("APUSH ABCs");
        setLayout(new FlowLayout());

        A = new JButton("A");
        add(A);
        B = new JButton("B");
        add(B);
        C = new JButton("C");
        add(C);
        D = new JButton("D");
        add(D);
        E = new JButton("E");
        add(E);
        F = new JButton("F");
        add(F);
        G = new JButton("G");
        add(G);
        H = new JButton("H");
        add(H);
        I = new JButton("I");
        add(I);
        J = new JButton("J");
        add(J);
        K = new JButton("K");
        add(K);
        L = new JButton("L");
        add(L);
        M = new JButton("M");
        add(M);
        N = new JButton("N");
        add(N);
        O = new JButton("O");
        add(O);
        P = new JButton("P");
        add(P);
        Q = new JButton("Q");
        add(Q);
        R = new JButton("R");
        add(R);
        S = new JButton("S");
        add(S);
        T = new JButton("T");
        add(T);
        U = new JButton("U");
        add(U);
        V = new JButton("V");
        add(V);
        W = new JButton("W");
        add(W);
        X = new JButton("X");
        add(X);
        Y = new JButton("Y");
        add(Y);
        Z = new JButton("Z");
        add(Z);

        HandlerClass handler = new HandlerClass();
        A.addActionListener(handler);
        B.addActionListener(handler);
        C.addActionListener(handler);
        D.addActionListener(handler);
        E.addActionListener(handler);
        F.addActionListener(handler);
        G.addActionListener(handler);
        H.addActionListener(handler);
        I.addActionListener(handler);
        J.addActionListener(handler);
        K.addActionListener(handler);
        L.addActionListener(handler);
        M.addActionListener(handler);
        N.addActionListener(handler);
        O.addActionListener(handler);
        P.addActionListener(handler);
        Q.addActionListener(handler);
        R.addActionListener(handler);
        S.addActionListener(handler);
        T.addActionListener(handler);
        U.addActionListener(handler);
        V.addActionListener(handler);
        W.addActionListener(handler);
        X.addActionListener(handler);
        Y.addActionListener(handler);
        Z.addActionListener(handler);
    }
      private class HandlerClass implements ActionListener{
  public void actionPerformed(ActionEvent event){

     Object button = event.getSource();

     if(button == A){
String text = "asaasas ";
  JTextArea textArea = new JTextArea(text);

  textArea.setColumns(30);
  textArea.setLineWrap( true );
  textArea.setWrapStyleWord( true );
  textArea.setSize(textArea.getPreferredSize().width, 1);
Font font = new Font("Verdana", Font.BOLD, 12);
textArea.setFont(font);
textArea.setForeground(Color.BLUE);
  JOptionPane.showMessageDialog(
   null, textArea, "Appomattox Court House", JOptionPane.PLAIN_MESSAGE);

     }else if(button == B){
     String text = "Duriing the last days of the Civil War, Robert E. Lee had abandoned the Confederate capital of Richmond and city of Petersburg, hoping to escape with the remnants of his Army of Northern Virginia to meet up with additional Confederate forces in North Carolina and resume fighting. Union Forces cut him off and finally the Continental army had to surrender. The Appomattox Courthouse is the locaiton where General Robert E. Lee of the Confederate Army surrendered his approximately 28,000 troops to Ulysses S. Grant and the Union Army on April 9, 1865, ending the American Civil War. ";
  JTextArea textArea = new JTextArea(text);

  textArea.setColumns(30);
  textArea.setLineWrap( true );
  textArea.setWrapStyleWord( true );
  textArea.setSize(textArea.getPreferredSize().width, 1);
Font font = new Font("Verdana", Font.BOLD, 12);
textArea.setFont(font);
textArea.setForeground(Color.BLUE);
  JOptionPane.showMessageDialog(
   null, textArea, "Appomattox Court House", JOptionPane.PLAIN_MESSAGE);
     } else if(button == C){

String text = "Duriing the last days of the Civil War, Robert E. Lee had abandoned the Confederate capital of Richmond and city of Petersburg, hoping to escape with the remnants of his Army of Northern Virginia to meet up with additional Confederate forces in North Carolina and resume fighting. Union Forces cut him off and finally the Continental army had to surrender. The Appomattox Courthouse is the locaiton where General Robert E. Lee of the Confederate Army surrendered his approximately 28,000 troops to Ulysses S. Grant and the Union Army on April 9, 1865, ending the American Civil War. ";
  JTextArea textArea = new JTextArea(text);

  textArea.setColumns(30);
  textArea.setLineWrap( true );
  textArea.setWrapStyleWord( true );
  textArea.setSize(textArea.getPreferredSize().width, 1);
Font font = new Font("Verdana", Font.BOLD, 12);
textArea.setFont(font);
textArea.setForeground(Color.BLUE);
  JOptionPane.showMessageDialog(
   null, textArea, "Appomattox Court House", JOptionPane.PLAIN_MESSAGE);     
       }

      }
}
这个

public void paint(Graphics g)
{
    // Draws the img to the BackgroundPanel.
    g.drawImage(img, 0, 0, null);
}
这从来都不是个好主意。你没有尊重油漆链。“绘制链”是一组复杂的方法,可以完成许多重要的工作

更好的方法是使用
paintComponent

protected void paintComponent(Graphics g)
{
    super.paintComponent(g);
    // Draws the img to the BackgroundPanel.
    g.drawImage(img, 0, 0, null);
}
您将遇到的另一个问题是,您没有给组件提供监视图像状态的机会。因为您使用的是
Toolkit.getDefaultToolkit().createImage(“Background.jpg”)
方法可能会使用后台线程来加载图像。您需要某种方法来告诉组件图像已完成加载,并准备好绘制

g.drawImage(img, 0, 0, this);
这将使组件监视映像的状态,并根据需要更新自身

Toolkit#createImage
可能不是加载图像的最佳选择。如果该方法无法加载图像,则不会引发异常

最好使用
ImageIO#read
。这不仅会在类无法加载映像时引发异常,还保证返回完全限定的映像(即,它将阻止,直到映像实际加载)

您没有告诉我们
Background.jpg
的位置。图像是否为嵌入式资源。如果映像只是一个文件(在应用程序的执行上下文中),那么您可以尝试加载该文件,如果它是一个嵌入式资源(包含在应用程序Jar中),那么您需要使用
类#getResource

img = ImageIO.read(getClass().getResource("/Background.jpg"));
您尚未指定
背景面板的首选尺寸。某些布局管理器将无法按您预期的方式布局此容器

public Dimension getPreferredSize() {
    return img == null ? super.getPreferredSize() : new Dimension(img.getWidth(this), img.getHeight(this));
}
另外,正如begin所提到的,不要忘记将面板添加到UI;)

用示例更新

我还注意到,您似乎在混合Swing和AWT组件,这从来都不是一个好主意,如果您可以避免,请这样做(
Panel
是AWT/重量级组件)

这个

public void paint(Graphics g)
{
    // Draws the img to the BackgroundPanel.
    g.drawImage(img, 0, 0, null);
}
这从来都不是个好主意。你没有尊重油漆链。“绘制链”是一组复杂的方法,可以完成许多重要的工作

更好的方法是使用
paintComponent

protected void paintComponent(Graphics g)
{
    super.paintComponent(g);
    // Draws the img to the BackgroundPanel.
    g.drawImage(img, 0, 0, null);
}
您将遇到的另一个问题是,您没有给组件提供监视图像状态的机会。因为您使用的是
Toolkit.getDefaultToolkit().createImage(“Background.jpg”)
方法可能会使用后台线程来加载图像。您需要某种方法来告诉组件图像已完成加载,并准备好绘制

g.drawImage(img, 0, 0, this);
这将使组件监视映像的状态,并根据需要更新自身

Toolkit#createImage
可能不是加载图像的最佳选择。如果该方法无法加载图像,则不会引发异常

最好使用
ImageIO#read
。这不仅会在类无法加载映像时引发异常,还保证返回完全限定的映像(即,它将阻止,直到映像实际加载)

您没有告诉我们
Background.jpg
的位置。图像是否为嵌入式资源。如果映像只是一个文件(在应用程序的执行上下文中),那么您可以尝试加载该文件,如果它是一个嵌入式资源(包含在应用程序Jar中),那么您需要使用
类#getResource

img = ImageIO.read(getClass().getResource("/Background.jpg"));
您尚未指定
背景面板的首选尺寸。某些布局管理器将无法按您预期的方式布局此容器

public Dimension getPreferredSize() {
    return img == null ? super.getPreferredSize() : new Dimension(img.getWidth(this), img.getHeight(this));
}
另外,正如begin所提到的,不要忘记将面板添加到UI;)

用示例更新

我还注意到,您似乎在混合Swing和AWT组件,这从来都不是一个好主意,如果您可以避免,请这样做(
Panel
是AWT/重量级组件)


我看不到你把背景面板放在你的GUI上的什么地方?什么是GUI?是JFrame吗?试试这个链接。它可以帮助你解决你的问题。是的,GUI是一个JFrame。我拿了一些我找到的源代码,复制了一些东西,使之适合我的应用程序。我应该把背景板放在哪里?我真的很挣扎。这是我的第一个java程序。我不知道如何在链接中使用该代码,并将其放在我的项目中。我试着改变所有东西的名称,但仍然有很多错误。我不知道你在GUI上的背景面板放在哪里?什么是GUI?是JFrame吗?试试这个链接。它可以帮助你解决你的问题。是的,GUI是一个JFrame。我拿了一些我找到的源代码,复制了一些东西,使之适合我的应用程序。我应该把背景板放在哪里?我真的很挣扎。这是我的第一个java程序。我不知道如何在链接中使用该代码,并将其放在我的项目中。我试着更改所有东西的名称,但仍然有很多错误。好的,我用你给我的代码更新了程序(也更新了我的第一篇文章,以便你能看到),但是我仍然收到很多错误。我确实觉得我没有把你给我的新代码放在正确的位置。我很抱歉。我应该知道这些东西,但我只是想为我的英语项目做这件事,我以前从未真正做过GUI(以前的机器人编程经验)。如何以及在哪里在我的gui类中添加面板?使用工作示例更新感谢您的写作!我真的很感激!我在发布代码时遇到了一些问题。