Java 为JToolbar创建复合Swing组件
使用setRollover(true)时,Swing工具栏上的按钮是平坦的,没有边框,只有在悬停/按下按钮时才会绘制边框。但是,如果先将按钮添加到面板,然后将面板添加到工具栏,则此操作不起作用。有什么简单的方法可以实现吗 我希望按钮位于JPanel中,以使它们作为单个组件(想象一个带有第一页/上一页/下一页/最后一页按钮的分页组件)。我还希望它能够在不考虑L&F的情况下工作(就像JPanel不在工具栏和按钮之间一样) 编辑: 将下面示例中的按钮1和按钮2(直接添加)与按钮3和按钮4(通过JPanel添加)进行比较:Java 为JToolbar创建复合Swing组件,java,swing,jtoolbar,Java,Swing,Jtoolbar,使用setRollover(true)时,Swing工具栏上的按钮是平坦的,没有边框,只有在悬停/按下按钮时才会绘制边框。但是,如果先将按钮添加到面板,然后将面板添加到工具栏,则此操作不起作用。有什么简单的方法可以实现吗 我希望按钮位于JPanel中,以使它们作为单个组件(想象一个带有第一页/上一页/下一页/最后一页按钮的分页组件)。我还希望它能够在不考虑L&F的情况下工作(就像JPanel不在工具栏和按钮之间一样) 编辑: 将下面示例中的按钮1和按钮2(直接添加)与按钮3和按钮4(通过JPan
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上的同一工具栏:
我希望三个和四个按钮的工作方式与一个和两个按钮相同。1)我建议使用而不是JToolbar
缺点:
- 不能移动和拆卸,也不能从
容器中取出
- 通过使用
LayoutManager
2) 对于
JToolBar
,最好将一个JPanel
嵌套另一个JComponents
,如代码示例所示
3) 在您的代码示例中,您定义了一个
JButton
第四次,在Java中需要使用另一个JToolbar而不是JPanel works定义为单独的对象
但是:如果我想将复合组件包含到对话框或工具栏以外的其他内容中,那么我可能(或者可能没有)会遇到问题。(这类似于有两种按钮,一种用于工具栏,另一种用于其他)
这是问题中的代码部分,添加面板更改为添加工具栏
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);
我从没见过。请编辑你的问题,我已经添加了一个例子。它必须是JToolBar吗?你需要在屏幕上使用JToolBar吗?如果可能的话,我更喜欢标准的JToolBar,但是如果有其他工具栏实现可以处理这个问题,那么我不反对使用它。(如果你的问题是我是否需要使用工具栏,那么是的-应用程序有菜单、工具栏等。LF确保工具栏在给定平台上充当工具栏,它是可分离的,等等)好问题:-)查看代码发现BasicToolBarUI只处理直接的子级。这方面没什么可做的…广告3):我确实定义了4个独立的JButton对象。只有变量被重用。物体不是。我不确定我是否理解。我想得到嵌入面板的按钮的滚动效果,而不仅仅是直接添加的按钮。但是如果我像你建议的那样使用JMenuBar,那么我就不会得到任何按钮的效果。