2016-12-14 84 views
-1

我搜索了一种将图片添加为我的JFrame的Bakground的方式。 我发现了一些问题,并尝试了几个解决方案,但我的图像不会出现,我不知道什么是错的(我是一个noob btw xd) 我看到其他问题,但他们没有帮助我,我努力尝试,但找不到我的错!所以请(人类将我的帖子标记为重复)。JFrame背景图片不起作用

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.event.*; 


public class prognose extends Frame { 
    // Anfang Attribute 
    private JTextField spendenbetrag = new JTextField(); 
    private JTextField streamzeit = new JTextField(); 
    private JLabel sBetragL = new JLabel(); 
    private JLabel sZeitL = new JLabel(); 
    private JButton prognosebutton = new JButton(); 
    private ImageIcon prognosebuttonIcon = new ImageIcon("C:\\Users\\user\\Documents\\Programmieren\\Workspace\\images\\Button.png"); 
    private JTextField ergebnis = new JTextField(); 
    // Ende Attribute 

    public prognose() { 
    // Frame-Initialisierung 
    super(); 
    addWindowListener(new WindowAdapter() { 
     public void windowClosing(WindowEvent evt) { dispose(); } 
    }); 
    int frameWidth = 455; 
    int frameHeight = 580; 
    setSize(frameWidth, frameHeight); 
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); 
    int x = (d.width - getSize().width)/2; 
    int y = (d.height - getSize().height)/2; 
    setLocation(x, y); 
    setTitle("Loot für die Welt"); 
    setResizable(false); 
    Panel cp = new Panel(null); 
    add(cp); 

    // Anfang Komponenten 

    spendenbetrag.setText(""); 
    cp.add(spendenbetrag); 
    streamzeit.setText(""); 
    cp.add(streamzeit); 
    sBetragL.setText("Aktueller Spendenbetrag"); 
    cp.add(sBetragL); 
    streamzeit.setBounds(152, 184, 145, 25); 
    spendenbetrag.setBounds(152, 112, 145, 25); 
    sBetragL.setBounds(152, 80, 145, 25); 
    sZeitL.setBounds(152, 152, 155, 25); 
    sZeitL.setText("Aktuelle Streamzeit"); 
    cp.add(sZeitL); 
    prognosebutton.setBounds(184, 224, 80, 280); 
    prognosebutton.setText(""); 
    prognosebutton.setMargin(new Insets(2, 2, 2, 2)); 
    prognosebutton.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent evt) { 
     prognosebutton_ActionPerformed(evt); 
     } 
    }); 
    prognosebutton.setIcon(prognosebuttonIcon); 
    prognosebutton.setBorderPainted(false); 
    prognosebutton.setBackground(Color.WHITE); 
    prognosebutton.setBorder(BorderFactory.createEtchedBorder(0, Color.DARK_GRAY, new Color(0xC0C0C0))); 
    prognosebutton.setIconTextGap(0); 
    cp.setBackground(Color.WHITE); 
    setUndecorated(false); 
    cp.add(prognosebutton); 
    ergebnis.setBounds(152, 512, 145, 25); 
    ergebnis.setText(""); 
    ergebnis.setEditable(false); 
    cp.add(ergebnis); 
    // Ende Komponenten 

    setVisible(true); 
    setLayout(new BorderLayout()); 
    setSize(455,580); 
    setVisible(true); 
    JLabel background=new JLabel(new ImageIcon("C:\\Users\\user\\Documents\\Programmieren\\Workspace\\images\\Background.png")); 

    add(background); 

    background.setLayout(new FlowLayout()); 


    } // end of public prognose 

    // Anfang Methoden 

    public static void main(String[] args) { 
    new prognose(); 
    } // end of main 

    public void prognosebutton_ActionPerformed(ActionEvent evt) { 
    // TODO hier Quelltext einfügen 
    String a; 
    String b; 
    a = spendenbetrag.getText(); 
    b = streamzeit.getText(); 
    double d; 
    double e = Double.parseDouble(a); 
    double f = Double.parseDouble(b); 
    d = e*(60/f)*48; 
    d = ((double)((int)(d*100)))/100; 
    String g = String.valueOf(d); 
    ergebnis.setText(g); 
    } // end of prognosebutton_ActionPerformed 

    // Ende Methoden 
} // end of class prognose 
+1

http://stackoverflow.com/questions/18777893/jframe-background-image –

+0

