我发布这个因为我真的很困惑。我的目标是创建一个包含所有已安装的LookandFeel的JMenu,此外,用户可以通过从此菜单中选择它来更改程序的主题。
我的意思是:我在大学的讲师向我展示了一段代码,该代码位于下面代码中的块注释之间。他在JComboBox中写了我想要的东西。甚至可以用JMenu写这样的东西吗?我通过编写块注释下面的代码尝试了一些技巧,但它甚至没有列出LookandFeels。
因为它只是在包含main()的类之外定义的许多类中的一个,所以请随意编写任何必要的代码,如.setVisible或类似的东西。
提前致谢
import javax.swing.*;
import java.util.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Menu extends JFrame
{
private JMenuBar test = new JMenuBar();
private JMenu LnF = new JMenu("LnF");
public Menu() throws HeadlessException
{
final UIManager.LookAndFeelInfo[] installedLF = UIManager.getInstalledLookAndFeels();
String[] installedLookandFeelsNames = new String[installedLF.length];
for (int i = 0; i < installedLF.length; i++)
{
installedLookandFeelsNames[i] = installedLF[i].getName();
System.out.println(" " + installedLF[i].getClassName() );
}
/*final JComboBox chooseLFComboBox = new JComboBox(installedLookandFeelsNames);
chooseLFComboBox.setSelectedItem(UIManager.getLookAndFeel().getName());
chooseLFComboBox.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
try
{
int selectedLFIndex = chooseLFComboBox.getSelectedIndex();
UIManager.setLookAndFeel (installedLF[selectedLFIndex].getClassName());
SwingUtilities.updateComponentTreeUI(Menu.this);
Menu.this.pack();
}
catch (Exception e1)
{
e1.printStackTrace();
JOptionPane.showMessageDialog(Menu.this, "Błąd podczas zmiany LF");
}
}
}
);
add(chooseLFComboBox);*/
JMenuItem[] temp = new JMenuItem[5];
for(int i = 0; i < installedLookandFeelsNames.length; i++)
{
temp[i] = new JMenuItem(installedLookandFeelsNames[i]);
LnF.add(temp[i]);
}
test.add(LnF);
add(test);
}
}