После установки Bground пропала кнопка

134
25 марта 2022, 00:20

Пропала кнопка после установки Bground. Лэйблы пропали тоже (При загрузке картинки из проекта src\UI\Bground.jpg пропадает только кнопка) Догадываюсь что кнопка просто скрылась за картинкой которая инициализируется как Bground
Вот код:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.io.IOException;
import java.net.URL;
public class Test {
    public static class HintTest extends JFrame {
        static JTextField input1 = new HintTextField("X1");
        static JTextField input2 = new HintTextField("X2");
        private JButton button = new JButton("Кнопка");

        HintTest() throws IOException {
            super("Test");
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            Container container = this.getContentPane();
            Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
            setSize(dim.width / 2 - this.getSize().width / 2, dim.height / 2 - this.getSize().height / 2);
            setLocation(dim.width / 2 - this.getSize().width / 2, dim.height / 2 - this.getSize().height / 2);
            input1.setBounds(dim.width / 2 - this.getSize().width / 2 - 200, dim.height / 2 - 50 - this.getSize().height / 2 - 100, 100, 20);
            input2.setBounds(dim.width / 2 - this.getSize().width / 2 - 200, dim.height / 2 - this.getSize().height / 2 - 100, 100, 20);
            URL url = new URL("https://medialeaks.ru/wp-content/uploads/2020/01/1465221347128633057-600x338.jpg");
            JLabel background = new JLabel(new ImageIcon(url));
            add(background);
            setContentPane(new JLabel(new ImageIcon(url)));
            ImageIcon ii = new ImageIcon(url);
            ii.getImage();
            container.add(input1);
            container.add(input2);
            container.add(button);
            JPanel panel = new JPanel();
            panel.setLayout(null);
            add(panel);
            setVisible(true);
            button.setBounds(dim.width / 2 - this.getSize().width / 2 - 200, dim.height / 2 - this.getSize().height / 2, 100, 40);
            button.addActionListener(new ButtonEventListener());
        }


        class ButtonEventListener implements ActionListener {
            public void actionPerformed(ActionEvent e) {
                HintTest.input1.setText("");
                HintTest.input2.setText("");
            }
        }
        static class HintTextField extends JTextField implements FocusListener {
            private final String hint;
            private boolean showingHint;

            private HintTextField(final String hint) {
                super(hint);
                this.hint = hint;
                this.showingHint = true;
                super.addFocusListener(this);
            }
            @Override
            public void focusGained(FocusEvent e) {
                if (this.getText().isEmpty()) {
                    super.setText("");
                    showingHint = false;
                }
            }
            @Override
            public void focusLost(FocusEvent e) {
                if (this.getText().isEmpty()) {
                    super.setText(hint);
                    showingHint = true;
                }
            }
            @Override
            public String getText() {
                return showingHint ? "" : super.getText();
            }
            public static class LayeredPaneDemo extends JPanel {
                private LayeredPaneDemo() {
                    setLayout(new BorderLayout());
                    JLayeredPane layeredPane = new JLayeredPane();
                    layeredPane.setPreferredSize(new Dimension(300, 310));
                    Point origin = new Point(10, 20);
                    String[] layerStrings = {"Red", "Green", "Blue"};
                    Color[] layerColors = {Color.red, Color.green, Color.blue};
                    for (int i = 0; i < layerStrings.length; i++) {
                        JLabel label = createColoredLabel(layerStrings[i], layerColors[i], origin);
                        layeredPane.add(label, new Integer(i));
                        origin.x += 35;
                        origin.y += 35;
                    }
                    add(layeredPane, BorderLayout.CENTER);
                }
                private JLabel createColoredLabel(String text, Color color, Point origin) {
                    JLabel label = new JLabel(text);
                    label.setVerticalAlignment(JLabel.TOP);
                    label.setOpaque(true);
                    label.setBackground(color);
                    label.setForeground(Color.black);
                    label.setBounds(origin.x, origin.y, 140, 140);
                    return label;
                }
                public static void main(String[] args) {
                    SwingUtilities.invokeLater(() -> {
                        JFrame frame = new JFrame("LayeredPaneDemo");
                        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
                        JComponent newContentPane = new LayeredPaneDemo();
                        newContentPane.setOpaque(true);
                        frame.setContentPane(newContentPane);
                        frame.pack();
                        frame.setVisible(true);
                        HintTest app = null;
                        try {
                            app = new HintTest();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        app.setVisible(true);
                    });
                }
            }
        }
    }
}  

При его запуске откроется два окна первое это моя программа с картинкой второе окно это возможный способ решения моей проблемы (наложение слоёв в java)

Answer 1

Сделал так:
1)Сделал загрузку через url
2)Указал что бы картинка была загружена в Temp
3)Сделал что бы после закрытия файл удалялся

