hkbmwcn

2008年1月18日 #

关于JInternalFrame去掉Title bar的问题

自己实在是个懒人,blog难得更新一次,更新也是一些鸡毛蒜皮的小东西。不过还是希望能对其他朋友或自己将来遇到类似问题能有个解答。最新在做一个swing项目,客户要求能把JInternalFrame的Title bar去掉,同时还能加回来。由于网上搜一下没有找到解决办法,只能自己研究一下并改了下JInternalFrame,先记录如下:


import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Rectangle;
import java.awt.event.ComponentEvent;
import java.awt.peer.ComponentPeer;
import java.beans.PropertyVetoException;

import javax.swing.ActionMap;
import javax.swing.BorderFactory;
import javax.swing.JComponent;
import javax.swing.JDesktopPane;
import javax.swing.JInternalFrame;
import javax.swing.UIManager;
import javax.swing.plaf.InternalFrameUI;
import javax.swing.plaf.basic.BasicInternalFrameUI;

public class MCOCInternalFrame extends JInternalFrame {
    
    //private String lookAndFeel = null;
    BasicInternalFrameUI orgUi = null;
    BasicInternalFrameUI newUi = null;
    JComponent northPanel = null;
    private boolean isHidden = false;

    
    public MCOCInternalFrame() {
        super();

        northPanel = ((javax.swing.plaf.basic.BasicInternalFrameUI) this.getUI()).getNorthPane();
        orgUi = ((javax.swing.plaf.basic.BasicInternalFrameUI) this.getUI());
        newUi = new BasicInternalFrameUI(this);        
    }
    
    
    public void showNorthPanel() {

        
        this.setUI(orgUi);
        this.putClientProperty("JInternalFrame.isPalette", Boolean.FALSE);
        isHidden = false;

    }
    
    public void hideNorthPanel() {
        this.setUI(newUi);
        ((javax.swing.plaf.basic.BasicInternalFrameUI) this.getUI()).setNorthPane(null);
        this.putClientProperty("JInternalFrame.isPalette", Boolean.TRUE);
        isHidden = true;
        
    }
    
     public void updateUI() {
        
            super.updateUI();
            if (isHidden) {
                hideNorthPanel();
            }
     }


}

创建该InternalFrame对象后,通过showNorthPanel(), hideNorthPanel()来显示或隐藏title bar,另外updateUI()重写是因为界面被动态改变lookandfeel时,保证title bar上多的一小个bar出现。


posted @ 2008-01-18 22:02 亘古顽石 阅读(629) | 评论 (0)编辑 收藏

javax mail 发送邮件及附件

MailSender.java

import java.util.ArrayList;
import java.util.Iterator;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

import org.apache.log4j.Logger;

public class MailSender {
 public static Logger logger = Logger.getLogger(MailSender.class);
 public static boolean send(Mail mail) throws Exception {
  try {
   Properties props = new Properties();
   props.put("mail.smtp.host", "localhost");
   Session session = Session.getDefaultInstance(props, null);
   MimeMessage mimemessage = new MimeMessage(session);
   mimemessage.setFrom(new InternetAddress(mail.getFrom()));
   mimemessage.setSentDate(mail.getDate());
   // set SUBJECT
   mimemessage.setSubject(mail.getSubject());

   // set TO address
   String mailto = mail.getTo();
   String ccmailid = mail.getCcusers();
   String strResult = "";
   try {
    mimemessage.setRecipients(javax.mail.Message.RecipientType.TO,
      mailto);
   } catch (Exception exception1) {
    throw exception1;
   }

   // set message BODY
   MimeBodyPart mimebodypart = new MimeBodyPart();
   mimebodypart.setText(mail.getContent());

   // attach message BODY
   MimeMultipart mimemultipart = new MimeMultipart();
   mimemultipart.addBodyPart(mimebodypart);

   // attach FILE
   ArrayList attachedFileList = mail.getAttachedFileList();
   if (attachedFileList != null) {
    DataSource ds = null;;
    for (Iterator e = attachedFileList.iterator(); e.hasNext();) {
     ds = (DataSource) e.next();
     mimebodypart = new MimeBodyPart();
     try {
      mimebodypart.setDataHandler(new DataHandler(
        ds));
     } catch (Exception exception3) {
      throw exception3;
     }
     mimebodypart.setFileName(ds.getName()); // set FILENAME
     mimemultipart.addBodyPart(mimebodypart);
    }
   }// end if
   mimemessage.setContent(mimemultipart);
   // set CC MAIL and SEND the mail
   if (!mailto.equals("")) {
    // set CC MAIL
    if (ccmailid != null && (!ccmailid.equals("")))
     mimemessage.setRecipients(
       javax.mail.Message.RecipientType.CC, ccmailid);
    try {
     // send MAIL
     Transport.send(mimemessage);
     logger.info(mailto + " Sent Successfully..........");
    } catch (Exception exception4) {
     throw exception4;
    }
   } else {
    logger.info(mailto + " Mail operation Failed..........");
   }
  } catch (Exception e) {
   throw e;
  }
  return true;
 }

}

