📄 guidemo13.java
字号:
//Example 13 of Chapter 5
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class GUIDemo13 extends JFrame
{
//普通菜单的成员
JMenuBar bar;
private JMenu mainMenu[]; //主菜单
private JMenuItem item1[], item2[]; //前两个菜单的菜单项
private JMenu menu3, menu4[], menu5; //第三、四、五个菜单的菜单项
private String mainMenuName[] = { "文件(F)", "编辑(E)", "标签设定(L)", "字体设定(O)", "颜色设定(C)"};
private String item1Name[] = { "新建(N)", "打开(O)", "关闭(C)", "保存(S)", "另存为(A)", "退出(X)"};
private String item2Name[] = { "剪切(T)", "复制(C)", "粘贴(P)", "删除(L)", "查找(F)", "替换(R)", "全选(A)"};
private String menu4Name[] = { "Name", "Style", "Size",};
private JRadioButtonMenuItem text[], name[], size[], color[]; //四个单选按钮数组
private JCheckBoxMenuItem style[]; //多选按钮数组
private ButtonGroup textGroup, nameGroup, sizeGroup, colorGroup;//四个按钮组
private String textName[] = {"Java is a simple language",
"This is an example for menu",
"Today is Tuesday of week" };
private String nameName[] = { "Dialog", "DialogInput", "Monospaced", "Serif", "SansSerif" };
private String sizeName[] = { "16", "24", "32", "40" };
private String colorName[] = { "red", "green", "blue", "cyan" };
private Color colorValue[] = { Color.red, Color.green, Color.blue, Color.cyan }; //颜色组
private String styleName[] = { "BOLD", "ITALIC" };
private Font font;
private JLabel label;
//弹出菜单的成员
private JPopupMenu popupMenu;
private JRadioButtonMenuItem framesize[];
private String framesizeName[] = { "大尺寸", "小尺寸" };
private ButtonGroup framesizeGroup;
public GUIDemo13()
{
super( "菜单构建演示" );
//从上到下建立菜单的各个成员并由下到上地构建菜单
bar = new JMenuBar();
mainMenu = new JMenu[ mainMenuName.length ];
for(int i=0; i<mainMenuName.length; i++)
{
mainMenu[i] = new JMenu( mainMenuName[i] );
}
mainMenu[0].setToolTipText("文件操作");
mainMenu[0].setMnemonic(KeyEvent.VK_F);
mainMenu[1].setToolTipText("文件编辑");
mainMenu[1].setMnemonic(KeyEvent.VK_E);
mainMenu[2].setToolTipText("标签操作");
mainMenu[2].setMnemonic(KeyEvent.VK_L);
mainMenu[3].setToolTipText("字体操作");
mainMenu[3].setMnemonic(KeyEvent.VK_O);
mainMenu[4].setToolTipText("为标签设定颜色");
mainMenu[4].setMnemonic(KeyEvent.VK_C);
item1 = new JMenuItem[ item1Name.length ];
for(int i=0; i<item1Name.length; i++)
{
item1[i] = new JMenuItem( item1Name[i] );
}
item1[0].setMnemonic(KeyEvent.VK_N);
item1[0].setIcon( new ImageIcon( "new.gif" ));
item1[1].setMnemonic(KeyEvent.VK_O);
item1[1].setIcon( new ImageIcon( "open.gif" ));
item1[2].setMnemonic(KeyEvent.VK_C);
item1[3].setMnemonic(KeyEvent.VK_S);
item1[3].setIcon( new ImageIcon( "save.gif" ));
item1[4].setMnemonic(KeyEvent.VK_A);
item1[5].setMnemonic(KeyEvent.VK_X);
//为退出菜单项加载监听器
item1[5].addActionListener
(
new ActionListener()
{
public void actionPerformed( ActionEvent event )
{
System.exit( 0 );
}
}
);
item2 = new JMenuItem[ item2Name.length ];
for(int i=0; i<item2Name.length; i++)
{
item2[i] = new JMenuItem( item2Name[i] );
}
item2[0].setMnemonic(KeyEvent.VK_T);
item2[1].setMnemonic(KeyEvent.VK_C);
item2[2].setMnemonic(KeyEvent.VK_P);
item2[3].setMnemonic(KeyEvent.VK_L);
item2[4].setMnemonic(KeyEvent.VK_F);
item2[5].setMnemonic(KeyEvent.VK_R);
item2[6].setMnemonic(KeyEvent.VK_A);
menu3 = new JMenu( "标签设定" );
menu4 = new JMenu[ menu4Name.length ];
for(int i=0; i<menu4Name.length; i++)
{
menu4[i] = new JMenu( menu4Name[i] );
}
menu5 = new JMenu( "颜色设定" );
//由此开始加载监听器到四个单选按钮数组和多选按钮数组
ActionProcessor aprocessor = new ActionProcessor();
ItemProcessor iprocessor = new ItemProcessor();
textGroup = new ButtonGroup();
text = new JRadioButtonMenuItem[ textName.length ];
for(int i=0; i<textName.length; i++)
{
text[i] = new JRadioButtonMenuItem( textName[i] );
textGroup.add( text[i] );
menu3.add( text[i] );
text[i].addActionListener( aprocessor );
}
nameGroup = new ButtonGroup();
name = new JRadioButtonMenuItem[ nameName.length ];
for(int i=0; i<nameName.length; i++)
{
name[i] = new JRadioButtonMenuItem( nameName[i] );
nameGroup.add( name[i] );
menu4[0].add( name[i] );
name[i].addActionListener( aprocessor );
}
style = new JCheckBoxMenuItem[ styleName.length ];
for(int i=0; i<styleName.length; i++)
{
style[i] = new JCheckBoxMenuItem( styleName[i] );
menu4[1].add( style[i] );
style[i].addItemListener( iprocessor );
}
sizeGroup = new ButtonGroup();
size = new JRadioButtonMenuItem[ sizeName.length ];
for(int i=0; i<sizeName.length; i++)
{
size[i] = new JRadioButtonMenuItem( sizeName[i] );
sizeGroup.add( size[i] );
menu4[2].add( size[i] );
size[i].addActionListener( aprocessor );
}
colorGroup = new ButtonGroup();
color = new JRadioButtonMenuItem[ colorName.length ];
for(int i=0; i<colorName.length; i++)
{
color[i] = new JRadioButtonMenuItem( colorName[i] );
colorGroup.add( color[i] );
menu5.add( color[i] );
color[i].addActionListener( aprocessor );
}
mainMenu[0].add( item1[0] );
mainMenu[0].add( item1[1] );
mainMenu[0].add( item1[2] );
mainMenu[0].addSeparator();
mainMenu[0].add( item1[3] );
mainMenu[0].add( item1[4] );
mainMenu[0].addSeparator();
mainMenu[0].add( item1[5] );
mainMenu[1].add( item2[0] );
mainMenu[1].add( item2[1] );
mainMenu[1].add( item2[2] );
mainMenu[1].add( item2[3] );
mainMenu[1].addSeparator();
mainMenu[1].add( item2[4] );
mainMenu[1].add( item2[5] );
mainMenu[1].addSeparator();
mainMenu[1].add( item2[6] );
mainMenu[2].add( menu3 );
mainMenu[3].add( menu4[0] );
mainMenu[3].add( menu4[1] );
mainMenu[3].add( menu4[2] );
mainMenu[4].add( menu5 );
for(int i=0; i<mainMenu.length; i++)
{
bar.add( mainMenu[i] );
}
setJMenuBar( bar );
//到此主菜单构建完毕
//构建弹出菜单
popupMenu = new JPopupMenu();
framesizeGroup = new ButtonGroup();
framesize = new JRadioButtonMenuItem[ framesizeName.length ];
for(int i=0; i<framesizeName.length; i++)
{
framesize[i] = new JRadioButtonMenuItem( framesizeName[i] );
framesizeGroup.add( framesize[i] );
popupMenu.add( framesize[i] );
framesize[i].addActionListener( aprocessor );
}
label = new JLabel( "Now the label is empty",SwingConstants.CENTER );
font = new Font( "Monospaced", Font.PLAIN, 16);
label.setFont( font );
label.setForeground( Color.black );
getContentPane().setBackground( Color.yellow );
getContentPane().add( label, BorderLayout.CENTER );
//为主窗体加载鼠标监听器
addMouseListener
(
new MouseAdapter()
{
public void mousePressed( MouseEvent event )
{
if ( event.isPopupTrigger() )
popupMenu.show( event.getComponent(), event.getX(), event.getY() );
}
public void mouseReleased( MouseEvent event )
{
if ( event.isPopupTrigger() )
popupMenu.show( event.getComponent(), event.getX(), event.getY() );
}
}
);
setSize( 600, 160 );
setVisible( true );
}
public static void main( String args[] )
{
GUIDemo13 app = new GUIDemo13();
app.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}
private class ActionProcessor implements ActionListener
{
public void actionPerformed( ActionEvent event )
{
//逐个检验JRadioButtonMenuItem组
for ( int i = 0; i < text.length; i++ )
if( text[i].isSelected() )
{
label.setText( text[i].getText() );
break;
}
for ( int i = 0; i < name.length; i++ )
if( event.getSource() == name[i] )
{
font = new Font( name[i].getText(), font.getStyle(), font.getSize() );
label.setFont( font );
break;
}
for ( int i = 0; i < size.length; i++ )
if( event.getActionCommand() == size[i].getText() )
{
font = new Font( font.getName(), font.getStyle(), Integer.parseInt( size[i].getText()) );
label.setFont( font );
break;
}
for ( int i = 0; i < color.length; i++ )
if( color[i].isSelected() )
{
label.setForeground( colorValue[i] );
break;
}
if( framesize[0].isSelected() )
{
setSize( 700, 200 );
show();
}
if( framesize[1].isSelected() )
{
setSize( 600, 160 );
show();
}
repaint();
}
}
private class ItemProcessor implements ItemListener
{
public void itemStateChanged( ItemEvent e )
{
int tempStyle = 0;
if ( style[ 0 ].isSelected() ) tempStyle += Font.BOLD;
if ( style[ 1 ].isSelected() ) tempStyle += Font.ITALIC;
font = new Font( font.getName(), tempStyle, font.getSize() );
label.setFont( font );
repaint();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -