Не могу добавить ImageIcon в JFrame - PullRequest
0 голосов
/ 12 января 2019

Я пытался добавить изображение к JFrame, но я не могу этого сделать.

Я просмотрел онлайн-уроки и другие подобные вопросы, но, похоже, ничего не работает.

ImageIcon wiz = new ImageIcon("wizard.png");
ImageIcon assassin = new ImageIcon("assassin.png");

JFrame frame = new JFrame("Select");
frame.setBounds(50, 50,1000, 1000);
JButton w = new JButton("Wizard");
JButton a = new JButton("Assasin");

JFrame f = new JFrame("Image");

JLabel img1 = new JLabel(wiz);

frame.setLayout(null);
f.setLayout(null);
f.setIconImage(wiz.getImage());

w.setBounds(30,380,100,60);
frame.add(w);

a.setBounds(200, 380, 100, 60);
frame.add(a);

f.setVisible(true);
frame.setVisible(true);

1 Ответ

0 голосов
/ 12 января 2019

Я думаю, что основная проблема в вашей программе состоит в том, что вы пытаетесь установить абсолютное позиционирование компонентов (например, JLabel), используя setLayout(null) и setBounds() на компонентах.

В Swing правильный способ размещения компонентов - использование менеджеров компоновки. Посмотрите этот урок для деталей о том, как использовать менеджеры по расположению: https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html

В качестве примера программы я успешно установил изображения (как значок JFrame, так и внутри области содержимого JFrame) в следующей программе. Попробуйте и посмотрите.

Это скриншот моего образца JFrame.

enter image description here

import javax.swing.*;

public class FrameWithIcon
{
  public static void main(String[] args)
  {
    JFrame f = new JFrame();
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    //Since I'm not setting a layout manager to contentPane, it's default (BorderLayout) is used

    //This sets the image in JFrame's content area
    f.getContentPane().add(new JLabel(new ImageIcon("star.png")));

    //This sets JFrame's icon (shown in top left corner of JFrame)
    f.setIconImage(new ImageIcon("star.png").getImage());

    f.setBounds(300, 200, 400, 300);
    f.setVisible(true);
  }
}
...