Есть JPanel на которой расположена кнопка и другая дочерняя панель закрашенная красным цветом. Дочерняя панель должна отрисовываться после отрисовки кнопки и закрывать её. Но по каким-то причинам кнопка всегда отрисовывается поверх дочерней панели. Я пробовал это исправить несколькими способами - они указаны в исходном коде который я привожу ниже:
public class Main {
public static void main(String[] args) {
JFrame window = new JFrame();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.add(new MyPanel());
window.pack();
window.setResizable(false);
window.setLocationRelativeTo(null);
window.setVisible(true);
}
private static class MyPanel extends JPanel {
private JButton button;
private JPanel childPanel;
private MyPanel() {
setLayout(null);
setPreferredSize(new Dimension(500, 500));
button = new JButton("button");
button.setBounds(100, 100, 100, 40);
childPanel = new JPanel();
childPanel.setBounds(50, 50, 300, 300);
childPanel.setBackground(Color.RED);
/*не работает
add(button);
add(childPanel, 0);*/
/*Пробуем добавить сперва childPanel, а потом button.
Не работает.
add(childPanel);
add(button);*/
/*Пробуем добавить сперва button, а потом childPanel.
Не работает.
add(button);
add(childPanel);*/
}
}
}
Проблему удалось решить следующим образом: в классе наследнике JPanel переопределяем метод isOptimizedDrawingEnabled так, чтобы он всегда возвращал false. Тогда можно применять setComponentZOrder или add(Component comp, int index) и они будут работать как надо.
import javax.swing.*;
import java.awt.*;
public class Main {
public static void main(String[] args) {
JFrame window = new JFrame();
window.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
window.pack();
window.setResizable(false);
window.setLocationRelativeTo(null);
window.setBounds(100, 100, 500, 500);
window.add(new MyPanel());
window.setVisible(true);
}
private static class MyPanel extends JPanel {
private JButton button;
private JPanel childPanel;
MyPanel() {
setLayout(null);
setPreferredSize(new Dimension(500, 500));
button = new JButton("button");
button.setBounds(10, 100, 100, 40);
childPanel = new JPanel();
childPanel.setBounds(50, 50, 300, 300);
childPanel.setBackground(Color.RED);
add(button);
add(childPanel, 0);
}
@Override
public boolean isOptimizedDrawingEnabled() {
return false;
}
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Проблема в том что данные по какой-то причине не отображаются и таблица с помощью цикла не заполняетсяЯ предполагаю что данные почему-то...
В общем у меня есть фрагмент с ViewPager и TabLayoutна страничках есть фрагменты с текстом и фрагменты с RecyclerView
Ошибка при компиляции Error:(4, 26) java: package javafxapplication does not exist JDK установливал отсюда http://www