gpt4 book ai didi

java - Swing 多个始终位于顶部的对话框在具有相同所有者时无法独立工作

转载 作者:行者123 更新时间:2023-12-01 21:55:33 27 4
gpt4 key购买 nike

我们有一个请求,即某些对话框应始终基于某些控件位于顶部。必须根据每个对话框打开/关闭此功能。在我看来,使用以下代码并执行以下步骤就像一个 Java bug:

  1. 将dialog1 设置在顶部。检查它是否保持在顶部。
  2. 将dialog2 设置在顶部。检查两个对话框是否都位于顶部。
  3. 将dialog1 设置为不在顶部。

预期:dialog2 保留在顶部,dialog1 则不会

实际:没有任何对话框保留在顶部。

这与对话框的所有者有一些联系。如果您取消注释 block 注释,一切都会按预期工作,但我认为这不是正常行为,因为 Always on Top 不应连接到父级。这是正常现象还是 Swing 的问题?不幸的是,为每个对话框设置新所有者会带来其他问题。

public static void main(String[] args) {
final JFrame rahan = new JFrame("Rahan");
rahan.setSize(new Dimension(1000,1000));
rahan.setVisible(true);


JDialog d1 = getJDialog(/*new JFrame()*/);
JDialog d2 = getJDialog(/*new JFrame()*/);
}

private static JDialog getJDialog(/*JFrame owner*/) {
final JDialog jDialog = new JDialog(/*owner*/);
final JButton onTop = new JButton("OnTop");
onTop.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jDialog.setAlwaysOnTop(!jDialog.isAlwaysOnTop());
}
});
jDialog.add(onTop);
jDialog.setVisible(true);
jDialog.pack();
return jDialog;
}

最佳答案

如果我像这样运行你的应用程序:

public static void main(String[] args) {
final JFrame rahan = new JFrame("Rahan");
rahan.setSize(new Dimension(1000,1000));
rahan.setVisible(true);


JDialog d1 = getJDialog(rahan);
JDialog d2 = getJDialog(rahan);
}

private static JDialog getJDialog(JFrame owner) {
final JDialog jDialog = new JDialog(owner);
final JButton onTop = new JButton("OnTop");
onTop.addActionListener(new ActionListener() {

@Override
public void actionPerformed(java.awt.event.ActionEvent e) {
jDialog.setAlwaysOnTop(!jDialog.isAlwaysOnTop());
}
});
jDialog.add(onTop);
jDialog.setVisible(true);
jDialog.pack();
return jDialog;
}

}

它工作得很好。这两个对话框始终位于顶部,并且它不是模态的,因此您可以单击进入框架。

您可以尝试将对话框设置为模态,如下所示:

jDialog.setModal(true);

但这有点违背你所取得的成就,对吧?

关于java - Swing 多个始终位于顶部的对话框在具有相同所有者时无法独立工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34450846/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com