Я создаю приложение типа моделирования, я хочу, чтобы для всех анимаций был использован один фоновый слой и еще один слой сверху. Им в настоящее время с помощью JlayeredPanes, но я не могу получить фона на верхнем слое, чтобы показать, как прозрачные, так что я могу видеть фон, любая помощь очень ценится, Heres код:JlayeredPane Transparency setOpaque не работает
фоновый слой
public class SimBackground extends JLayeredPane{
private Model theModel;
private SimulationArea simulationArea;
public SimBackground(Model theModel){
this.theModel=theModel;
setBackground(new Color(0, 230, 0));
setOpaque(true);
setPreferredSize(new Dimension(500,500));
setVisible(true);
}
@Override
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
for(int x=0;x<50;x++){
for(int y=0;y<50;y++){
g.drawRect((x*10), (y*10), 10, 10);
}
}
}
Верхний слой
public class SimulationArea extends JLayeredPane {
private int SPEED = 100;
private Model theModel;
Timer timer;
public SimulationArea(Model theModel){
this.theModel = theModel;
setPreferredSize(new Dimension(500,500));
setLocation(0,0);
setOpaque(false);
setBackground(new Color(0,0,0,0));
setVisible(true);
//Swing Timer
timer = new Timer(SPEED,new ActionListener(){
@Override
public void actionPerformed(ActionEvent ae) {
update();
repaint();
revalidate();
}
});
}
private void update() {
theModel.update();
}
@Override
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
//test get 1 active object
ArrayList<ActiveObject> activeObjects = theModel.getActiveObjects();
//System.out.println(activeObjects.size());
for(int i=0; i<activeObjects.size(); i++){
ActiveObject activeObject = theModel.getActiveObjects().get(i);
int x = activeObject.getCoordinates().getX();
int y = activeObject.getCoordinates().getY();
int size = activeObject.getSize();
g2d.fillRect (x ,y , size, size);
}
}
Может кто-нибудь, пожалуйста, сообщите мне, что мне здесь не хватает?
Подождите, верхний слой проходит JLayeredPane? Извините, но это путает меня до конца. Разве ваша JLayeredPane не должна быть нижней частью, контейнер, который содержит ** все ** слои? И ни один из слоев не должен расширять JLayeredPane. JPanel или JComponent, да, но не JLayeredPane. И вы должны использовать метод 'paintComponent (...)' JPanel не в JLayeredPane. И прочитайте учебник JLayeredPane, потому что это не похоже, что вы знаете, как их использовать. Вы можете найти его здесь ... [как использовать слоистые панели] (http://docs.oracle.com/javase/tutorial/uiswing/components/layeredpane.html) –
это только панели, я havent разместил код для панели, если они не расширяют JlayeredPane, как я могу создать их в своем классе? Я не мог найти их примеров в своем классе. –
. Вы использовали бы один JLayeredPane, скорее всего, не расширили его, и вы добавите объекты, которые расширят JPanel или JComponent до единственной JLayeredPane. Есть много примеров его использования на этом сайте, некоторые из которых написаны мной. –