1

我有一个上传程序,它有一个显示一组上传行的 JTable。我有一个标有“清除已完成”的 JButton,单击它会删除已完成上传的行。现在我想要一个 JCheckBox/JButton 组合(如 gmail 中的复选框/下拉组合),以便如果选中该复选框,行将被自动删除。

我创建了一个扩展 JButton 的类并重写了构造函数以添加 JCheckBox。为 JCheckBox 和 JButton 添加了 ActionListener。它看起来像这样。

http://i.stack.imgur.com/KcBHv.png

一切都很完美。但是我很纠结要不要用。由于它不是 JButton API 的预期用途,而且我从未在任何 Java 应用程序中看到过这样的控制(到目前为止),所以我担心它是否会给用户带来任何问题。

这会导致在运行时破坏 UI 等问题吗?还是它可能不适用于所有操作系统?(我使用的是Windows7)

或者这不是好的设计方法?(“用户不得感到惊讶”规则。我想他们会理解的。我还为该复选框提供了一个工具提示)

请分享您的意见。谢谢你。

4

3 回答 3

3

这会导致任何问题

也许。例如,如果使用本机小部件呈现按钮,您可能会遇到呈现问题。或者复选框可能不会响应点击,因为按钮会吞下事件。

这是一个好的设计方法吗?

并不真地。大多数用户会认为您的布局有错误,因为他们以前从未在按钮内看到过复选框。除了任何渲染问题(当我按下按钮时复选框会是什么样子?它会消失还是呈现奇怪的颜色?),我觉得你应该避免这种情况。

使用标准方法:按钮上方带有文本的复选框(“自动清除”)。当复选框被选中为“关闭”时,可能会更改按钮文本。

于 2011-08-25T09:18:24.350 回答
2

这会导致在运行时破坏 UI 等问题吗?还是它可能不适用于所有操作系统?(我使用的是Windows7)

我认为这不会是一个问题。

或者这不是好的设计方法?(“用户不得感到惊讶”规则。我想他们会理解的。我还为该复选框提供了一个工具提示)

我个人认为将复选框放在 JButton 的左侧会更清楚。无论如何,这取决于你。此外,执行的快速移动可以让用户点击按钮而不是复选框。

于 2011-08-25T08:53:39.703 回答
0

万一有人想知道您将如何做到这一点。您可能必须添加一个 EmptyBorder(4,4,4,4) 以保持与按钮的大小相似。我通常用其他按钮将它们包装在网格布局中。

            new JCheckBox() {
            JButton button = new JButton();
            {
                button.setModel(getModel());
            }

            @Override
            protected void paintComponent(Graphics g) {
                if (!button.getSize().equals(getSize())) {
                    button.setSize(getSize());
                }

                button.paint(g);
                super.paintComponent(g);
            }

            @Override
            public void setEnabled(boolean b) {
                super.setEnabled(b);
                button.setEnabled(b);
            }
        };
于 2012-07-20T06:48:39.930 回答