【发布时间】:2012-03-30 20:38:00
【问题描述】:
当使用 setRollover(true) 时,Swing 工具栏上的按钮是扁平的,没有边框,只有在悬停/按下按钮时才会绘制边框。但是,如果先将按钮添加到面板,然后将面板添加到工具栏,则这不起作用。有没有一些简单的方法来实现它?
我希望按钮位于 JPanel 中,以使它们充当单个组件(想象一个带有第一页/上一页/下一页/最后一页按钮的分页组件)。无论 L&F 是什么,我也希望它能够工作(就像 JPanel 不在工具栏和按钮之间一样)。
编辑:
在以下示例中比较按钮一和二(直接添加)与按钮三和四(通过 JPanel 添加):
import javax.swing.*;
public class ToolbarTest extends JFrame {
ToolbarTest() {
JToolBar toolbar = new JToolBar();
toolbar.setRollover(true);
JButton button = new JButton("One");
button.setFocusable(false);
toolbar.add(button);
button = new JButton("Two");
button.setFocusable(false);
toolbar.add(button);
JPanel panel = new JPanel();
button = new JButton("Three");
button.setFocusable(false);
panel.add(button);
button = new JButton("Four");
button.setFocusable(false);
panel.add(button);
toolbar.add(panel);
add(toolbar);
pack();
}
public static void main(String[] args) throws Throwable {
// optional: set look and feel (some lf might ignore the rollover property)
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) { // or "Windows", "Motif"
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
ToolbarTest frame = new ToolbarTest();
frame.setVisible(true);
}
}
以下是截图:
Nimbus LF 上的工具栏:
鼠标悬停在第二个按钮上时的相同工具栏(鼠标光标未显示):
Windows LF 上的相同工具栏:
我希望 3 和 4 按钮的工作方式与 1 和 2 按钮相同。
【问题讨论】:
-
从未见过。请使用您的SSCCE 编辑问题
-
我添加了一个例子。
-
一定是JToolBar吗???,你需要用JToolBar在屏幕上移动吗???,
-
如果可能的话,我更喜欢标准的 JToolbar,但是如果有其他工具栏实现可以处理这个问题,那么我不反对使用它。 (如果您的问题是我是否需要一般使用工具栏,那么是的 - 该应用程序具有菜单、工具栏等。LF 确保工具栏在给定平台上充当工具栏,它是可拆卸的等)
-
好问题 :-) 查看代码显示 BasicToolBarUI 仅处理直接子级。没什么可做的......