package Test;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.URL;
class Test {
    static class HintTest extends JFrame {
        static JTextField input1 = new HintTextField("X1");
        static JTextField input2 = new HintTextField("X2");
        private JButton button = new JButton("Кнопка");

        HintTest() throws IOException {
            super("Test");
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
            setSize(dim.width / 2 - this.getSize().width / 2, dim.height / 2 - this.getSize().height / 2);
            setLocation(dim.width / 2 - this.getSize().width / 2, dim.height / 2 - this.getSize().height / 2);
            input1.setBounds(dim.width / 2 - this.getSize().width / 2 - 200, dim.height / 2 - 50 - this.getSize().height / 2 - 100, 100, 20);
            input2.setBounds(dim.width / 2 - this.getSize().width / 2 - 200, dim.height / 2 - this.getSize().height / 2 - 100, 100, 20);
            URL url = new URL( "https://miro.medium.com/max/2836/1*ROagAxRi9uL-jeFLy5wQEQ.png" ); //указывается url к картинке
            BufferedImage image = ImageIO.read(url);
            String dir = System.getProperty("user.home");
            File f1 = new File(dir + "\\Appdata\\Local\\Temp\\Bground"); //указывается путь к файлу куда он будет сохранён
            ImageIO.write(image,"png",f1);
            ImageIO.write(image,"jpg",f1);
            Thread.onSpinWait();
            JLabel background = new JLabel(new ImageIcon(dir + "\\Appdata\\Local\\Temp\\Bground"));
            add(background);
            setContentPane(new JLabel(new ImageIcon(dir + "\\Appdata\\Local\\Temp\\Bground")));
            ImageIcon ii = new ImageIcon(dir + "\\Appdata\\Local\\Temp\\Bground");
            ii.getImage();
            final boolean delete = f1.delete();
            if(!delete) {
                f1.delete();
            }
            Container container = this.getContentPane();
            container.add(input1);
            container.add(input2);
            container.add(button);
            JPanel panel = new JPanel();
            panel.setLayout(null);
            add(panel);
            setVisible(true);
            button.setBounds(dim.width / 2 - this.getSize().width / 2 - 200, dim.height / 2 - this.getSize().height / 2, 100, 40);
            button.addActionListener(new ButtonEventListener());
            }
        }
    }

     class ButtonEventListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            Test.HintTest.input1.setText("");
            Test.HintTest.input2.setText("");
        }
    }
    class HintTextField extends JTextField implements FocusListener {
        private final String hint;
        private boolean showingHint;

        HintTextField(final String hint) {
            super(hint);
            this.hint = hint;
            this.showingHint = true;
            super.addFocusListener(this);
        }
        @Override
        public void focusGained(FocusEvent e) {
            if (this.getText().isEmpty()) {
                super.setText("");
                showingHint = false;
            }
        }
        @Override
        public void focusLost(FocusEvent e) {
            if (this.getText().isEmpty()) {
                super.setText(hint);
                showingHint = true;
            }
        }
        @Override
        public String getText() {
            return showingHint ? "" : super.getText();
        }
        public static void main(String[] args) {
            Test.HintTest app = null;
            try {
                app = new Test.HintTest();
            } catch (IOException e) {
                e.printStackTrace();
            }
            assert app != null;
            app.setVisible(true);
        }
    }
READ ALSO
не отображаются иконочные шрифты

не отображаются иконочные шрифты

у меня в файлеhtaccess вот такая запись:

83
нужна помощь с регуляркой [list]

нужна помощь с регуляркой [list]

пробую написать свой парсер для замещения на тегии вот проблема

83
Мини скрипт новостной ленты на PHP

Мини скрипт новостной ленты на PHP

Решила создать мини скрипт новостной ленты на phpВот содержимое файла news

126