Я пытаюсь создать приложение с помощью Java Swing, однако при попытке добавить фон на страницу входа изображение не отображается. Он находится там и перемещает другие JComponents при добавлении макета в корневую JPanel страницы, он просто не отображает изображение. Я также пробовал JavaFX, но, похоже, у меня та же проблема.
Я также пытался выяснить, есть ли у кого-нибудь такая же проблема, но не смог найти ничего полезного. Потратив целый день на поиски решения, я решил задать вопрос здесь.
Информация о компьютере:
Это информация о моем компьютере, если в целом это проблема DE
Код: Выделить всё
-` mmt007@mmt007desktop
.o+` --------------------
`ooo/ OS: Arch Linux x86_64
`+oooo: Host: B75M-D3P
`+oooooo: Kernel: Linux 6.17.6-arch1-1
-+oooooo+: Uptime: 21 mins
`/:-:++oooo+: Packages: 1022 (pacman), 26 (flatpak)
`/++++/+++++++: Shell: bash 5.3.3
`/++++++++++++++: Display (WX942): 1440x900 in 19", 60 Hz [External]
`/+++ooooooooooooo/` WM: Hyprland 0.51.1 (Wayland)
./ooosssso++osssssso+` Theme: Adwaita-dark [GTK2/3/4]
.oossssso-````/ossssss+` Icons: Adwaita [GTK2/3/4]
-osssssso. :ssssssso. Font: Noto Sans (12pt) [Qt], Adwaita Sans (11pt) [GTK2/3/4]
:osssssss/ osssso+++. Cursor: default (24px)
/ossssssss/ +ssssooo/- Terminal: kitty 0.43.1
`/ossssso+/:- -:/+osssso+- Terminal Font: NimbusMonoPS-Regular (11pt)
`+sso+:-` `.-/+oso: CPU: Intel(R) Core(TM) i5-3570 (4) @ 3.80 GHz
`++:. `-/+/ GPU: Intel Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller @ 1.15 GHz [Integrated]
.` `/ Memory: 3.73 GiB / 7.62 GiB (49%)
Swap: 0 B / 4.00 GiB (0%)
Disk (/): 82.46 GiB / 214.08 GiB (39%) - ext4
Locale: en_US.UTF-8
И вот код, который вызывает у меня проблемы:
Класс страницы входа:
Код: Выделить всё
public class LoginPage extends Page {
protected void init() {
root.setLayout(new FlowLayout());
JImageLabel background = new JImageLabel(new ImageIcon("assets/backgrounds/login_background.png"));
background.setSize(400,400);
background.setPreferredSize(new Dimension(800,100));
root.add(background);
root.setBackground(Color.BLACK);
}
}
Код: Выделить всё
public abstract class Page {
protected final JPanel root = new JPanel();
public Page() { init(); }
protected abstract void init();
}
Код: Выделить всё
public class JImageLabel extends JLabel {
private ImageIcon image;
public JImageLabel(ImageIcon image)
{super(image);}
}
Код: Выделить всё
public class Window extends JFrame {
private static final Window INSTANCE = new Window("Disbot");
private static final Dimension DEFAULT_WINDOW_SIZE = new Dimension(1280,720);
private static Page page = null;
private Window(String title) throws HeadlessException
{super(title);}
public static void init(){
INSTANCE.setDefaultCloseOperation(EXIT_ON_CLOSE);
INSTANCE.setSize(DEFAULT_WINDOW_SIZE);
INSTANCE.setVisible(true);
}
public static void setPage(Page new_page){
page = new_page;
INSTANCE.setContentPane(page.root);
INSTANCE.repaint();
}
}
Код: Выделить всё
public class Main {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
Window.init();
Window.setPage(new LoginPage());
});
}
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... ible-image
Мобильная версия