Java JLayeredPane覆盖游标
我有一个多层java应用程序,它有一系列需要手动光标的JLabel按钮,例如:Java JLayeredPane覆盖游标,java,swing,cursor,jlayeredpane,Java,Swing,Cursor,Jlayeredpane,我有一个多层java应用程序,它有一系列需要手动光标的JLabel按钮,例如: button.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); 但是,我在上面有一个层,它的边界覆盖了整个应用程序(用于绘制弹出窗口等)。现在我已经在上面添加了图层,我的光标不再改变了。我已经尝试将上面图层的光标设置为null,但没有任何影响 以下是各层的基本布局: private void create() { this.addWind
button.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
但是,我在上面有一个层,它的边界覆盖了整个应用程序(用于绘制弹出窗口等)。现在我已经在上面添加了图层,我的光标不再改变了。我已经尝试将上面图层的光标设置为null,但没有任何影响
以下是各层的基本布局:
private void create() {
this.addWindowListener(windowAdapter);
this.setLayout(new BorderLayout());
layers = new JLayeredPane();
layers.setPreferredSize(this.getSize());
dashboard = new DashBoard.DashBoardLayer();
dashboard.setBounds(0, this.getHeight()-275, this.getWidth(),275);
application = new App.ApplicationLayer();
application.setBounds(0,0,this.getWidth(),this.getHeight()-145);
filter = new FilterLayer();
filter.setBounds(0,195,this.getWidth(),490);
menuBG = MenuLayerBg.getInstance();
menuBG.setBounds(0,0,this.getWidth(),this.getHeight());
menuPanes = MenuLayer.getInstance();
menuPanes.setBounds(0,0,this.getWidth(),this.getHeight());
layers.add(application, new Integer(0));
layers.add(filter, new Integer(1));
layers.add(dashboard, new Integer(2));
layers.add(menuBG, new Integer(3));
layers.add(menuPanes, new Integer(4));
this.add(layers, BorderLayout.CENTER);
}
MouseEvent仅调度到顶部的组件。因此,如果顶层完全覆盖底层的组件,它们将不会接收MouseeEvent 查看上Swing教程中的
LayeredPaneDemo.java
代码。我对代码做了以下更改:
for (int i = 0; i < layerStrings.length; i++) {
JLabel label = createColoredLabel(layerStrings[i],
layerColors[i], origin);
layeredPane.add(label, new Integer(i));
origin.x += offset;
origin.y += offset;
label.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); // added
}
我发现编辑像你在最后提到的层的contains函数效果很好。通过使覆盖层在不可见时返回false,允许较低层表示光标,谢谢!
JLabel label = null;
if (color.equals(Color.green))
{
label = new JLabel(text)
{
@Override
public boolean contains(int x, int y)
{
return false;
}
};
}
else
label = new JLabel(text);
//JLabel label = new JLabel(text);