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

📄 foldertablemodel.java

📁 一个用java写的mail.里面的代码值得我们去研究!学习。
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
      if ( progress != null ) {        progress.setValue( ++pVal );      }      boolean insert = false;      Message xmessage = messages_[ row ];      Object[] data = convData_[ row ];      for ( int di = 0 ; di < dV.size() ; ++di ) {        Object[] d = (Object[]) dV.elementAt( di );        if ( colClass == javax.swing.ImageIcon.class ) {          int v1 = getIconSortOrder( d[col] );          int v2 = getIconSortOrder( data[col] );          insert = asc ? ( v1 > v2 ) : ( v1 < v2 );        } else if ( colClass == java.lang.String.class ) {          String s1 = (String) d[col];          String s2 = (String) data[col];          int comp = s1.compareTo( s2 );          insert = asc ? ( comp > 0 ) : ( comp < 0 );        } else if ( colClass == java.util.Date.class ) {          Date d1 = (Date) d[col];          Date d2 = (Date) data[col];          if ( d1 != null && d2 != null ) {            insert = asc ? ( d1.before( d2 ) ) : ( d2.before( d1 ) );          }        } else if ( colClass == javax.swing.JLabel.class ) {          String s1 = ((JLabel) d[col]).getText();          String s2 = ((JLabel) data[col]).getText();          int comp = s1.compareTo( s2 );          insert = asc ? ( comp > 0 ) : ( comp < 0 );        }        if ( insert ) {          dV.insertElementAt( data, di );          mV.insertElementAt( xmessage, di );          break;        }      }      if ( ! insert ) {        dV.addElement( data );        mV.addElement( xmessage );      }    }    dV.copyInto( convData_ );    mV.copyInto( messages_ );    dV.removeAllElements();    mV.removeAllElements();        fireTableRowsUpdated( 0, messages_.length - 1 );  }  private int  getIconSortOrder( Object object ) {    if ( object == FolderTableModel.delMarkOnIcon  ) return 4;    if ( object == FolderTableModel.highMarkIcon   ) return 3;    if ( object == FolderTableModel.delMarkOffIcon ) return 2; // also normal priority    if ( object == FolderTableModel.lowMarkIcon    ) return 1;    return 0;  }//............................................................// Implementation of AbstractTableModel  /**   * <p>   * Implementation of java.swing.table.AbstractTableModel.getColumnName()   */  public String  getColumnName( int column ) {    return columnNames_[ column ];  }      /**   * <p>   * Implementation of java.swing.table.AbstractTableModel.getColumnClass()   */  public Class  getColumnClass( int column ) {    return columnTypes_[ column ];  }  /**   * <p>   * Implementation of java.swing.table.AbstractTableModel.getColumnCount()   */  public int  getColumnCount() {    return columnFields_.length;   }  /**   * <p>   * Implementation of java.swing.table.AbstractTableModel.getRowCount()   */  public int  getRowCount() {    if ( messages_ == null )      return 0;        return messages_.length;  }   /**   * <p>   * Implementation of java.swing.table.AbstractTableModel.getValueAt()   */  public Object  getValueAt( int aRow, int aColumn ) {    Object[] data = getConvertedData( aRow );    if ( data == null ) {      return "(null data)";    }        return data[ aColumn ];  }//............................................................  private Object[]  getConvertedData( int row ) {    int maxtries = 3;    if ( messages_ == null || row > convData_.length ) {      return null;    }        if ( convData_[ row ] == null ) {      int tries = 0;      for ( ; tries < maxtries ; ++tries ) {        try {          int numCols = columnFields_.length;          if ( useFetchProfile_ )            checkProfiledFetch( row );          Message xmessage = messages_[ row ];          Object[] xrowData = new Object[ numCols + 1 ];                // Make sure the folder didn't get closed        // by a timeout while we were not using it...          MailUtilities.setFolderOpenAndReady( folder_, Folder.READ_WRITE );          xrowData[ numCols ] = xmessage.getFlags();          for ( int c = 0 ; c < numCols ; ++c ) {            String fld = columnFields_[ c ];            if ( fld.equalsIgnoreCase( "FLAG" ) ) {              if ( xmessage.isSet( Flags.Flag.DELETED ) ) {                xrowData[c] = FolderTableModel.delMarkOnIcon;              } else {                xrowData[c] = FolderTableModel.delMarkOffIcon;              // mark messages with high and low priority indicators                if ( MessageUtilities.isHighPriority( xmessage ) ) {                  xrowData[c] = FolderTableModel.highMarkIcon;                } else if ( MessageUtilities.isLowPriority( xmessage ) ) {                  xrowData[c] = FolderTableModel.lowMarkIcon;                }              }            } else if ( fld.equalsIgnoreCase( "TO" ) ) {              Address[] adds = xmessage.getRecipients( Message.RecipientType.TO );              if ( adds != null && adds.length > 0 ) {                InternetAddress iAddr = (InternetAddress) adds[0];                String perStr = iAddr.getPersonal();                if ( perStr == null || perStr.length() == 0 )                  xrowData[c] = iAddr.getAddress();                else                  xrowData[c] = perStr;                if ( adds.length > 1 && adds[1] != null )                  xrowData[c] = ((String)xrowData[c]) + "...";              } else {                xrowData[c] = "";              }            } else if ( fld.equalsIgnoreCase( "FROM" ) ) {            // create a readable form of the from address              String xfrom = null;              Address[] adds = xmessage.getFrom();              if ( adds != null && adds.length > 0 ) {                InternetAddress iAddr = (InternetAddress) adds[0];                String perStr = iAddr.getPersonal();                if ( perStr == null || perStr.length() == 0 )                  xfrom = iAddr.getAddress();                else                  xfrom = perStr;                if ( adds.length > 1 && adds[1] != null )                  xfrom = xfrom + "...";              } else {                xfrom = "";              }            // select an icon based on the MIME message type              ImageIcon xicon = null;              ContentType xct = MessageUtilities.getContentType( xmessage );              if ( xct.match( "application/pkcs7-signature" ) ||     // new implementations                   xct.match( "application/x-pkcs7-signature" ) ||   // old implementations                   xct.match( "multipart/signed" ) ) {               // internet standard              // signed by some means                xicon = signedMarkIcon;              } else if ( xct.match( "application/pkcs7-mime" ) ||   // new implementations                          xct.match( "application/x-pkcs7-mime" ) || // old implementations                          xct.match( "multipart/encrypted" ) ) {     // internet standard              // encrypted or enveloped by some means                xicon = encryptMarkIcon;              } else if ( xct.match( "multipart/mixed" ) ) {              // attachments of some type                xicon = attachMarkIcon;              }              xrowData[c] = new JLabel( xfrom, xicon, SwingConstants.LEFT );            } else if ( fld.equalsIgnoreCase( "SENTDATE" ) ) {              xrowData[c] = xmessage.getSentDate();            } else if ( fld.equalsIgnoreCase( "RECVDATE" ) ) {              xrowData[c] = xmessage.getReceivedDate();            } else if ( fld.equalsIgnoreCase( "SUBJECT" ) ) {              String subject = xmessage.getSubject();              if ( subject != null ) {                xrowData[c] = subject;              } else {                xrowData[c] = "(No Subject)";              }            } else {              System.err.println( "UNKNOWN FIELD TYPE '" + fld + "' in column " +                                  c + " of MsgTable." );              break;            }          }                  convData_[ row ] = xrowData;          break;        } catch ( FolderClosedException ex ) {          if ( tries >= (maxtries - 1) ) {            System.err.println( "FOLDER CLOSED!" );            // ex.printStackTrace();          } else {            try {              MailUtilities.setFolderOpenAndReady( folder_, Folder.READ_WRITE );              try {                Thread.currentThread().sleep( 500 );              } catch ( InterruptedException ex3 ) {              }            } catch ( MessagingException ex2 ) {              ex2.printStackTrace();              break;            }          }        } catch ( MessagingException ex ) {          ex.printStackTrace();        }      }      if ( tries >= maxtries ) {        (new Throwable( "MAX TRIES row=" + row )).printStackTrace();      }    }    return convData_[ row ];  }  /**   * @see getConvertedData()   */  private void  checkProfiledFetch( int row ) throws MessagingException {    if ( row >= nextFetchRow_ ) {      int newNext = row + fetchQuantum_;      if ( newNext >= messages_.length )        newNext = messages_.length;      int num = newNext - nextFetchRow_;      Message[] fMsgs = new Message[ num ];      for ( int i = 0 ; i < num ; ++i ) {        fMsgs[i] = messages_[ nextFetchRow_ + i];      }      FetchProfile fp = new FetchProfile();      fp.add( FetchProfile.Item.ENVELOPE );      fp.add( FetchProfile.Item.FLAGS );      MailUtilities.setFolderOpenAndReady( folder_, Folder.READ_WRITE );      folder_.fetch( fMsgs, fp );      nextFetchRow_ = newNext;    }  }//............................................................  private class FTMCounterAdapter    extends MessageCountAdapter  {    public    FTMCounterAdapter() {      super();    }    public void    messagesAdded( MessageCountEvent event ) {      MailEventThread.getInstance().notifyIncomingMail( folder_, true );    }    public void    addNewMessages( Message[] addMsgs ) {      synchronized ( FolderTableModel.this ) {        Message[] oldMsgs = messages_;        int oldLen = oldMsgs.length;        int addLen = addMsgs.length;        int newLen = oldLen + addLen;        if ( Package.DEBUG && Debug_ > 0 ) {          System.out.println( "FTMCounterAdapter.addNewMessages(): NewCount=" + addLen +                              "  OldCount=" + oldLen + "  NewLen=" + newLen );        }        int m = 0;        Message[] newMsgs = new Message[ newLen ];                for ( int a = 0  ; a < addLen ; ) {          newMsgs[m++] = addMsgs[a++];        }        for ( int o = 0  ; o < oldLen ; ) {          newMsgs[m++] = oldMsgs[o++];        }        messages_ = newMsgs;        Object[][] newCache = new Object[ newLen ][];        int c = 0;        for ( int a = 0  ; a < addLen ; ++a ) {          newCache[c++] = null;        }        for ( int o = 0 ; o < oldLen ; ) {          newCache[c++] = convData_[o++];        }        convData_ = newCache;        fireTableRowsInserted( 0, addLen - 1 );        //fireRowsInserted( 0, addLen - 1 );      }    }  }}

⌨️ 快捷键说明

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