Dialog

简介

使用弹框需求时,需要用到Dialog。Swing原生的为JDialog类,如果你在开发Idea插件,推荐使用DialogWrapper。

DialogWrapper

开发Idea插件优先使用继承DialogWrapper的方式,它比Swing的JDialog多了许多特性:

  • 按钮布局(跟随操作系统习惯决定Ok / Cancel的位置,以及macOS特有的Help按钮)
  • 上下文帮助
  • 记住Dialog的大小
  • 一些校验或快捷键、不再询问等checkbox特性。
使用方法

继承自DialogWrapper后,重写createCenterPanel方法,返回Dialog内容去需要展示的内容。使用show()方法显示Dialog。

// SampleDialog.class
public class SampleDialog extends DialogWrapper {

  public SampleDialog () {
    super(true); // use current window as parent
    setTitle("Test DialogWrapper");
    init();
  }

  @Nullable
  @Override
  protected JComponent createCenterPanel() {
    JPanel dialogPanel = new JPanel(new BorderLayout());

    JLabel label = new JLabel("Testing");
    label.setPreferredSize(new Dimension(100, 100));
    dialogPanel.add(label, BorderLayout.CENTER);

    return dialogPanel;
  }
}

// Test.java
Button testButton = new JButton();
testButton.addActionListener(actionEvent -> {
  if (new SampleDialogWrapper().showAndGet()) {
    // user pressed OK
  }
});
// 直接展示窗口
new SampleDialog().show();
监听Ok / Cancel事件、个性化窗口

重写createActions方法,可以个性化Dialog要展示的按钮。重写doOKAction/doCancelAction可以在Ok/Cancel按钮被点击后执行自己的逻辑。构造器中可以设置窗口是否为模态、窗口标题、按钮的展示文字等属性。

public class SampleDialog extends DialogWrapper {

	public SampleDialog (@Nullable Project project) {
	    super(project);
	    setTitle("Test DialogWrapper");
	    // 设置为非模态窗口
	    setModal(false);
	    // 修改Ok按钮的展示文本为“提交”
	    setOKButtonText("提交");
	    init();
	}

	// 定义要展示的按钮
	@Override
    protected Action @NotNull [] createActions() {
//	    Action helpAction = getHelpAction();
//	    return helpAction == myHelpAction && getHelpId() == null ?
//	           new Action[]{getOKAction(), getCancelAction()} :
//	           new Action[]{getOKAction(), getCancelAction(), helpAction};
        return new Action[] { getOKAction() };
    }

	@Override
    protected void doOKAction() {
    	// 自己的逻辑
    	...
    	// 调用父类的doOKAction方法关闭弹窗
        super.doOKAction();
    }

	@Override
    public void doCancelAction() {
        super.doCancelAction();
    }
    
}
修改Dialog展示的位置为某个JButton的左上角

获取按钮在屏幕中的坐标后,坐标对应减去窗口的高度和宽度,就可以达到显示在按钮左上方的效果。

public class SampleDialog extends DialogWrapper {
	
	// btnLocation可以通过构造器传入
	// Point btnLocation = button.getLocationOnScreen();
	@Override
    public void show() {
        int x = btnLocation.x - getPreferredSize().width;
        int y = btnLocation.y - getPreferredSize().height;
        setLocation(x, y);
        super.show();
    }
}

Swing JDialog

Swing Dialog比较简单,直接new一个JDialog后,往contentPane上添加要展示的内容,调用setVisible(true)方法就可以展示弹窗了。

boolean modal = false;
JDialog dialog = new JDialog(frame, "Demo Dialog", modal);
// 不展示标题栏
// dialog.setUndecorated(true);
// 添加要显示的Component到dialog中
dialog.getContentPane().add(panel);
dialog.pack();
// 设置窗口的宽高
dialog.setPreferredSize(new Dimension(width, height));
// 显示窗口
dialog.setLocation(x, y);
dialog.setVisible(true);
// 关闭窗口
dialog.dispose()

参考文献

https://plugins.jetbrains.com/docs/intellij/dialog-wrapper.html#usage

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值