由于目的是创建标题,而不仅仅是非活动组件,因此您可以使用 a JLabel
。通常,您可以将任何内容添加JComponent
到菜单中。
为避免混淆用户,应将其与普通菜单项明确区分开来。大多数软件在菜单中没有标题,因此您应该考虑添加它们是否会导致比没有它们更多的问题。
可以利用其他地方熟悉的用户界面元素,我用它来证明下面的 web 样式 megamenu (不能让自己将标题引入普通菜单,所以请原谅使用自定义布局的复杂性,并直接添加到因此弹出窗口):
代码:
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.*;
public class MenuSample {
MenuSample() {
JFrame frame = new JFrame("Sample");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JMenuBar menuBar = new JMenuBar();
frame.setJMenuBar(menuBar);
JMenu menu = new JMenu("Megamenu");
JPopupMenu popup = menu.getPopupMenu();
popup.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
menuBar.add(menu);
gbc.gridx = 0;
gbc.gridy = 0;
popup.add(createHeader("Header 1"), gbc);
gbc.gridy++;
popup.add(new JMenuItem("Item 1"), gbc);
gbc.gridy++;
popup.add(new JMenuItem("Item 2"), gbc);
gbc.gridy++;
popup.add(new JMenuItem("Item 3"), gbc);
gbc.gridx++;
gbc.gridy = 0;
popup.add(createHeader("Header 2"), gbc);
gbc.gridy++;
popup.add(new JMenuItem("Item 3"), gbc);
gbc.gridy++;
popup.add(new JMenuItem("Item 4"), gbc);
gbc.gridy++;
popup.add(new JMenuItem("Item 5"), gbc);
frame.pack();
frame.setVisible(true);
}
private JComponent createHeader(String header) {
JLabel label = new JLabel(header);
label.setFont(label.getFont().deriveFont(Font.ITALIC));
label.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
return label;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new MenuSample();
}
});
}
}