使用setRollover(true)时,Swing工具栏上的按钮是平的,没有边框,只有在悬停/按下按钮时才会绘制边框。但是,如果首先将按钮添加到面板,然后将面板添加到工具栏,则不起作用。有一些简单的方法如何实现它?
我希望按钮位于JPanel中,使它们充当单个组件(想象一下带有first / prev / next / last页面按钮的分页组件)。我也希望它能够工作而不管L& F(就像JPanel不在工具栏和按钮之间那样)。
修改
比较按钮One&两个(直接添加)按钮Three&以下示例中的四个(通过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上的相同工具栏:
我希望Three和Four按钮的工作方式与One和Two按钮相同。
答案 0 :(得分:1)
1)我建议to set JMenuBar as container而不是JToolbar
,
缺点:
不可移动且可拆卸,也不属于Container
可以放在任何地方,但只能放在Container内,就像使用JComponent
LayoutManager
一样
2)JToolBar
最好放置一个JPanel
嵌套另一个JComponents
,如代码示例所示
3)在您的代码示例中,您定义了一个JButton
四分之一的时间,在Java中需要定义为单独的Objects
答案 1 :(得分:1)
使用另一个JToolbar而不是JPanel。
但是:如果我想将复合组件包含在对话框或工具栏以外的其他内容中,那么我可能(或者可能不会?)有问题。 (这类似于有两种类型的按钮,一种用于工具栏,另一种用于其余按钮)
这是添加面板更改为添加工具栏的问题的代码部分。
JToolBar component = new JToolBar();
component.setRollover(true);
component.setBorder(null);
component.setFloatable(false);
button = new JButton("Three");
button.setFocusable(false);
component.add(button);
button = new JButton("Four");
button.setFocusable(false);
component.add(button);
toolbar.add(component);