在Java中使用JButton中的JCheckBox是否可以?

时间:2011-08-25 08:45:23

标签: java swing user-interface jbutton jcheckbox

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

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

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

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

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

或者它不是很好的设计方法? (“用户不能感到惊讶”规则..我猜他们会理解。我还为该复选框添加了一个工具提示)

请分享您的意见。 谢谢。

3 个答案:

答案 0 :(得分:3)

  

这会导致任何问题

也许。例如,如果使用本机窗口小部件来呈现按钮,则可以获得渲染问题。或者该复选框可能不响应点击,因为该按钮会吞下该事件。

  

这是一种很好的设计方法吗?

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

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

答案 1 :(得分:2)

  

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

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

  

或者它不是很好的设计方法? (“用户不能感到惊讶”   规则..我想他们会明白的。我还提供了一个工具提示   那个复选框)

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

答案 2 :(得分: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);
            }
        };