0

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

你看到这里有什么问题吗?

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();
}
4

1 回答 1

1

你看到这里有什么问题吗?

  • GlassPane 不使用 KeyEvents
  • 必须将 KeyListener 添加到添加到 GlassPane 的 JComponent,并覆盖 consume()
  • MouseEvents 仅在覆盖 JPanel 或另一个 JComponent 的区域中使用,即层次结构中的顶级组件
  • 添加覆盖妓女RootPane区域的JLabel(默认透明),将适当的LayoutManager添加到JLabel,然后放置JPanel或...。
  • 从 JFrame.getRootPane 调用 GlassPane
于 2013-05-14T10:00:52.563 回答