将 JMenuItem 添加到 JMenuBar 以在菜单中创建切换按钮
Adding a JMenuItem to JMenuBar to create a toggle button in menu
我想达到的效果是这样的:
图像表示我想将一些按钮(如 JMenuItem
)放入应用程序菜单栏 (JMenuBar
) 以允许切换某些操作。所以我写了这样的代码:
// Start button
JMenuItem startbut = new JMenuItem();
startbut.setText("Start");
startbut.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
ToggleAction();
}
});
menuBar1.add(startbut);
但它没有按预期运行:
尤其是白色背景让人不安,看起来很破。
Java GUI 库有数以千计的选项,所以我认为必须有更有效的方法来做到这一点。我该怎么办?
只是总结评论中的讨论,你可以在菜单栏中添加一个JToggleButton
而不是添加一个JMenuItem
,像这样:
Action toggleAction = new AbstractAction("Start") {
@Override
public void actionPerformed(ActionEvent e) {
AbstractButton button = (AbstractButton)e.getSource();
if (button.isSelected()) {
button.setText("Stop");
// Start the action here
} else {
button.setText("Start");
// Stop the action here
}
}
};
JMenuBar menuBar = new JMenuBar();
menuBar.add(new JMenu("Settings"));
menuBar.add(new JToggleButton(toggleAction));
正如@mKorbel 指出的那样,菜单栏是一个容器,因此我们可以向其中添加组件,而不仅仅是 JMenu
。
另一方面,使用 JToolBar
代替菜单栏是另一种选择。从最终用户的角度来看,放置在工具栏中的按钮比放置在菜单栏中的按钮更自然,因此可能值得考虑这种方法。这样的事情会成功:
JToolBar toolBar = new JToolBar();
toolBar.add(new JButton("Settings"));
toolBar.add(new JToggleButton(toggleAction)); // Here 'toggleAction' is the same than the previous one
此代码段将产生类似于菜单栏的结果:
备注
请注意,必须使用适当的 setJMenuBar(...)
方法将菜单栏添加到顶级容器(JFrame
或 JDialog
)。这与必须像任何其他组件一样添加到内容窗格的 JToolBar
不同。参见 this related topic。
我想达到的效果是这样的:
图像表示我想将一些按钮(如 JMenuItem
)放入应用程序菜单栏 (JMenuBar
) 以允许切换某些操作。所以我写了这样的代码:
// Start button
JMenuItem startbut = new JMenuItem();
startbut.setText("Start");
startbut.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
ToggleAction();
}
});
menuBar1.add(startbut);
但它没有按预期运行:
尤其是白色背景让人不安,看起来很破。
Java GUI 库有数以千计的选项,所以我认为必须有更有效的方法来做到这一点。我该怎么办?
只是总结评论中的讨论,你可以在菜单栏中添加一个JToggleButton
而不是添加一个JMenuItem
,像这样:
Action toggleAction = new AbstractAction("Start") {
@Override
public void actionPerformed(ActionEvent e) {
AbstractButton button = (AbstractButton)e.getSource();
if (button.isSelected()) {
button.setText("Stop");
// Start the action here
} else {
button.setText("Start");
// Stop the action here
}
}
};
JMenuBar menuBar = new JMenuBar();
menuBar.add(new JMenu("Settings"));
menuBar.add(new JToggleButton(toggleAction));
正如@mKorbel 指出的那样,菜单栏是一个容器,因此我们可以向其中添加组件,而不仅仅是 JMenu
。
另一方面,使用 JToolBar
代替菜单栏是另一种选择。从最终用户的角度来看,放置在工具栏中的按钮比放置在菜单栏中的按钮更自然,因此可能值得考虑这种方法。这样的事情会成功:
JToolBar toolBar = new JToolBar();
toolBar.add(new JButton("Settings"));
toolBar.add(new JToggleButton(toggleAction)); // Here 'toggleAction' is the same than the previous one
此代码段将产生类似于菜单栏的结果:
备注
请注意,必须使用适当的 setJMenuBar(...)
方法将菜单栏添加到顶级容器(JFrame
或 JDialog
)。这与必须像任何其他组件一样添加到内容窗格的 JToolBar
不同。参见 this related topic。