是啊,我已经看到了一个和我都试过的方法,但都没有工作 – Veronique

回答

0

延长JFrame代替Frame,使用setComponentPane设置底色,移动背景标签上的声明到代码的顶部。将所有组件添加到该标签。

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.event.*; 


public class prognose extends JFrame { 
    // Anfang Attribute 
    private JTextField spendenbetrag = new JTextField(); 
    private JTextField streamzeit = new JTextField(); 
    private JLabel sBetragL = new JLabel(); 
    private JLabel sZeitL = new JLabel(); 
    private JButton prognosebutton = new JButton(); 
    private ImageIcon prognosebuttonIcon = new ImageIcon("C:\\test\\rak.png"); 
    private JTextField ergebnis = new JTextField(); 
    // Ende Attribute 

    public prognose() { 
    // Frame-Initialisierung 
    super(); 
    addWindowListener(new WindowAdapter() { 
     public void windowClosing(WindowEvent evt) { dispose(); } 
    }); 
    int frameWidth = 455; 
    int frameHeight = 580; 
    setSize(frameWidth, frameHeight); 
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); 
    int x = (d.width - getSize().width)/2; 
    int y = (d.height - getSize().height)/2; 
    setLocation(x, y); 
    setTitle("Loot für die Welt"); 
    setResizable(false); 
    JLabel background=new JLabel(new ImageIcon("C:\\test\\rak.png")); 

    setContentPane(background); 
    background.setLayout(new FlowLayout()); 
    Panel cp = new Panel(null); 
    background.add(cp); 

    // Anfang Komponenten 

    spendenbetrag.setText(""); 
    background.add(spendenbetrag); 
    streamzeit.setText(""); 
    background.add(streamzeit); 
    sBetragL.setText("Aktueller Spendenbetrag"); 
    background.add(sBetragL); 
    streamzeit.setBounds(152, 184, 145, 25); 
    spendenbetrag.setBounds(152, 112, 145, 25); 
    sBetragL.setBounds(152, 80, 145, 25); 
    sZeitL.setBounds(152, 152, 155, 25); 
    sZeitL.setText("Aktuelle Streamzeit"); 
    background.add(sZeitL); 
    prognosebutton.setBounds(184, 224, 80, 280); 
    prognosebutton.setText(""); 
    prognosebutton.setMargin(new Insets(2, 2, 2, 2)); 
    prognosebutton.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent evt) { 
     prognosebutton_ActionPerformed(evt); 
     } 
    }); 
    prognosebutton.setIcon(prognosebuttonIcon); 
    prognosebutton.setBorderPainted(false); 
    prognosebutton.setBackground(Color.WHITE); 
    prognosebutton.setBorder(BorderFactory.createEtchedBorder(0, Color.DARK_GRAY, new Color(0xC0C0C0))); 
    prognosebutton.setIconTextGap(0); 
    background.setBackground(Color.WHITE); 
    setUndecorated(false); 
    background.add(prognosebutton); 
    ergebnis.setBounds(152, 512, 145, 25); 
    ergebnis.setText(""); 
    ergebnis.setEditable(false); 
    background.add(ergebnis); 
    // Ende Komponenten 

    setVisible(true); 
    setLayout(new BorderLayout()); 
    setSize(455,580); 
    setVisible(true); 




    } // end of public prognose 

    // Anfang Methoden 

    public static void main(String[] args) { 
    new prognose(); 
    } // end of main 

    public void prognosebutton_ActionPerformed(ActionEvent evt) { 
    // TODO hier Quelltext einfügen 
    String a; 
    String b; 
    a = spendenbetrag.getText(); 
    b = streamzeit.getText(); 
    double d; 
    double e = Double.parseDouble(a); 
    double f = Double.parseDouble(b); 
    d = e*(60/f)*48; 
    d = ((double)((int)(d*100)))/100; 
    String g = String.valueOf(d); 
    ergebnis.setText(g); 
    } // end of prognosebutton_ActionPerformed 

    // Ende Methoden 
} // end of class prognose 
+0

现在看来似乎不知道setComponentPane,我得到这个错误:*异常在线程“main”java.lang.Error:未解决的编译问题: \t在预测方式setComponentPane(JLabel)未定义类型预测 \t。 (prognose.java:36) \t在prognose.main(prognose.java:95)* – Veronique

+0

是否更换延伸的框体,以JFrame的 –

+0

是的,我有:// – Veronique