Как поставить изображение на заднем плане окна - PullRequest
1 голос
/ 11 мая 2011

Я почти закончил с моим Java-кодом палача. Я хочу добавить картинку в фоновом режиме. (Nightsky.png) Как мне сделать это в методе рисования графики? Я создал imageicon в начале.

public HangmanRevised() {
    setSize(600,400);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setLayout(new FlowLayout());

    ImageIcon background = new ImageIcon("nightsky.png");
    Letter = new TextField();
    JLabel label = new JLabel("pick a Letter");
    button = new Button("Enter");
    add(label);
    add(button);
    add(Letter);

    button.addActionListener(this);

    createGame(); 
} 

public void paint(Graphics g) {
    super.paint(g);
    g.drawImage(background, 0, 156, Color.green, button);
}

Ответы [ 4 ]

1 голос
/ 11 мая 2011

Если вы рисуете изображение в его реальном размере, вам не нужно делать какую-либо пользовательскую раскраску.

Как уже было предложено, вы просто добавляете Icon в JLabel и добавляете метку в рамку(или панель).Затем, если вы хотите, чтобы изображение появилось в соответствующей позиции на ярлыке, вы просто добавляете EmptyBorder к ярлыку.

0 голосов
/ 11 мая 2011

Вы также можете создать любое понравившееся вам изображение на лету , используя 2D Graphics, как предложено в RotatableImage.

0 голосов
/ 11 мая 2011

Переопределив JPanel, вы можете повторить paintComponent () для рисования изображения, и сам JPanel должен иметь функцию рисования для своих дочерних элементов (хотя я не тестировал эту функцию).

http://www.java2s.com/Code/Java/Swing-JFC/Panelwithbackgroundimage.htm

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class ImageTest {

  public static void main(String[] args) {
    ImagePanel panel = new ImagePanel(new ImageIcon("images/background.png").getImage());

    JFrame frame = new JFrame();
    frame.getContentPane().add(panel);
    frame.pack();
    frame.setVisible(true);
  }
}

class ImagePanel extends JPanel {

  private Image img;

  public ImagePanel(String img) {
    this(new ImageIcon(img).getImage());
  }

  public ImagePanel(Image img) {
    this.img = img;
    Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
    setPreferredSize(size);
    setMinimumSize(size);
    setMaximumSize(size);
    setSize(size);
    setLayout(null);
  }

  public void paintComponent(Graphics g) {
    g.drawImage(img, 0, 0, null);
  }

}
0 голосов
/ 11 мая 2011

Вам нужно где-то поместить фон, т.е.

//add the following in the HangmanRevised() constructor (?)

button.addActionListener(this);

//To add
ImagePanel panel = new ImagePanel(background.getImage());
JFrame frame = new JFrame();
frame.getContentPane().add(panel);
frame.setSize(800, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
add(frame); 
//end...

createGame(); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...