最近想构建多级菜单,并且在多级菜单里面添加下拉列表,所遇到的问题!
菜单栏JMenuBar 菜单JMenu 菜单项JMenuItem 组件Component
A:对于构建多级菜单的认识:
一个窗体里只能添加一个 JMenuBar
可以使用 JMenu 添加 JMenu 构建多级菜单。
不能使用 JMenuItem 添加任何 Component,否者添加 Component的 JMenuItem 将会消失在。
B:关于JMenu,JMenuItem,JList,JComboBox:
Jmenu添加JList,使用相对应的ListSelectionListener监听有效。
JMenu添加JComboBox,使用相对应的ItemStateChange监听无效。
关于记事本代码如下:
import java.awt.BorderLayout;
import java.awt.Font;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.event.*;
import java.io.*;
import java.util.Scanner;
class Note implements ActionListener{
private JFrame frame =new JFrame("狼子记事本");
private JMenuBar menuBar =new JMenuBar();
private JMenu menuFont=new JMenu("字体");
private JMenu menuSize=new JMenu("字体大小");
private JList<String> box=null;
private JMenu menuFile=new JMenu("文件");
private JMenuItem open=new JMenuItem("打开文件");
private JMenuItem save=new JMenuItem("保存文件");
private JLabel label=new JLabel("langzi");
private JTextArea text=new JTextArea(30,30);
private String str[]={"10","15","20","25","30","30","40","45","50","55","60","65","70","75","80","85","90"};
public Note() {
open.addActionListener(this);
save.addActionListener(this);
box=new JList<String>(str);
menuBar.add(menuFont); //构建多级菜单
menuBar.add(menuFile);
menuFont.add( menuSize);
menuSize.add(box);
menuFile.add(open);
menuFile.add(save);
frame.setJMenuBar(menuBar); //构建窗体
frame.setLayout(new BorderLayout());
frame.add(label,BorderLayout.NORTH);
frame.add(new JScrollPane(text),BorderLayout.CENTER);
frame.setVisible(true);
frame.pack();
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(1);
}
});
box.addListSelectionListener(new ListSelectionListener() { //字体大小监听
public void valueChanged(ListSelectionEvent e) {
int size=15;
int temp=box.getSelectedIndex();
String str=(String)box.getModel().getElementAt(temp);
size =Integer.parseInt(str);
changeSize(size);
}
});
}
public void changeSize(int size){ //字体改变的方法
Font font=new Font("1001",Font.BOLD,size);
this.label.setFont(font);
this.text.setFont(font);
}
public void actionPerformed(ActionEvent e){
int result=0;
File file=null;
if(e.getSource()==open){ //文件打开监听
JFileChooser fileChooser=new JFileChooser();
result=fileChooser.showOpenDialog(this.frame);
if(result==JFileChooser.APPROVE_OPTION){
text.setText("");
file=fileChooser.getSelectedFile();
label.setText("打开的文件名为"+file.getName());
}else if(result==JFileChooser.CANCEL_OPTION){
label.setText("langzi");
}else{
label.setText("文件操作有误");
}
if(file!=null){
try{
Scanner scan=new Scanner(new FileInputStream(file));
scan.useDelimiter("\n");
while(scan.hasNext()){
text.append(scan.next()+"\n");
}
scan.close();
}catch(Exception ee){
label.setText("文件读取失败");
}
}
}
if(e.getSource()==save){ //文件保存监听
JFileChooser fileChooser=new JFileChooser();
result=fileChooser.showSaveDialog(this.frame);
if(result==JFileChooser.APPROVE_OPTION){
file=fileChooser.getSelectedFile();
label.setText("保存的路径为 "+file.getPath());
}else if(result==JFileChooser.CANCEL_OPTION){
label.setText("langzi");
}else{
label.setText("文件操作有误");
}
if(file!=null){
try{
PrintStream out=new PrintStream(new FileOutputStream(file));
out.print(text.getText());
out.close();
}catch(Exception ee){
label.setText("文件保存失败");
}
}
}
}
}
public class R5{
public static void main(String args[]){
new Note();
}
}