Mail.java
import java.util.ArrayList;
import java.util.Date;
import java.util.StringTokenizer;

public class Mail {
 
 private String from = null;
 private String to = null;
 private String subject = null;
 private String content = null;
 private String ccusers = null;
 private ArrayList attachedFileList = null;
 private Date date = null;

 public Mail() {
  // TODO Auto-generated constructor stub
 }

 public ArrayList getAttachedFileList() {
  return attachedFileList;
 }

 public void setAttachedFileList(ArrayList attachedFileList) {
  this.attachedFileList = attachedFileList;
 }

 


 public String getContent() {
  return content;
 }

 public void setContent(String content) {
  this.content = content;
 }

 public String getFrom() {
  return from;
 }

 public void setFrom(String from) {
  this.from = from;
 }

 public String getSubject() {
  return subject;
 }

 public void setSubject(String subject) {
  this.subject = subject;
 }

 public String getTo() {
  return to;
 }

 public void setTo(String to) {
  this.to = to;
 }

 public Date getDate() {
  return date;
 }

 public void setDate(Date date) {
  this.date = date;
 }

 public String getCcusers() {
  return ccusers;
 }

 public void setCcusers(String ccusers) {
  this.ccusers = ccusers;
 }

}




posted @ 2008-01-18 21:50 亘古顽石 阅读(2065) | 评论 (1)编辑 收藏

2007年7月30日 #

密码的加解密

很长时间没有更新自己的blog了,最近忙一个基于alfreco的项目开发,赶快把用到的一些东西记录一下,谁让自己记性不好呢。这里是password的加解密:
PasswordUtil.java

import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.Security;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

public class PasswordUtil {
 public final static int ITERATION_NUMBER = 1000;
 public static final String algorithm = "Blowfish";// we can use DES,DESede,Blowfish
 
 /**
  *
  * @param password
  * @return
  * @throws Exception
  */
 public static PasswordBean encry(String password) throws Exception {
  Security.addProvider(new com.sun.crypto.provider.SunJCE());

  try {
   KeyGenerator keygen = KeyGenerator.getInstance(algorithm);
   SecretKey deskey = keygen.generateKey();
   Cipher c1 = Cipher.getInstance(algorithm);
   c1.init(Cipher.ENCRYPT_MODE, deskey);
   byte[] cipherByte = c1.doFinal(password.getBytes());
   String saltKey = PasswordUtil.byteToBase64(deskey.getEncoded());
   String pass = PasswordUtil.byteToBase64(cipherByte);
   return new PasswordBean(saltKey, pass);
   //System.out.println("After encry:" + key + "====" + password);
  } catch (Exception e) {
   throw e;
  }
 }
 
 /**
  *
  * @param bean
  * @return
  * @throws Exception
  */
 public static String decry(PasswordBean bean) throws Exception {
  return decry(bean.getSaltKey(), bean.getPassword());
 }
 
 /**
  *
  * @param saltKey
  * @param pass
  * @return
  * @throws Exception
  */
 public static String decry(String saltKey, String pass) throws Exception {
  //Security.addProvider(new com.sun.crypto.provider.SunJCE());
  try {
   Security.addProvider(new com.sun.crypto.provider.SunJCE());
   byte[] keyser = PasswordUtil.base64ToByte(saltKey);
   javax.crypto.spec.SecretKeySpec destmp = new javax.crypto.spec.SecretKeySpec(keyser, algorithm);
   SecretKey mydeskey = destmp;

   Cipher c1 = Cipher.getInstance(algorithm);
   c1.init(Cipher.DECRYPT_MODE, mydeskey);
   byte[] clearByte = c1.doFinal(PasswordUtil.base64ToByte(pass));
   return new String(clearByte);
  } catch (Exception e) {
   //e.printStackTrace();
   System.out.println("saltKey:" + saltKey + "   pass:" + pass) ;
   throw e;
  }
 }
 
 
 
 /**
  * From a password, a number of iterations and a salt, returns the
  * corresponding digest
  *
  * @param iterationNb
  *            int The number of iterations of the algorithm
  * @param password
  *            String The password to encrypt
  * @param salt
  *            byte[] The salt
  * @return byte[] The digested password
  * @throws NoSuchAlgorithmException
  *             If the algorithm doesn't exist
  */
 public static byte[] getHash(int iterationNb, String password, byte[] salt)
   throws NoSuchAlgorithmException {
  MessageDigest digest = MessageDigest.getInstance("SHA-1");
  digest.reset();
  digest.update(salt);
  byte[] input = digest.digest(password.getBytes());
  for (int i = 0; i < iterationNb; i++) {
   digest.reset();
   input = digest.digest(input);
  }
  return input;
 }

 /**
  * From a base 64 representation, returns the corresponding byte[]
  *
  * @param data
  *            String The base64 representation
  * @return byte[]
  * @throws IOException
  */
 public static byte[] base64ToByte(String data) throws IOException {
  BASE64Decoder decoder = new BASE64Decoder();
  return decoder.decodeBuffer(data);
 }

 /**
  * From a byte[] returns a base 64 representation
  *
  * @param data
  *            byte[]
  * @return String
  * @throws IOException
  */
 public static String byteToBase64(byte[] data) {
  BASE64Encoder endecoder = new BASE64Encoder();
  return endecoder.encode(data);
 }
}

PasswordBean.java

public class PasswordBean {
 
 private String saltKey = null;
 private String password = null;

 public PasswordBean(String key, String pass) {
  this.saltKey = key;
  this.password = pass;
 }
 
 public String getPassword() {
  return password;
 }
 public void setPassword(String password) {
  this.password = password;
 }
 public String getSaltKey() {
  return saltKey;
 }
 public void setSaltKey(String saltKey) {
  this.saltKey = saltKey;
 }
 
}


使用的时候可以是:
String password = PasswordUtil.decry(salt, encodePassword);
PasswordBean passwordBean = PasswordUtil.encry(password);

posted @ 2007-07-30 10:42 亘古顽石 阅读(342) | 评论 (0)编辑 收藏

2007年3月28日 #

System.getProperty()参数大全

常用到System.getProperty(), 而参数老不记得,这里贴一下,省得下次麻烦.

java.version

Java Runtime Environment version
java.vendorJava Runtime Environment vendor
java.vendor.urlJava vendor URL
java.homeJava installation directory
java.vm.specification.versionJava Virtual Machine specification version
java.vm.specification.vendorJava Virtual Machine specification vendor
java.vm.specification.nameJava Virtual Machine specification name
java.vm.versionJava Virtual Machine implementation version
java.vm.vendorJava Virtual Machine implementation vendor
java.vm.nameJava Virtual Machine implementation name
java.specification.versionJava Runtime Environment specification version
java.specification.vendorJava Runtime Environment specification vendor
java.specification.nameJava Runtime Environment specification name
java.class.versionJava class format version number
java.class.pathJava class path
java.library.pathList of paths to search when loading libraries
java.io.tmpdirDefault temp file path
java.compilerName of JIT compiler to use
java.ext.dirsPath of extension directory or directories
os.nameOperating system name
os.archOperating system architecture
os.versionOperating system version
file.separatorFile separator ("/" on UNIX)
path.separatorPath separator (":" on UNIX)
line.separatorLine separator ("\n" on UNIX)
user.nameUser's account name
user.homeUser's home directory
user.dirUser's current working directory

posted @ 2007-03-28 20:12 亘古顽石 阅读(306) | 评论 (0)编辑 收藏

2006年9月10日 #

一个时代的结束!

说实话,一直不想在这里写一些不是关于技术方面的东西.但是今天,我实在想写一点什么:今天舒马赫宣布退役了!
令我自己也想不通,为什么是今天.而不是米卡.哈基宁退出F1的那一天,也不是Montoya退出的那一天.因为我一直是他们两个的车迷!自98年开始看F1以来,一直是一个不向着舒马赫的车迷(倒和维纶纽夫差不多,不过我可没那本事和舒米对着干!呵呵).
刚开始,一直喜欢哈基宁,因为只有他才能从舒马赫手中夺取年度冠军,而且不止一次!但是随着Ferrari的强盛一时,麦克拉伦没落了,我心中的英雄也暗然退去.然后,激情四射的哥伦比亚人Montoya来了,他也一度给舒米制造了不少麻烦,而且看他开车我也会充满激情.而且最喜欢他跑今天的蒙扎赛道.在Williams时就在蒙扎取的过冠军,去年也是,可是今年呢?昔日的蒙扎英雄何在?
哈基宁的退出令人伤心,长期的压抑作为他的车迷也可以感受到他的心情.Montoya的退出实在是太突然了,突然的我都不会说话了.
今天舒米也退了,作为车迷还是很伤心,毕竟我的偶像们都曾是他的手下败将!他的技术却实高人一等,虽然不少时候他也做法卑鄙,毕竟是人嘛!也可以理解.
所以今天写点胡话,纪念一下舒米,同时也为追忆(当然不恰当的说法拉)一下我的两位偶像!

posted @ 2006-09-10 23:27 亘古顽石 阅读(186) | 评论 (0)编辑 收藏

2006年9月6日 #

debian etch中设置postgresql 8.1

数据库方面一直喜欢用postgresql,最近重装了debian.安装的时候发现可以用apt-get 方法安装postgresql了,就安装了一个.结果装完发现居然没有启动,仔细一看初始化也没做,debian这一点做的有点不应该阿!!于是自己重新 做了一下.现在记下来,不要下次忘了.HOHO!记性不好.
用postgres登录,切换到目录/usr/lib/postgresql/8.1/bin(是系统安装的目录,居然没有设置成Path汗).运行./initdb -D /usr/local/pgsql/data(当然,后面的目录也没有,自己建先),成功运行以后就可以启动了. ./postmaster -D /usr/local/pgsql/data
不知道debian安装默认允许非本机用户登录伐,我先看看...

posted @ 2006-09-06 16:44 亘古顽石 阅读(385) | 评论 (0)编辑 收藏

2006年4月20日 #

用regular expressoions判断url合法性

在网上可以看到很多判断判断url是否合法的regular expressions.但是经常是要么缺少protocol,要么缺少port的判断,这里自己写一个:
 public static boolean isValidURL(String value) {
  Pattern pattern = Pattern.compile("(.*://)?([\\w-]+\\.)+[\\w-]+(:\\d+)?(/[^/.]*)*(/[^/]+\\.[^/\\?]+)(\\?&*([^&=]+=[^&=]*)&*(&[^&=]+=[^&=]*)*&*)");
  Matcher m = pattern.matcher(value);
  if (m.matches())
   return true;
  
  return false;
 }

判断url中data是否符合规则:
&*([^&=]+=[^&=]*)&*(&[^&=]+=[^&=]*)*&*

posted @ 2006-04-20 10:42 亘古顽石 阅读(717) | 评论 (1)编辑 收藏

2006年1月13日 #

rcp 程序最小化窗口到系统托盘

