📄 menus.java
字号:
//: c13:Menus.java
// Submenus, checkbox menu items, swapping menus,
// mnemonics (shortcuts) and action commands.
// <applet code=Menus width=300
// height=100> </applet>
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import com.bruceeckel.swing.*;
public class Menus extends JApplet
{
String[] flavors = {"Chocolate", "Strawberry",
"Vanilla Fudge Swirl", "Mint Chip",
"Mocha Almond Fudge", "Rum Raisin",
"Praline Cream", "Mud Pie"};
JTextField t = new JTextField("No flavor", 30);
JMenuBar mb1 = new JMenuBar();
JMenu f = new JMenu("File");
JMenu m = new JMenu("Flavors");
JMenu s = new JMenu("Safety");
// Alternative approach:
JCheckBoxMenuItem[] safety =
{
new JCheckBoxMenuItem("Guard"),
new JCheckBoxMenuItem("Hide")
};
// A second menu bar to swap to:
JMenuBar mb2 = new JMenuBar();
JMenu fooBar = new JMenu("fooBar");
JMenuItem[] other =
{
// Adding a menu shortcut (mnemonic) is very
// simple, but only JMenuItem can have them
// in their constructors;
new JMenuItem("Foo", KeyEvent.VK_F),
new JMenuItem("Bar", KeyEvent.VK_A),
// No shortcut:
new JMenuItem("Bar")
};
JButton b = new JButton("Swap Menus");
class BL implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
JMenuBar m = getJMenuBar();
setJMenuBar(m == mb1? mb2:mb1);
validate(); // Refresh the frame
}
}
class ML implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
JMenuItem target = (JMenuItem)e.getSource();
String actionCommand =
target.getActionCommand();
if (actionCommand.equals("Open0"))
{
String s = t.getText();
boolean chosen = false;
for (int i=0; i<flavors.length; i++)
{
if (s.equals(flavors[i]))
chosen = true;
}
if (!chosen)
{
t.setText("Choose a flavor first!");
}
else
{
t.setText("Opening" + s + ". Mmm, mm!");
}
}
}
}
class FL implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
JMenuItem target = (JMenuItem)e.getSource();
t.setText(target.getText());
}
}
// Alternatively, you can create a different
// class for each different MenuItem.Then you
// Don't have to figure out which one it is:
class FooL implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
t.setText("Foo selected");
}
}
class BarL implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
t.setText("Bar selected");
}
}
class BazL implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
t.setText("Baz selected");
}
}
class CMIL implements ItemListener
{
public void itemStateChanged(ItemEvent e)
{
JCheckBoxMenuItem target =
(JCheckBoxMenuItem)e.getSource();
String actionCommand =
target.getActionCommand();
if (actionCommand.equals("Guard"))
{
t.setText("Guard the Ice Cream! " +
"Guarding is " + target.getState());
}
else
{
t.setText("Hide the Ice Cream!" +
"Is it cold?" + target.getState());
}
}
}
public void init()
{
ML ml = new ML();
CMIL cmil = new CMIL();
safety[0].setActionCommand("Guard");
safety[0].setMnemonic(KeyEvent.VK_G);
safety[0].addItemListener(cmil);
safety[1].setActionCommand("Hide");
safety[0].setMnemonic(KeyEvent.VK_H);
safety[1].addItemListener(cmil);
other[0].addActionListener(new FooL());
other[1].addActionListener(new BarL());
other[2].addActionListener(new BazL());
FL fl = new FL();
for (int i=0; i<flavors.length; i++)
{
JMenuItem mi = new JMenuItem(flavors[i]);
mi.addActionListener(fl);
m.add(mi);
// Add separators at intervals;
if ((i+1) %3 == 0)
{
m.addSeparator();
}
}
s.setMnemonic(KeyEvent.VK_A);
f.add(s);
f.setMnemonic(KeyEvent.VK_F);
for (int i=0; i<safety.length; i++)
{
file[i].addActionListener(fl);
f.add(file[i]);
}
mb1.add(f);
mb1.add(m);
setJMenuBar(mb1);
t.setEditable(false);
Container cp = getContentPane();
cp.add(t, BorderLayout.CENTER);
// Set up the system for swapping menus:
b.addActionListener(new BL());
b.setMnemonic(KeyEvent.VK_S);
cp.add(b, BorderLayout.NORTH);
for (int i=0; i<other.length; i++)
{
fooBar.add(other[i]);
}
fooBar.setMnemonic(KeyEvent.VK_B);
mb2.add(fooBar);
}
public static void main(String[] args)
{
Menus applet = new Menus();
JFrame frame = new JFrame("Menus");
frame.getContentPane().add(applet);
frame.setSize(200, 75);
applet.init();
applet.start();
frame.setVisible(true);
}
}///:~
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -