Рисунок вместо фона JFrame или JPanel - Java
Формулировка задачи:
Я хотел картинку вместо фона для лаунчера -_-
Вот что получилось сделать без ошибок. Результат - ни намека на картинку... голый серый фон.
BgPanel = new JPanel(new BorderLayout());
//BgPanel.setBackground(Library.lightOrange);
BgPanel.add(startButton);
BgPanel.add(panelStr);
BgPanel.add(panelStr2);
BgPanel.add(horizontalBox);
try
{
Image im = ImageIO.read(new File("res/picto/Aurora.png"));
Graphics g = im.getGraphics();
g.drawImage(im, MAXIMIZED_BOTH, MAXIMIZED_HORIZ, BgPanel);
}
catch (IOException e)
{
e.printStackTrace();
}
this.add(BgPanel);
Собственно, я мог бы конечно посмотреть готовые примеры, передрать из инета у умников разных, что уже все понимают, но пытаюсь понять главное - чем вообще отличаются заставка картинкой через Image и рисовка той же картинки через Graphics g?
Оба стиля применяются обычно или есть другой, для частого, простого юзанья?
Я промучался весь день, так и не найдя решения. Даже взятые готовые примеры из инета у меня не работают.
Повторяю вопрос:
какой шаблон у стандартного механизма импорта в фрейм рисунка извне?
Решение задачи: «Рисунок вместо фона JFrame или JPanel»
textual
Листинг программы
package main;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Launcher extends JPanel {
private JButton singlePlayerButton;
private JButton multiPlayerButton;
private JButton rulesButton;
private JButton changeLanguageButton;
private JButton exitButton;
protected JLabel logoLabel;
protected eHandler handler;
private Image backgroundImage;
Launcher() {
backgroundImage = new ImageIcon(getClass().getClassLoader().getResource("background.png")).getImage();
setOpaque(true);
setBackground(Color.DARK_GRAY);
Font font = MyFont.getFont();
handler = new eHandler();
logoLabel = new JLabel("Black Jack");
logoLabel.setFocusable(false);
logoLabel.setFont(new Font("Jokerman", Font.PLAIN, 35));
singlePlayerButton = new JButton();
singlePlayerButton.setFont(font);
singlePlayerButton.setFocusable(false);
singlePlayerButton.addActionListener(handler);
multiPlayerButton = new JButton();
multiPlayerButton.setFont(font);
multiPlayerButton.setFocusable(false);
multiPlayerButton.addActionListener(handler);
multiPlayerButton.setEnabled(false);
rulesButton = new JButton();
rulesButton.setFont(font);
rulesButton.setFocusable(false);
rulesButton.addActionListener(handler);
changeLanguageButton = new JButton();
changeLanguageButton.setFont(font);
changeLanguageButton.setFocusable(false);
changeLanguageButton.addActionListener(handler);
exitButton = new JButton();
exitButton.setFont(font);
exitButton.setFocusable(false);
exitButton.addActionListener(handler);
setText();
setLayout(new GridBagLayout());
add(logoLabel, new GridBagConstraints(0, 0, 1, 1, 1, 1,
GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(200, 200, 5, 200), 0, 0));
add(singlePlayerButton, new GridBagConstraints(0, 1, 1, 1, 1, 1,
GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(5, 200, 5, 200), 0, 0));
add(multiPlayerButton, new GridBagConstraints(0, 2, 1, 1, 1, 1,
GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(5, 200, 5, 200), 0, 0));
add(rulesButton, new GridBagConstraints(0, 3, 1, 1, 1, 1,
GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(5, 200, 5, 200), 0, 0));
add(changeLanguageButton, new GridBagConstraints(0, 4, 1, 1, 1, 1,
GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(5, 200, 5, 200), 0, 0));
add(exitButton, new GridBagConstraints(0, 5, 1, 1, 1, 1,
GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(5, 200, 200, 200), 0, 0));
}
class eHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (e.getSource() == singlePlayerButton) {
Main.changePanel(new SinglePlayer());
} else if (e.getSource() == multiPlayerButton) {
System.out.println("Pressed multiplayer button");
} else if (e.getSource() == rulesButton) {
System.out.println("Pressed rules button");
} else if (e.getSource() == changeLanguageButton) {
GlobalLanguage.changeLanguage();
setText();
} else if (e.getSource() == exitButton) {
System.exit(0);
}
}
}
public void paintComponent(Graphics g) {
g.drawImage(backgroundImage, 0, 0, null);
}
public void setText() {
singlePlayerButton.setText(GlobalLanguage.getSinglePlayerButton());
multiPlayerButton.setText(GlobalLanguage.getMultiPlayerButton());
rulesButton.setText(GlobalLanguage.getRulesButton());
changeLanguageButton.setText(GlobalLanguage.getChangeLanguageButton());
exitButton.setText(GlobalLanguage.getExitButton());
String inProgress = GlobalLanguage.getInProgressString();
multiPlayerButton.setToolTipText(inProgress);
}
}