我有一个JToolbar
包含多个JPanels
(因为我想每个人都有特定的边框)。 不幸的是,外观&感觉管理器不会将JPanels
识别为属于工具栏,因此JButtons
因此呈现为普通按钮(即,没有工具栏上的特殊鼠标悬停效果)。Java Swing JToolbar与面板:外观和感觉
由JToolbars
替代JPanels
不是一个选项,因为LAF渲染器给它一个特殊的背景。
任何其他选项/提示?
我有一个JToolbar
包含多个JPanels
(因为我想每个人都有特定的边框)。 不幸的是,外观&感觉管理器不会将JPanels
识别为属于工具栏,因此JButtons
因此呈现为普通按钮(即,没有工具栏上的特殊鼠标悬停效果)。Java Swing JToolbar与面板:外观和感觉
由JToolbars
替代JPanels
不是一个选项,因为LAF渲染器给它一个特殊的背景。
任何其他选项/提示?
如下图所示,您可以根据需要更改工具栏的布局并添加组件。您也可以有任意数量的工具栏。图中显示了L & F combo here。请注意,JToolBar
的addSeparator()
方法提供了F专用JToolBar.Separator
的L &。
import component.Laf;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JToolBar;
/**
* @see https://stackoverflow.com/a/16121288/230513
*/
public class JToolBarTest {
private void display() {
JFrame f = new JFrame("Test");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLayout(new BoxLayout(f.getContentPane(), BoxLayout.Y_AXIS));
// https://stackoverflow.com/a/11949899/230513
f.add(Laf.createToolBar(f));
f.add(createBar());
f.add(createBar());
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
private JToolBar createBar() {
JToolBar toolBar = new JToolBar();
toolBar.add(createPanel());
toolBar.addSeparator();
toolBar.add(createPanel());
return toolBar;
}
private JPanel createPanel() {
JPanel panel = new JPanel();
panel.setBorder(BorderFactory.createTitledBorder("Panel"));
Action buttonAction = new AbstractAction("Button"){
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(e.getActionCommand()
+ " " + e.getSource().hashCode());
}
};
panel.add(new JButton(buttonAction));
panel.add(new JButton(buttonAction));
return panel;
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new JToolBarTest().display();
}
});
}
}
非常感谢这个例子。我发现在这里按钮的外观和感觉也不是与工具栏的外观和感觉有关(即通常只有当鼠标移过时才能看到按钮的边框)。我解决它的方式是用JToolbars替换所有子面板,但这远非理想。 – Tom 2013-04-20 15:27:14
Aqua按钮渲染方式不同,但我看到大多数L&F都是相同的。你可能会看[大小变体](http://stackoverflow.com/a/2900157/230513)。请不要犹豫,使用[sscce](http://sscce.org/)编辑您的问题,例如这个,它可以说明您遇到的任何问题。您可以通过点击左侧的向上箭头来选出有用的答案。 – trashgod 2013-04-20 19:14:25
后尽快的SSCCE。因为在我的情况下一切正常。 – 2013-04-20 12:44:48