JScrollPane внутри JLayeredPane не перекрашивать?
Это может быть что-то очень простое, но я совершенно запутался.
У меня есть JScrollPane внутри JLayeredPane, Когда я прокручиваю в панели то, что выше в JLayeredPane не перекрашивается вообще.
Здесь я получил небольшой пример того, как синий квадрат вообще не перекрашивается.
Неужели я совершенно неправильно понял, как работает многослойная панель?
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class LayeredTest extends JPanel{
public LayeredTest(){
JPanel content = new JPanel();
content.setBackground(Color.red);
content.setPreferredSize(new Dimension(2048, 2048));
content.setBounds(0, 0, 2048, 2048);
JPanel control = new JPanel();
control.setBackground(Color.blue);
control.setPreferredSize(new Dimension(200, 50));
control.setBounds(0, 0, 100, 50);
JScrollPane scroll = new JScrollPane(content);
scroll.setBounds(0, 0, 400, 400);
JLayeredPane layeredPane = new JLayeredPane();
layeredPane.setPreferredSize(new Dimension(400, 400));
layeredPane.add(control, 0);
layeredPane.add(scroll, 1);
this.add(layeredPane, BorderLayout.CENTER);
}
public static void main(String[] args) {
//Create and set up the window.
JFrame frame = new JFrame("Test - Very lulz");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocation(100, 100);
frame.setSize(400, 400);
//Create and set up the content pane.
frame.setContentPane(new LayeredTest());
//Display the window.
frame.pack();
frame.setVisible(true);
}
}
Есть идеи?
1 ответ:
Вы добавляете компоненты
controlиscrollв слой "default", так что фактически они все еще находятся на том же слое. Чтобы разместить их на разных слоях, необходимо также указать номер слоя. Лучше всего разместить компоненты где-то между слоем по умолчанию (который является самым нижним с индексом 0) и следующим слоем, который является слоем "палитра" с индексом 100.Итак, чтобы поместить компоненты на слои 50 и 51, например, измените, где вы находитесь добавление компонентов в
layeredPaneк:layeredPane.add(scroll, 50, 0); layeredPane.add(control, 51, 0);Это поместит
scrollв положение 0 на слое 50, аcontrolв положение 0 на слое 51.