摆动 - 交换和隐藏玻璃窗格不起作用 - 玻璃窗格仍然可见

时间:2013-05-14 08:51:27

标签: java swing jpanel glasspane

我正在尝试构建一个Swing应用程序,如果没有用户登录,则将登录面板显示为glasspane。如果我尝试隐藏到登录玻璃窗格,它仍然可见,但不会对任何用户交互做出反应。< / p>

你觉得这里有什么问题吗?

public class HauptFrame implements SessionListener {

private static final long serialVersionUID = 7985854311368619704L;

public HauptFrame() {
    initialize();
}

public void initialize() {
    Session.get().addSessionListener(this);
    setSize(1024, 768);
    setVisible(true);
    startAndCheck();
}

public void startAndCheck() {
    if (!DatabaseManager.doesConfigExist()) {
        setNewGlassPane(new SetupGlassPanel(this));
    }
    else if (new UserDAO().getAllUser().size() == 0) {
        setNewGlassPane(new FirstUserGlassPane(this));
    }
    else if (Session.get().getUser() == null) {
        setNewGlassPane(new LoginGlassPanel());
    } else {
        setNewGlassPane(null);
    }
}

public void setNewGlassPane(JPanel glassPane) {
    if (glassPane != null) {
        getGlassPane().setVisible(false);
        setGlassPane(glassPane);
        getGlassPane().setVisible(true);
    }
    else {
        if (getGlassPane().isVisible()) {
            getGlassPane().setVisible(false);
        }
    }
}

@Override
public void userSignedIn(User user) {
    removeAll();
    startAndCheck();
}

@Override
public void userSignedOff() {
    startAndCheck();
}

1 个答案:

答案 0 :(得分:1)

  

你觉得这里有什么问题吗?

  • GlassPane不使用KeyEvents
  • 必须将KeyListener添加到添加到GlassPane的JComponent,并覆盖consume()
  • 仅在覆盖JPanel或其他JComponent的区域中使用MouseEvents,层次结构上的顶级组件
  • 添加覆盖妓女RootPane区域的JLabel(默认为透明),将正确的LayoutManager添加到JLabel,然后放置JPanel或....
  • 从JFrame.getRootPane
  • 调用GlassPane