⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 internalwindow.java

📁 关于JAVA的代码连接数据库
💻 JAVA
字号:
package GradeManagement;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

import java.util.Observable;
import java.util.Observer;

import GradeManagement.model.GradeModel;
import GradeManagement.ui.GradeView;
import GradeManagement.util.MyFileFilter;
import GradeManagement.util.FileReaderWriter;
import GradeManagement.util.SystemConstants;

public class InternalWindow extends JInternalFrame
   implements Observer {
   private static final int xOffset = 30; // 新窗口偏移x方向
   private static final int yOffset = 30; // 新窗口偏移y方向
   private static int openFrameCount = 0;

   //模型、视图、控制器等属性
   private GradeModel gradeModel;     // 声明数据模型类
   private GradeView gradeView;       // 声明视图类
   private GradeControl gradeControl; // 声明控制器类

   // 与文件管理有关的属性
   private JFileChooser fileChooser;
   private String fileName;
   private String absoluteFilePath;
   private boolean saved = true;

   // 工具条属性
   private MyToolBar toolBar;

   private Action saveAction, saveAsAction,addAction,
                  deleteAction,modifyAction,sortAction;
   private JFrame owner;

   // 内部窗口类构造方法
   public InternalWindow( String title ,JFrame owner) {
      super( title + " - " + ( ++openFrameCount ), true, true,
         false, true );
       this.owner = owner;
      setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE );

      gradeModel = new GradeModel();           // 创建模型对象
      gradeView = new GradeView( gradeModel ); // 创建视图类和控制类对象
      gradeControl = new GradeControl(owner,gradeModel);
      gradeModel.addObserver( this ); //注册内部类对象为观察者
      getContentPane().add(new JScrollPane(gradeView), BorderLayout.CENTER);

      fileChooser = new JFileChooser();               // 创建fileChooser
      fileChooser.setFileFilter( new MyFileFilter()); // 设置文件过滤器

      // 设置新窗口位置
      setLocation( xOffset * openFrameCount,
                   yOffset * openFrameCount );

      toolBar = new MyToolBar(); // 创建工具条对象
      getContentPane().add(toolBar, BorderLayout.NORTH);
      setSize( 700, 320 ); // 设置内部窗口大小
   } // 构造方法InternalWindow结束

   public Action getSaveAction() {
      return saveAction;
   }

   public Action getSaveAsAction() {
      return saveAsAction;
   }

   public void setSaved(boolean saved) {
      this.saved = saved;
      String title = getTitle();
      if ( !title.endsWith(" *") && !isSaved() )
         setTitle( title + " *" );
      else
         if ( title.endsWith( " *" ) && isSaved() )
            setTitle( title.substring( 0,
               title.length() - 2 ) );
      getSaveAction().setEnabled( !isSaved() );
   }

   public boolean isSaved() {
      return saved;
   }

   public void update(Observable observable, Object object) {
      //设置标志,表明学生信息已经修改
      setSaved( false );
   }

   public void setFileName(String file){
      fileName = file;
      setTitle( fileName );
   }

   public String getFileName() {
      return fileName;
   }

   public String getAbsoluteFilePath() {
      return absoluteFilePath;
   }

   public void setAbsoluteFilePath( String path ) {
      absoluteFilePath = path;
   }

   public GradeModel getModel() {
      return gradeModel;
   }

   public void setTitle( String title ) {
      super.setTitle( title );
   }

   public boolean close() {
      // 如果学生信息变更,提示用户保存
      if (!isSaved()) {
        int response = JOptionPane.showInternalConfirmDialog(
            this, "学生信息已修改,请您选择是否保存? " ,
            "确认保存", JOptionPane.YES_NO_CANCEL_OPTION,
            JOptionPane.QUESTION_MESSAGE );
         // 如用户选择保存,系统保存并关闭窗口
         if ( response == JOptionPane.YES_OPTION ) {
            saveRoster();
            dispose();
            return true;
         } else if ( response == JOptionPane.NO_OPTION ) {
            dispose(); //用户选择否,系统关闭窗口
            return true;
         }
         // 如用户选择取消,系统不作处理
         else
            return false;
      } else { //如信息已保存,直接关闭窗口
         dispose();
         return true;
      }
   } // 方法close结束

   //从文件载入学生信息
   public boolean openRoster() {
      //打开JFileChooser对话框
      int response = fileChooser.showOpenDialog(this);
      if ( response == fileChooser.APPROVE_OPTION ) {
         //取回用户选择的文件名
         String fileName = fileChooser.getSelectedFile().getAbsolutePath();
         //从文件中读取所有学生信息记录
         FileReaderWriter fileReader = new FileReaderWriter();
         fileReader.open(fileName);
         GradeModel student = fileReader.readFile();
         fileReader.close();
         gradeModel.setModel(student);
         // 设置文件名属性
         setFileName(fileChooser.getSelectedFile().getName());
         // 设置绝对路径属性
         setAbsoluteFilePath( fileName );
         setSaved(true);
         return true;
      }
      else
         return false;
   } // 方法openRoster结束

   //以文件形式保存学生记录
   public void saveRoster() {
      //取回文件保存的绝对路径
      String fileName = getAbsoluteFilePath();
      if ( fileName == null || fileName.equals( "" ) )
         saveRosterAs();
      // 将学生信息写入文件保存
      else {
        FileReaderWriter fileReader = new FileReaderWriter();
        fileReader.open(fileName);
        fileReader.writeFile(gradeModel);
        setSaved(true);
        fileReader.close();
      }
   } // 方法saveRoster结束

   // 另存为
   public void saveRosterAs() {
      // 显示另存为对话框
      int response = fileChooser.showSaveDialog( this );
      if ( response == fileChooser.APPROVE_OPTION ) {
         setAbsoluteFilePath(
            fileChooser.getSelectedFile().getAbsolutePath() );
         setFileName( fileChooser.getSelectedFile().getName() );
         FileReaderWriter fileReader = new FileReaderWriter();
         fileReader.open(getAbsoluteFilePath());
         fileReader.writeFile(gradeModel);
         fileReader.close();
         setSaved( true );
      }
   } // 方法saveRosterAs结束

   // 销毁内部窗口
   public void dispose() {
      super.dispose();
   }

   private class MyToolBar extends JToolBar {
      private JButton addButton,deleteButton,modifyButton,sortButton;
      private JCheckBox computeCheck;
      private JComboBox studentChoice;

      public MyToolBar() {
        studentChoice = new JComboBox(SystemConstants.STUDENTTYPE);
        studentChoice.setToolTipText( "先选择学生类型" );
        //注册选择学生类型事件监听器
        studentChoice.addActionListener(new ActionListener() {
               public void actionPerformed( ActionEvent event ) {
                  String studentType = studentChoice.getSelectedItem().toString();
                   if(!gradeControl.setType(studentType)){
                     JOptionPane.showMessageDialog(null, "先选学生类型,再进行其它操作",
                                           "先选学生类型", JOptionPane.ERROR_MESSAGE);
                     studentChoice.setSelectedItem(gradeControl.getType());
                   }
               }// actionPerformed方法结束
             }
            );

         // 创建保存 Action
         Icon saveIcon = new ImageIcon(
            InternalWindow.class.getResource("images/save.gif" ) );
         saveAction = new AbstractGradeAction( "Save", saveIcon,
            "保存", new Integer( 'S' ) ) {
               public void actionPerformed(ActionEvent event) {
                 saveRoster();
                }
              };

         // 创建另存为 Action
         Icon saveAsIcon = new ImageIcon(
            InternalWindow.class.getResource(
               "images/saveAs.gif" ) );
         saveAsAction = new AbstractGradeAction( "Save As",
            saveAsIcon, "另存为", new Integer( 'A' ) ) {
              public void actionPerformed(ActionEvent event) {
                 saveRosterAs();
              }
            };

         // 实例化增加按钮
         addButton = new JButton();
         // 创建增加按钮Action
         addAction = new AbstractGradeAction( "Add", null,
            "增加学生", new Integer( 'A' ) ) {
            public void actionPerformed( ActionEvent event ) {
              gradeControl.addStudent(owner);
            }
         };
         addButton.setAction( addAction );

         // 实例化删除按钮
         deleteButton = new JButton();
         deleteAction = new AbstractGradeAction( "Delete", null,
            "删除", new Integer( 'D' ) ) {
            public void actionPerformed( ActionEvent event )
            {
              gradeControl.deleteStudent();
            }
         };
         deleteButton.setAction( deleteAction );

         //实例化修改按钮
         modifyButton = new JButton();
         modifyAction = new AbstractGradeAction( "Modify", null,
            "修改", new Integer( 'M' ) ) {
            public void actionPerformed( ActionEvent event )
            {
              gradeControl.modifyStudent(owner);
            }
         };
         modifyButton.setAction( modifyAction );

         //实例化排序按钮
         sortButton = new JButton();
         sortAction = new AbstractGradeAction( "Sort", null,
            "按总成绩排序", new Integer( 'S' ) ) {
            public void actionPerformed( ActionEvent event ) {
              gradeControl.sort();
            }
         };
         sortButton.setAction( sortAction );

         //实例化复选框
         computeCheck = new JCheckBox("Compute");
         computeCheck.setToolTipText("计算总成绩及平均成绩");
         computeCheck.addItemListener(new  ItemListener(){
           public void itemStateChanged(ItemEvent e){
             if( e.getStateChange() == e.SELECTED)
               gradeControl.compute(true);
             else
               gradeControl.compute(false);
           }
          }
         );

         //将Actions、按钮等添加到工具条
         add( saveAction );
         add( saveAsAction );
         addSeparator();

         add(studentChoice);
         addSeparator();

         add( addButton );
         add( deleteButton );
         add( modifyButton );
         addSeparator();

         add( sortButton );
         add( computeCheck );
         setFloatable( false );
      } // 构造方法MyToolBar结束
   } // 类MyToolBar结束
} // 类InternalWindow结束

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -