我有一个上传程序,它有一个显示一组上传行的JTable。我有一个标有“Clear Completed”的JButton,点击后会删除已完成上传的行。现在我想要一个JCheckBox / JButton组合(比如gmail中的复选框/下拉组合),这样如果选中该复选框,行将自动删除。
我创建了一个扩展JButton的类,并重写了构造函数以添加JCheckBox。为JCheckBox和JButton添加了ActionListeners。它看起来像这样。
http://i.stack.imgur.com/KcBHv.png
一切都很完美。但无论是否使用它我都处于两难境地。因为它不是JButton API的预期用途,而且我从未在任何Java应用程序中看到过这样的控制(所以到目前为止)所以我担心它是否会给用户带来任何问题。
这是否会导致在运行时破坏UI等问题?或者它可能不适用于所有操作系统? (我正在使用Windows7)
或者它不是很好的设计方法? (“用户不能感到惊讶”规则..我猜他们会理解。我还为该复选框添加了一个工具提示)
请分享您的意见。 谢谢。
答案 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);
}
};