使用扩展JFrame的类添加背景图像

时间:2015-06-05 23:14:34

标签: java image jframe containers

我正在尝试创建一个扩展JFrame的GUI类。框架有3个带有背景图像的按钮。但到目前为止,我只得到一个白色的空白框架。

public class guiOpen extends JFrame implements ActionListener {

  Container c = getContentPane();
  JButton database = new JButton("Database");
  JButton create = new JButton("Player Creator");
  JButton edit = new JButton("Player Editor");
  JButton Csave = new JButton("Create/Save");
  JButton Esave = new JButton("Edit/Save");
  JButton back = new JButton("Back");
  JTextArea infoBio = new JTextArea(""); 
  JPanel opener =  new JPanel();
  JPanel db = new JPanel();
  JPanel newplayer = new JPanel();
  JPanel tool = new JPanel();
  JLabel images ; 

  public guiOpen() 
  {
    Font FUD = new Font("Comic Sans MS", 1, 32);
    Font FA = new Font("Comic Sans MS", 5, 40);
    Font fBtns = new Font("Comic Sans MS", 1, 25);
    Color grassC = new Color(0, 100, 0);
    Color cBtns = new Color(255, 255, 255);

    c.add(opener);
    c.add(db);
    c.add(newplayer);
    c.add(tool);

    this.setTitle("Tatical Soccer Mania");
    this.setSize(800,600);
    this.setResizable(false);
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    this.setVisible(true);

    images = new JLabel(new ImageIcon ("Tatical Soccer Mania\\TSM_LOGO.jpg")) ;
    opener.add(images);

    validate();

    database.setBounds(50, 100, 240, 120);
    database.setFont(fBtns);
    database.setOpaque(true);
    database.setBackground(grassC);
    database.setVisible(true);
    database.addActionListener(this);
    database.setForeground(cBtns);
    opener.add(database);

    create.setBounds(50, 240, 240, 120);
    create.setFont(fBtns);
    create.setOpaque(true);
    create.setBackground(grassC);
    create.setForeground(cBtns);
    create.setVisible(true);
    create.addActionListener(this);
    opener.add(create);

    edit.setForeground(cBtns);
    edit.setBounds(50, 380, 240, 120);
    edit.setFont(fBtns);
    edit.setOpaque(true);
    edit.setBackground(grassC);
    edit.setVisible(true);
    edit.addActionListener(this);
    opener.add(edit);

    opener.setVisible(true);
    db.setVisible(false);
    newplayer.setVisible(false);
    tool.setVisible(false);
  }
}

如果你能解释发生了什么,以及如何解决它将非常感激。我环顾了堆栈,没有任何帮助我解决我的问题。我刚开始编程,所以请用初学者可以理解的术语解释。

1 个答案:

答案 0 :(得分:1)

这个问题已经回答:

Java - JPanel with background image AND normal functionality

Simplest way to set image as JPanel background

在那里,您将在JPanels或GUI组件上找到几种背景图像解决方案。

现在,当您收到错误消息时,如果您想获得一些反馈来解决它,您应该提供一些有关错误的详细信息。

<强>更新

在您更新问题时,以下是我的评论:

  1. 你应该用大写字母命名你的班级。 This可能有帮助。
  2. 当您的班级正在实施ActionListener界面时,它必须实施+actionPerformed(ActionEvent):void方法。
  3. 看了你的代码之后,我看到了两个可能的解决方案(我测试了两个并且它们运行良好):

    1-使用Layout ManagerJFrame添加内容。这样,Java知道每个面板的大小,它们将是可见的。

    JPanel content = new JPanel();
    content.setLayout(new BorderLayout());
    
    content.add(opener, BorderLayout.NORTH);
    content.add(db, BorderLayout.EAST);
    content.add(newplayer, BorderLayout.CENTER);
    content.add(tool, BorderLayout.SOUTH);
    
    c.add(content);
    

    2-为每个JPanel提供一个尺寸。

    opener.setSize(800, 200);
    

    这是随机图像的外观:

    enter image description here

    现在,由于您使用的是JLabel,因此不显示背景图片,只会在JButton元素旁边添加图片。