gpt4 book ai didi

java - 创建一个检查属性窗口,按钮作为 JDialog 驱动

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:38:02 30 4
gpt4 key购买 nike

我最初问的没有明确说明我的问题/问题,所以我会更好地解释它。我有一个将 JDialog 设置为可见的 JButton。 JDialog 有一个 WindowListener 将其设置为在 windowDeactivated() 事件中不可见,该事件在用户单击对话框外部时触发。按钮 ActionListener 检查对话框是否可见,如果为真则隐藏它,如果为假则显示它。

windowDeactivated() 无论是否点击按钮都会触发,只要用户在对话框外点击。我遇到的问题是当用户单击按钮关闭对话框时。对话框由 WindowListener 关闭,然后 ActionListener 尝试显示它。

如果 windowDeactivated() 没有 setVisible(false),则对话框仍然打开,但在父窗口后面。我要问的是如何访问 windowDeactivated() 中点击的位置。如果我知道用户点击了按钮并且 windowDeactivated() 可以跳过隐藏对话框,这样按钮的 ActionListener 就会看到它仍然可见并隐藏它。

public PropertiesButton extends JButton {    private JDialog theWindow;    public PropertiesButton() {        theWindow = new JDialog();        theWindow.setUndecorated(true);        theWindow.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);        theWindow.add(new JMenuCheckBoxItem("Something"));        theWindow.addWindowListener(new WindowListener() {            // just an example, need to implement other methods            public void windowDeactivated(WindowEvent e) {                theWindow.setVisible(false);            }        });        this.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {                if (theWindow.isVisible()) {                    theWindow.setVisible(false);                } else {                    JButton btn = (JButton)e.getSource();                    theWindow.setLocation(btn.getLocationOnScreen.x,btn.getLocationOnScreen.x-50);                    theWindow.setVisible(true);                }            }        });        theWindow.setVisible(false);    }}

最佳答案

您可以尝试对下拉属性列表使用 JPanel 而不是 JDialog。像这样:

public class PropertiesButton extends JButton {

private JPanel theWindow;

public PropertiesButton() {
theWindow = new JPanel();
theWindow.add(new JMenuCheckBoxItem("Something"));

this.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (theWindow.isVisible()) {
theWindow.setVisible(false);
getParent().remove(theWindow);
} else {
JButton btn = (JButton)e.getSource();
getParent().add(theWindow);
theWindow.setBounds(
btn.getX(),
btn.getY() + btn.getHeight(), 100, 100);

theWindow.setVisible(true);
}
}
});
theWindow.setVisible(false);
}

}

在 Swing 中使用轻量级组件而不是像 JDialog 这样的重量级组件总是可取的,并且像您报告的那样具有较少的不良影响。这种方法的唯一问题是面板的位置和大小可能会受到父级中 Activity 的布局管理器的影响。

关于java - 创建一个检查属性窗口,按钮作为 JDialog 驱动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4195395/

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