java - 有谁知道使用构建器模式包装 JOptionPane 的代码?

标签 java swing

不错的 JOptionPane 包含大量静态方法。有很多组合,但要更改某些选项(如按钮),您仍然必须指定其他可选参数 - 通常是默认值(如空图标)。这不会导致易于阅读的代码。

此外,这些方法不是特别一致(int 返回对应于 ***_OPTION 常量还是按钮索引?)所以它需要大量的消除歧义的文档:学习、内存或编写都不是快速和容易的。

创建“Builder”包装器对我来说似乎很自然。它可能看起来像这样:

String[] buttonText = { "Looks good", "It sucks" };

Object selection = new OptionPaneBuilder("What do you think?")
    .question()
    .message(messageComponent)
    .resizable(true)
    .showOptionDialog(parent, buttonText);

return buttonText[0].equals(selection);

最终的方法调用可能是:

// returns int (or enum?)
.showConfirmDialog(parent, JOptionPane.YES_NO_CANCEL_OPTION) 

// returns JOptionPane
.build()

// etc... 

我很高兴去写它 - 但我找不到任何现有的东西让我想知道:我是疯了(这是一个坏主意/有更好的方法)......还是只是不善于使用谷歌? :-)

那么...有没有人知道有什么东西可以达到这样的目的?

我的感觉是坚持使用 JOptionPane 对话框,以便 UI 代表获得诸如字体和系统图标之类的东西,以适应任何外观;但我想如果替代方案在这方面取得成功,它们也会很好。

最佳答案

有一个名为 oxbow 的 API任务对话框。它包括一些不错的标准任务对话框布局,您也可以设计自己的布局。在此 API 中,您可以自由使用他们的静态方法来创建标准对话框,以及使用他们的构建器来构建所需的对话框。

构建器模式示例:

int choice =
    TaskDialogs
        .build( owner, "What do you think?",
            "You have to choose, either this dialog looks good or it just sucks!" )
        .title( "Make a decision!" )
        .choice( 0,
            new CommandLink( "Looks good", "With good I mean it looks reaaaally awesome!" ),
            new CommandLink( "It sucks", "I cant see it anymore, take it away!" ) );

关于java - 有谁知道使用构建器模式包装 JOptionPane 的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8180470/

相关文章:

java - 重定向后如何保留模型属性?

java - 使用 GridBagLayout 调整大小时防止组件散开

java - 从 swingWorker 处理框架

Java - 图形 - 传递给 paint() 的图形对象与 JPanel 实例中的图形对象不同

java - 检查图像是否为灰度的可靠方法

java - java中等待异步http请求

java - 实现 CustomListAdapter android 时无法使用 List<String>

java - 按钮何时聚焦?

java - 将图像插入 JTextPane 错误

java - 移动 JFrame 以右侧显示 JCombobox