Java JLayeredPane。动态更改JPanel的层索引

Java JLayeredPane。动态更改JPanel的层索引,java,swing,focus,jlayeredpane,Java,Swing,Focus,Jlayeredpane,我使用一个JLayeredPane来定位我的jpanel的三维位置,这样当有人单击jpanel时,我可以实现“缩放”效果,我需要在那里动态更改层索引,以便单击的组件始终处于“顶部” 这是我第一次放置JPanel,但我如何才能再次“到达”它并更改索引?既有“层”概念,也有“位置”概念。 您可以将所有组件放置在同一层上,但位置不同。 0是层内最上面的位置,-1是最下面的位置。 JLayeredPane方法,并可用于在其层内重新定位组件 下面是这种方法的一个示例,它将用户单击的组件带到前面: JLay

我使用一个JLayeredPane来定位我的jpanel的三维位置,这样当有人单击jpanel时,我可以实现“缩放”效果,我需要在那里动态更改层索引,以便单击的组件始终处于“顶部”

这是我第一次放置JPanel,但我如何才能再次“到达”它并更改索引?

既有“层”概念,也有“位置”概念。
您可以将所有组件放置在同一层上,但位置不同。
0是层内最上面的位置,-1是最下面的位置。
JLayeredPane方法,并可用于在其层内重新定位组件

下面是这种方法的一个示例,它将用户单击的组件带到前面:

JLayeredPane pane = new JLayeredPane();
for (int i = 0; i < 4; i++) {
    JLabel lbl = new JLabel("Jlabel-"+(i+1));

    lbl.setOpaque(true);
    lbl.addMouseListener(new MouseAdapter() {
        @Override
        public void mousePressed(MouseEvent e) {
            if (pane.getPosition(lbl) != 0) 
                pane.moveToFront(lbl);
        }
    });
    lbl.setFont(lbl.getFont().deriveFont(48f));
    lbl.setForeground(new Color(i*10, i*50, i*50));
    lbl.setBorder(new LineBorder(Color.BLACK, 2));
    lbl.setBounds(i*100, i*25, lbl.getPreferredSize().width, lbl.getPreferredSize().height);
    pane.add(lbl, 0, new Integer(i+1));
}
JLayeredPane=new JLayeredPane();
对于(int i=0;i<4;i++){
JLabel lbl=新的JLabel(“JLabel-”+(i+1));
lbl.setOpaque(真);
lbl.addMouseListener(新的MouseAdapter(){
@凌驾
公共无效鼠标按下(MouseEvent e){
如果(窗格getPosition(lbl)!=0)
窗格。移动到前面(lbl);
}
});
lbl.setFont(lbl.getFont().deriveFont(48f));
lbl.设置前景(新颜色(i*10,i*50,i*50));
lbl.setboorder(新的线边框(颜色为黑色,2));
lbl.setBounds(i*100,i*25,lbl.getPreferredSize().width,lbl.getPreferredSize().height);
添加(lbl,0,新整数(i+1));
}

也许,您应该将组件保存在某种类型的
映射中,与当前层关联,或者只是将它们保存在某种类型的
列表中。您还可以使用
JLayeredPane#getLayer
获取其当前布局。假设您使用的是
MouseListener
MouseEvent
返回事件的
源代码,但您可以使用
getComponent
作为默许。我将JPanel保存在列表中。但是图层索引不是JLayeredPane对象的函数吗?因此需要将
JLayeredPane
的引用作为实例字段进行维护
JLayeredPane pane = new JLayeredPane();
for (int i = 0; i < 4; i++) {
    JLabel lbl = new JLabel("Jlabel-"+(i+1));

    lbl.setOpaque(true);
    lbl.addMouseListener(new MouseAdapter() {
        @Override
        public void mousePressed(MouseEvent e) {
            if (pane.getPosition(lbl) != 0) 
                pane.moveToFront(lbl);
        }
    });
    lbl.setFont(lbl.getFont().deriveFont(48f));
    lbl.setForeground(new Color(i*10, i*50, i*50));
    lbl.setBorder(new LineBorder(Color.BLACK, 2));
    lbl.setBounds(i*100, i*25, lbl.getPreferredSize().width, lbl.getPreferredSize().height);
    pane.add(lbl, 0, new Integer(i+1));
}