Как перекрывать JPanel (фон) и JTextField - PullRequest
0 голосов
/ 21 июня 2019

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

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

        //creates the frame with a title as a parameter
        JFrame frame = new JFrame("Sign In Sheet");
        //sets the size
        frame.setSize(1000, 556);
        //makes it so the application stops running when you close it
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //puts it in the center of the screen
        frame.setLocationRelativeTo(null);
        //makes it so you can't resize it
        frame.setResizable(false);

        //setting the background by looking for the image
        try{
            frame.setContentPane(new JLabel(new ImageIcon(ImageIO.read(new File("C:/Users/Gabriel R. Warner/Desktop/clouds.png")))));
        }catch(IOException e){
            //and prints an error message if it's not found
            System.out.println("well it didn't work");
        }

        //adding text fields with names apropriate to function
        JTextField name1 = new JTextField();
        name1.setPreferredSize(new Dimension(200, 15));
        name1.setBackground(Color.WHITE);
        frame.add(name1);

        //makes frame visible
        frame.setVisible(true);

Проще говоря, текстовое поле не будет отображаться с фономи все результаты предлагают ответы только для одного текстового поля

1 Ответ

1 голос
/ 21 июня 2019

Проблема в этой строке: frame.setContentPane(new JLabel(new ImageIcon(ImageIO.read(new File("C:/Users/Gabriel R. Warner/Desktop/clouds.png")))));

В этой строке вы устанавливаете JLabel в качестве панели содержимого вашего JFrame. Затем вы frame.add(name1); Итак, вы добавляете JTextField в JLabel ... Ну, это не так, верно?

Ответом будет создание нового JPanel, добавление фонового изображения на эту панель, установка панели в качестве панели содержимого фрейма и, наконец, добавление текстового поля на панель / панель содержимого.

Пример:

@SuppressWarnings("serial")
public class FrameWithBackgroundImage extends JFrame {

    public FrameWithBackgroundImage() {
        super("Sign In Sheet");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);

        try {
            Image bgImage = loadBackgroundImage();
            JPanel backgroundImagePanel = new JPanel() {

                @Override
                protected void paintComponent(Graphics g) {
                    super.paintComponent(g);
                    g.drawImage(bgImage, 0, 0, null);
                }
            };

            setContentPane(backgroundImagePanel);
        } catch (IOException e) {
            e.printStackTrace();
        }

        JTextField textField = new JTextField(10);

        add(textField);

    }

    private Image loadBackgroundImage() throws IOException {
        File desktop = new File(System.getProperty("user.home"), "Desktop");
        File image = new File(desktop, "img.jpg");
        return ImageIO.read(image);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            new FrameWithBackgroundImage().setVisible(true);
        });
    }
}

Предварительный просмотр: enter image description here Стоит прочитать вопрос: Простейший способ установить изображение в качестве фона JPanel

...