Рисунок вместо фона 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);
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.25 из 5