【问题标题】:JFrame Background Image does not work [duplicate]JFrame背景图像不起作用[重复]
【发布时间】:2017-04-29 15:04:05
【问题描述】:

我搜索了一种将图像添加为我的 JFrame 的 Bakground 的方法。 我为此找到了一些问题并尝试了几种解决方案,但我的图像不会显示,我不知道出了什么问题(我是一个菜鸟 btw xd) 我确实看到了其他问题,但他们没有帮助我,我非常努力,但找不到我的错!所以请(将我的帖子标记为重复的人)。

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

【问题讨论】:

标签: java image swing background jframe


【解决方案1】:

扩展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

【讨论】:

  • 它似乎不知道 setComponentPane,我收到此错误:线程“main”java.lang.Error 中的异常:未解决的编译问题:方法 setComponentPane(JLabel) 未定义prognose 的类型 prognose.(prognose.java:36) 在 prognose.main(prognose.java:95)
  • 您是否已将 Frame 扩展为 JFrame
  • 是的,我有 ://
  • 现在我得到了背景,并且显示了我的按钮、文本字段等,但它们不在它们所属的位置,它们堆叠在区域的上侧
猜你喜欢
  • 1970-01-01
  • 2018-03-22
  • 2015-07-04
  • 2018-03-25
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
相关资源
最近更新 更多