Отображение изображения с помощью extendend JFrame - PullRequest
0 голосов
/ 23 января 2020

Я сделал некоторый код для своей плитки, где я рисую 2 объекта, но я не могу загрузить фон в плитку, поскольку он расширяет JFrame. Что я делаю неправильно? Я использовал буферизованное изображение для чтения изображения, сделал его подходящим для экрана любого размера, установил его как JLabel, но все еще не работает. Квадрат1 и препятствие - это графические изображения импортированных прямоугольников, один из которых играет роль игрока, а другой - соответственно.

public class BasicTwoPlayer extends JFrame implements Runnable {   

    static Square1 p1 = new Square1();
    static Square2 p2 = new Square2();
    static obstacle o1 = new obstacle();
    static Thread p1t;
    static Thread p2t;
    static Thread o1t;
    KeyADAPT a = new KeyADAPT();
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        final int widthScreen = screenSize.width;
        final int heightScreen = screenSize.height;

    public BasicTwoPlayer() {
        try {
            BufferedImage backgroundImage = ImageIO.read(new File("P://My Pictures//background1.jpg"));
            JLabel background = new JLabel(new ImageIcon(backgroundImage));
            Image scaleBackground = backgroundImage.getScaledInstance(widthScreen, heightScreen, Image.SCALE_SMOOTH);
            ImageIcon imageIcon = new ImageIcon(scaleBackground);
            setContentPane(new JLabel(imageIcon));

            addKeyListener(a);
            setSize(new Dimension(widthScreen, heightScreen));
            setUndecorated(true);
            setBackground(Color.WHITE);
            setLayout(null);
            setLocationRelativeTo(null);
            setVisible(true);
            setDefaultCloseOperation(EXIT_ON_CLOSE);


            p1t = new Thread(p1);
            p2t = new Thread(p2);
            o1t = new Thread(o1);
            p1t.start();
            p2t.start();
        } catch (IOException ex) {
            Logger.getLogger(BasicTwoPlayer.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void paint(Graphics g) {
        background.paint(g);
    }

    public void draw(Graphics g) {

        p1.draw(g);
        o1.draw(g);
        repaint();
    }

    public static void main(String[] args) {
        BasicTwoPlayer sf = new BasicTwoPlayer();
        Thread mt = new Thread(sf);
        mt.start();
        t1.start();
    }

1 Ответ

0 голосов
/ 23 января 2020

Я просто хочу получить ответ, как и все остальные: /

Вы будете удивлены, насколько я бы предпочел узнать, как отвечать на мои собственные вопросы;)

Вам нужно будет понять:

Не мешало бы понять:

"Как добавить фоновое изображение" ...

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagLayout;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

class Main {

    public static void main(String[] args) {
        new Main();
    }

    public Main() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.setContentPane(new BackgroundPane());

                frame.add(new OverlayPane());

                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class OverlayPane extends JPanel {

        public OverlayPane() {
            setOpaque(false);
            setLayout(new GridBagLayout());
            JLabel label = new JLabel("You'd be suprised who far a little knowledge will take you");
            label.setForeground(Color.WHITE);
            add(label);
        }

    }

    public class BackgroundPane extends JPanel {

        private BufferedImage backgroundImage;

        public BackgroundPane() {
            setLayout(new BorderLayout());
            try {
                backgroundImage = ImageIO.read(BackgroundPane.class.getResource("background.jpg"));
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }

        @Override
        public Dimension getPreferredSize() {
            return backgroundImage == null ? new Dimension(200, 200) : new Dimension(backgroundImage.getWidth(), backgroundImage.getHeight());
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            if (backgroundImage == null) { return; }

            int x = (getWidth() - backgroundImage.getWidth()) / 2;
            int y = (getHeight() - backgroundImage.getHeight()) / 2;

            Graphics2D g2d = (Graphics2D) g.create();
            g2d.drawImage(backgroundImage, x, y, this);
            g2d.dispose();
        }

    }

}

Вы хотите узнать о:

в зависимости от вас направление этого и все ваши другие вопросы на сегодняшний день. Они помогут вам избежать распространенных ошибок.

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

...