在RCP程序中最小化窗口到系统托盘并不像SWT程序那样直接。在网上找了一段代码,自己试验通过了,现在贴出来大家分享。
在RCP中继承WorkbenchAdvisor的子类中添加下面代码就可以了。

 public void postStartup() {
  super.postStartup();
  final Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
  shell.addShellListener(new ShellAdapter() {
   public void shellIconified(ShellEvent e) {
    shell.setVisible(false);
   }
  });
  createSystemTray();

 }

 private void createSystemTray() {
  Tray tray = Display.getDefault().getSystemTray();
  TrayItem item = new TrayItem(tray, SWT.NONE);
  item.setText("JDishNetwork");
  item.setToolTipText("JDishNetwork");
  Image image = new Image(Display.getDefault(), 16, 16);
  item.setImage(image);
  this.trayManager = new TrayItemManager();
  item.addSelectionListener(this.trayManager);
  item.addListener(SWT.MenuDetect, this.trayManager);
 }

 private class TrayItemManager implements SelectionListener, Listener {
  // TODO: Convert to one class
  private final class WindowStateListener extends SelectionAdapter {
   public void widgetSelected(SelectionEvent e) {
    minimizeWindow();
   }
  }
  private final class RestoreWindowListener extends SelectionAdapter {
   public void widgetSelected(SelectionEvent e) {
    restoreWindow();
   }
  }
  private boolean minimized = false;
  private Menu menu;
  private MenuItem[] menuItems = new MenuItem[0];
  private RestoreWindowListener restoreWindowListener;
  private WindowStateListener minimizeWindowListener;

  public TrayItemManager() {
   this.menu = new Menu(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), SWT.POP_UP);
   this.restoreWindowListener = new RestoreWindowListener();
   this.minimizeWindowListener = new WindowStateListener();

  }

  protected void closeApplication() {
   PlatformUI.getWorkbench().close();
  }

  public void widgetSelected(SelectionEvent e) {
   //
  }

  public void widgetDefaultSelected(SelectionEvent e) {
   if (this.minimized) {
    restoreWindow();
   } else {
    minimizeWindow();
   }
  }

  protected void minimizeWindow() {
   PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell().setMinimized(true);
   this.minimized = true;
  }

  protected void restoreWindow() {
   Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
   shell.open();
   shell.setMinimized(false);
   shell.forceActive();
   shell.forceFocus();
   this.minimized = false;
  }

  public void showMenu() {
   clearItems();
   MenuItem mi;
   MenuItem closeItem;
   mi = new MenuItem(this.menu, SWT.PUSH);
   closeItem = new MenuItem(this.menu, SWT.NONE);
   closeItem.setText("Close");
   closeItem.addSelectionListener(new SelectionAdapter() {
    public void widgetSelected(SelectionEvent e) {
     closeApplication();
    }
   });
   this.menuItems = new MenuItem[] { mi, closeItem };

   if (this.minimized) {
    mi.setText("Maximize");
    mi.addSelectionListener(this.restoreWindowListener);
   } else {
    mi.setText("Minimize");
    mi.addSelectionListener(this.minimizeWindowListener);
   }
   this.menu.setVisible(true);
  }

  private void clearItems() {
   for (int i = 0; i < this.menuItems.length; i++) {
    MenuItem item = this.menuItems[i];
    item.removeSelectionListener(this.minimizeWindowListener);
    item.removeSelectionListener(this.restoreWindowListener);
    this.menuItems[i].dispose();
   }
  }

  public void handleEvent(Event event) {
   showMenu();
  }

 }

posted @ 2006-01-13 15:31 亘古顽石 阅读(878) | 评论 (0)编辑 收藏

2005年12月6日 #

我的source.list

deb http://ftp.hk.debian.org/debian/ sid main
deb http://ftp.hk.debian.org/debian/ experimental main
#deb http://pkg-gnome.alioth.debian.org/debian/ experimental main
deb http://security.debian.org/ testing/updates main
#deb http://ftp.debian.org/debian/ testing main

posted @ 2005-12-06 13:07 亘古顽石 阅读(315) | 评论 (0)编辑 收藏

2005年11月30日 #

SWT browser类修改

     摘要: 在swt提供的browser 类中间,缺少不少有用的方法。我在使用时用到两个,getText()和setUrl(String url, String post_data),分别取得当前打开页面的原代码和采用post方式打开页面。现在修改Browser类如下:/**********************************************************************...  阅读全文

posted @ 2005-11-30 10:25 亘古顽石 阅读(3748) | 评论 (2)编辑 收藏

仅列出标题