??xml version="1.0" encoding="utf-8" standalone="yes"?>日本视频中文字幕一区二区三区,avav免费在线观看,欧美综合影院http://www.aygfsteel.com/jianke/category/19363.html大头剑客工作? QQ:42379970zh-cnSat, 29 Sep 2007 09:37:45 GMTSat, 29 Sep 2007 09:37:45 GMT60自己~写的计器http://www.aygfsteel.com/jianke/articles/149584.html大头剑客大头剑客Sat, 29 Sep 2007 07:27:00 GMThttp://www.aygfsteel.com/jianke/articles/149584.htmlhttp://www.aygfsteel.com/jianke/comments/149584.htmlhttp://www.aygfsteel.com/jianke/articles/149584.html#Feedback0http://www.aygfsteel.com/jianke/comments/commentRss/149584.htmlhttp://www.aygfsteel.com/jianke/services/trackbacks/149584.html

package cal.test;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class CalTest extends JFrame implements ActionListener
{
 private static final long serialVersionUID = 1L;
 private JPanel jContentPane = null;
 private JTextField tf = null;
 private JButton Backspace = null;
 private JButton clear = null;
 private JButton bt7 = null;
 private JButton bt8 = null;
 private JButton bt9 = null;
 private JButton bt11 = null;
 private JButton sqrt = null;
 private JButton bt4 = null;
 private JButton bt5 = null;
 private JButton bt6 = null;
 private JButton bt12 = null;
 private JButton bt13 = null;
 private JButton bt1 = null;
 private JButton bt2 = null;
 private JButton bt3 = null;
 private JButton bt14 = null;
 private JButton jButton = null;
 private JButton bt15 = null;
 private JButton bt0 = null;
 private JButton bt16 = null;
 private JButton bt17 = null;
 private JButton bt18 = null;
 private JButton bt19 = null;
 
 
 boolean com=false;//用来判断是否点击q?+-*/"
 boolean rs=false;//是否点击q?='
 boolean qm=false;//取模
 int flag=0;
 int i=0;
 String beforeNum="";  //  @jve:decl-index=0:
 String afterNum="";  //  @jve:decl-index=0:
 
 private JTextField getTf()
 {
  if (tf == null)
  {
   tf = new JTextField();
   tf.setBounds(new Rectangle(5, 3, 283, 24));
  }
  return tf;
 }

 private JButton getBackspace() {
  if (Backspace == null) {
   Backspace = new JButton();
   Backspace.setBounds(new Rectangle(35, 41, 80, 28));
   Backspace.setText("C");
   Backspace.setForeground(Color.RED);
   Backspace.setFont(new Font("",Font.BOLD,15));
   Backspace.addActionListener(this);
  }
  return Backspace;
 }

 private JButton getClear() {
  if (clear == null) {
   clear = new JButton();
   clear.setBounds(new Rectangle(150, 41, 110, 28));
   clear.setText("Backspace");
   clear.setForeground(Color.RED);
   clear.setFont(new Font("",Font.BOLD,15));
   clear.addActionListener(this);
  }
  return clear;
 }

 private JButton getBt7() {
  if (bt7 == null) {
   bt7 = new JButton();
   bt7.setBounds(new Rectangle(3, 83, 53, 30));
   bt7.setText("7");
   bt7.setForeground(Color.BLUE);
   bt7.setFont(new Font("",Font.BOLD,15));
   bt7.addActionListener(this);
  }
  return bt7;
 }

 private JButton getBt8() {
  if (bt8 == null) {
   bt8 = new JButton();
   bt8.setBounds(new Rectangle(59, 83, 53, 30));
   bt8.setText("8");
   bt8.setForeground(Color.BLUE);
   bt8.setFont(new Font("",Font.BOLD,15));
   bt8.addActionListener(this);
  }
  return bt8;
 }

 private JButton getBt9() {
  if (bt9 == null) {
   bt9 = new JButton();
   bt9.setBounds(new Rectangle(117, 83, 53, 30));
   bt9.setText("9");
   bt9.setForeground(Color.BLUE);
   bt9.setFont(new Font("",Font.BOLD,15));
   bt9.addActionListener(this);
  }
  return bt9;
 }

 private JButton getBt11() {
  if (bt11 == null) {
   bt11 = new JButton();
   bt11.setBounds(new Rectangle(175, 83, 53, 30));
   bt11.setText("/");
   bt11.setForeground(Color.RED);
   bt11.setFont(new Font("",Font.BOLD,15));
   bt11.addActionListener(this);
  }
  return bt11;
 }

 private JButton getSqrt() {
  if (sqrt == null) {
   sqrt = new JButton();
   sqrt.setBounds(new Rectangle(233, 83, 53, 30));
   sqrt.setText("sqrt");
   sqrt.setForeground(Color.BLUE);
   sqrt.addActionListener(this);
   //sqrt.setFont(new Font("",Font.BOLD,10));
  }
  return sqrt;
 }

 private JButton getBt4() {
  if (bt4 == null) {
   bt4 = new JButton();
   bt4.setBounds(new Rectangle(3, 125, 53, 30));
   bt4.setText("4");
   bt4.setForeground(Color.BLUE);
   bt4.setFont(new Font("",Font.BOLD,15));
   bt4.addActionListener(this);
  }
  return bt4;
 }

 private JButton getBt5() {
  if (bt5 == null) {
   bt5 = new JButton();
   bt5.setBounds(new Rectangle(59, 125, 53, 30));
   bt5.setText("5");
   bt5.setForeground(Color.BLUE);
   bt5.setFont(new Font("",Font.BOLD,15));
   bt5.addActionListener(this);
  }
  return bt5;
 }

 private JButton getBt6() {
  if (bt6 == null) {
   bt6 = new JButton();
   bt6.setBounds(new Rectangle(117, 125, 53, 30));
   bt6.setText("6");
   bt6.setForeground(Color.BLUE);
   bt6.setFont(new Font("",Font.BOLD,15));
   bt6.addActionListener(this);
  }
  return bt6;
 }

 private JButton getBt12() {
  if (bt12 == null) {
   bt12 = new JButton();
   bt12.setBounds(new Rectangle(175, 125, 53, 30));
   bt12.setText("*");
   bt12.setForeground(Color.RED);
   bt12.setFont(new Font("",Font.BOLD,18));
   bt12.addActionListener(this);
  }
  return bt12;
 }

 private JButton getBt13() {
  if (bt13 == null) {
   bt13 = new JButton();
   bt13.setBounds(new Rectangle(233, 125, 53, 30));
   bt13.setText("%");
   bt13.setForeground(Color.BLUE);
   bt13.setFont(new Font("",Font.BOLD,15));
   bt13.addActionListener(this);
  }
  return bt13;
 }

 private JButton getBt1() {
  if (bt1 == null) {
   bt1 = new JButton();
   bt1.setBounds(new Rectangle(3, 167, 53, 30));
   bt1.setText("1");
   bt1.setForeground(Color.BLUE);
   bt1.setFont(new Font("",Font.BOLD,15));
   bt1.addActionListener(this);
  }
  return bt1;
 }

 private JButton getBt2() {
  if (bt2 == null) {
   bt2 = new JButton();
   bt2.setBounds(new Rectangle(59, 167, 53, 30));
   bt2.setText("2");
   bt2.setForeground(Color.BLUE);
   bt2.setFont(new Font("",Font.BOLD,15));
   bt2.addActionListener(this);
  }
  return bt2;
 }

 private JButton getBt3() {
  if (bt3 == null) {
   bt3 = new JButton();
   bt3.setBounds(new Rectangle(117, 167, 53, 30));
   bt3.setText("3");
   bt3.setForeground(Color.BLUE);
   bt3.setFont(new Font("",Font.BOLD,15));
   bt3.addActionListener(this);
  }
  return bt3;
 }

 private JButton getBt14() {
  if (bt14 == null) {
   bt14 = new JButton();
   bt14.setBounds(new Rectangle(175, 167, 53, 30));
   bt14.setText("-");
   bt14.setForeground(Color.RED);
   bt14.setFont(new Font("",Font.BOLD,18));
   bt14.addActionListener(this);
  }
  return bt14;
 }

 private JButton getJButton() {
  if (jButton == null) {
   jButton = new JButton();
   jButton.setBounds(new Rectangle());
   jButton.setText("1/x");
   jButton.addActionListener(this);
  }
  return jButton;
 }
 
 private JButton getBt15() {
  if (bt15 == null) {
   bt15 = new JButton();
   bt15.setBounds(new Rectangle(233, 167, 53, 30));
   bt15.setText("1/x");
   bt15.setForeground(Color.BLUE);
   bt15.setFont(new Font("",Font.BOLD,15));
   bt15.addActionListener(this);
  }
  return bt15;
 }

 private JButton getBt0() {
  if (bt0 == null) {
   bt0 = new JButton();
   bt0.setBounds(new Rectangle(3, 209, 53, 30));
   bt0.setText("0");
   bt0.setForeground(Color.BLUE);
   bt0.setFont(new Font("",Font.BOLD,15));
   bt0.addActionListener(this);
  }
  return bt0;
 }

 private JButton getBt16() {
  if (bt16 == null) {
   bt16 = new JButton();
   bt16.setBounds(new Rectangle(59, 209, 53, 30));
   bt16.setText("+/-");
   bt16.setForeground(Color.BLUE);
   bt16.setFont(new Font("",Font.BOLD,15));
   bt16.addActionListener(this);
  }
  return bt16;
 }

 private JButton getBt17() {
  if (bt17 == null) {
   bt17 = new JButton();
   bt17.setBounds(new Rectangle(117, 209, 53, 30));
   bt17.setText(".");
   bt17.setForeground(Color.BLUE);
   bt17.setFont(new Font("",Font.BOLD,18));
   bt17.addActionListener(this);
  }
  return bt17;
 }

 private JButton getBt18() {
  if (bt18 == null) {
   bt18 = new JButton();
   bt18.setBounds(new Rectangle(175, 209, 53, 30));
   bt18.setText("+");
   bt18.setForeground(Color.RED);
   bt18.setFont(new Font("",Font.BOLD,15));
   bt18.addActionListener(this);
  }
  return bt18;
 }

 private JButton getBt19() {
  if (bt19 == null) {
   bt19 = new JButton();
   bt19.setBounds(new Rectangle(233, 209, 53, 30));
   bt19.setText("=");
   bt19.setForeground(Color.RED);
   bt19.setFont(new Font("",Font.BOLD,15));
   bt19.addActionListener(this);
  }
  return bt19;
 }

 public static void main(String[] args)
 {
  // TODO Auto-generated method stub
  SwingUtilities.invokeLater(new Runnable()
  {
   public void run()
   {
    CalTest thisClass = new CalTest();
    thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    thisClass.setVisible(true);
   }
  });
 }

 public CalTest()
 {
  super();
  initialize();
  this.setResizable(false);
 }
 
 private void initialize()
 {
  this.setSize(296, 284);
  this.setContentPane(getJContentPane());
  this.setTitle("计算?);
  Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
  Dimension frameSize=this.getSize();
  if(frameSize.width>screenSize.width)
  {
   frameSize.width=screenSize.width;
  }
  if(frameSize.height>screenSize.height)
  {
   frameSize.height=screenSize.height;
  }
  this.setLocation((screenSize.width-frameSize.width)/5, (screenSize.width-frameSize.width)/5);
  tf.setHorizontalAlignment(JTextField.RIGHT);//使数字从双昄
  tf.setEditable(false);
  tf.setText("0.");
 }

 private JPanel getJContentPane() {
  if (jContentPane == null) {
   jContentPane = new JPanel();
   jContentPane.setLayout(null);
   jContentPane.add(getTf(), null);
   jContentPane.add(getBackspace(), null);
   jContentPane.add(getClear(), null);
   jContentPane.add(getBt7(), null);
   jContentPane.add(getBt8(), null);
   jContentPane.add(getBt9(), null);
   jContentPane.add(getBt11(), null);
   jContentPane.add(getSqrt(), null);
   jContentPane.add(getBt4(), null);
   jContentPane.add(getBt5(), null);
   jContentPane.add(getBt6(), null);
   jContentPane.add(getBt12(), null);
   jContentPane.add(getBt13(), null);
   jContentPane.add(getBt1(), null);
   jContentPane.add(getBt2(), null);
   jContentPane.add(getBt3(), null);
   jContentPane.add(getBt14(), null);
   jContentPane.add(getJButton(), null);
   jContentPane.add(getBt15(), null);
   jContentPane.add(getBt0(), null);
   jContentPane.add(getBt16(), null);
   jContentPane.add(getBt17(), null);
   jContentPane.add(getBt18(), null);
   jContentPane.add(getBt19(), null);
  }
  return jContentPane;
 }
 
 public void actionPerformed(ActionEvent e)
 {
  //变量com为true点击q?+-*/"Q反之变量com为false没有点击q?+-*/"
  //数字?
  if(e.getSource()==bt1)
  {
   if(com)
   {
    if(tf.getText().trim().equals("0."))
    {
     tf.setText("1");
     com=false;
    }
    else
    {
     tf.setText(tf.getText().trim()+"1");
    }
   }
   else
   {
    if(tf.getText().trim().equals("0."))
    {
     tf.setText("1");
    }
    else
    {
     tf.setText(tf.getText().trim()+"1");
    }
   }
  }
  //数字?
  else if(e.getSource()==bt2)
  {
   if(com==true)
   {
    tf.setText(tf.getText().trim()+"2");
   }
   else
   {
    if(tf.getText().trim().equals("0."))
    {
     tf.setText("2");
    }
    else
    {
     tf.setText(tf.getText().trim()+"2");
    }
   }
  }
  //数字?
  else if(e.getSource()==bt3)
  {
   if(com==true)
   {
    tf.setText(tf.getText().trim()+"3");
   }
   else
   {
    if(tf.getText().trim().equals("0."))
    {
     tf.setText("3");
    }
    else
    {
     tf.setText(tf.getText().trim()+"3");
    }
   }
  }
  //数字?
  else if(e.getSource()==bt4)
  {
   if(com)
   {
    tf.setText(tf.getText().trim()+"4");
   }
   else
   {
    if(tf.getText().trim().equals("0."))
    {
     tf.setText("3");
    }
    else
    {
     tf.setText(tf.getText().trim()+"4");
    }
   }
  }
  //数字?
  else if(e.getSource()==bt5)
  {
   if(com)
   {
    tf.setText(tf.getText().trim()+"5");
   }
   else
   {
    if(tf.getText().trim().equals("0."))
    {
     tf.setText("5");
    }
    else
    {
     tf.setText(tf.getText().trim()+"5");
    }
   }
  }
  //数字?
  else if(e.getSource()==bt6)
  {
   if(com)
   {
    tf.setText(tf.getText().trim()+"6");
   }
   else
   {
    if(tf.getText().trim().equals("0."))
    {
     tf.setText("6");
    }
    else
    {
     tf.setText(tf.getText().trim()+"6");
    }
   }
  }
  //数字?
  else if(e.getSource()==bt7)
  {
   if(com)
   {
    tf.setText(tf.getText().trim()+"7");
   }
   else
   {
    if(tf.getText().trim().equals("0."))
    {
     tf.setText("7");
    }
    else
    {
     tf.setText(tf.getText().trim()+"7");
    }
   }
  }
  //数字?
  else if(e.getSource()==bt8)
  {
   if(com)
   {
    tf.setText(tf.getText().trim()+"8");
   }
   else
   {
    if(tf.getText().trim().equals("0."))
    {
     tf.setText("8");
    }
    else
    {
     tf.setText(tf.getText().trim()+"8");
    }
   }
  }
  //数字?
  else if(e.getSource()==bt9)
  {
   if(com)
   {
    tf.setText(tf.getText().trim()+"9");
   }
   else
   {
    if(tf.getText().trim().equals("0."))
    {
     tf.setText("9");
    }
    else
    {
     tf.setText(tf.getText().trim()+"9");
    }
   }
  }
  //数字?
  else if(e.getSource()==bt0)
  {
   if(tf.getText().trim().equals("0."))
   {}
   else
   {
    tf.setText(tf.getText().trim()+"0");
   }
  }
  //q算W?
  else if(e.getSource()==bt18)
  {
   if(com==true)
   {}
   else
   {
    beforeNum=tf.getText().trim();
    tf.setText(tf.getText().trim()+"+");
    com=true;
    flag=1;
   }
  }
  //q算W?
  else if(e.getSource()==bt14)
  {
   if(com==true)
   {}
   else
   {
    beforeNum=tf.getText().trim();
    tf.setText(tf.getText().trim()+"-");
    flag=2;
    com=true;
   }
  }
  //q算W?
  else if(e.getSource()==bt12)
  {
   if(com==true)
   {}
   else
   {
    beforeNum=tf.getText().trim();
    tf.setText(tf.getText().trim()+"*");
    flag=3;
    com=true;
   }
  }
  //q算W?
  else if(e.getSource()==bt11)
  {
   if(com==true)
   {}
   else
   {
    beforeNum=tf.getText().trim();
    tf.setText(tf.getText().trim()+"/");
    flag=4;
    com=true;
   }
  }
  //q算W?
  else if(e.getSource()==bt13)
  {
   tf.setText(tf.getText().trim()+"%");
   qm=true;
  }
  //q算W?/x
  else if(e.getSource()==bt15)
  {
   if(com==false&&rs==false)
   {
    double d=Double.valueOf(tf.getText().trim());
    tf.setText(String.valueOf(1/d));
   }
  }
  //q算Wsqrt
  else if(e.getSource()==sqrt)
  {
   if(com==false&&rs==false)
   {
    double d=Double.valueOf(tf.getText().trim());
    tf.setText(String.valueOf(Math.sqrt(d)));
   }
  }
  //退?br />   else if(e.getSource()==clear)
  {
   if(tf.getText().trim().length()<1)
   {
    tf.setText("0.");
   }
   else
   {
    if(tf.getText().trim().equals("0."))
    {
     tf.setText("0.");
    }
    else
    {
     tf.setText(tf.getText().trim().substring(0, tf.getText().trim().length()-1));
    }
    if(tf.getText().trim().indexOf('=')==-1)
    {
     rs=false;
    }
    if(tf.getText().trim().indexOf('+')==-1)
    {
     com=false;
    }
    else
    {
     com=true;
    }
    if(tf.getText().trim().indexOf('-')==-1)
    {
     com=false;
    }
    else
    {
     com=true;
    }
    if(tf.getText().trim().indexOf('*')==-1)
    {
     com=false;
    }
    else
    {
     com=true;
    }
    if(tf.getText().trim().indexOf('/')==-1)
    {
     com=false;
    }
    else
    {
     com=true;
    }
    if(tf.getText().trim().indexOf('%')==-1)
    {
     qm=false;
    }
    else
    {
     qm=true;
    }
   }
  }
  else if(e.getSource()==Backspace)
  {
   //清除文本框中的全部内?br />    tf.setText("0.");
   com=false;
   rs=false;
   qm=false;
  }
  //q算W?/-
  else if(e.getSource()==bt16)
  {
   if(com==false&&rs==false&&qm==false)
   {
    String str=tf.getText().trim();
    double d=Double.parseDouble(str);
    if(d>0)
    {
     tf.setText(String.valueOf(-d));
    }
    else
    {
     tf.setText(String.valueOf(Math.abs(-d)));
    }
   }
  }
  //q算W?."
  else if(e.getSource()==bt17)
  {
   //如果点击q?+-*/"
   if(com==true)
   {
    int index=0;
    if(flag==1)//点击'+'
    {
     index=tf.getText().trim().indexOf('+');
     String str=tf.getText().trim().substring(index);
     if(str.indexOf('.')==-1)
     {
      tf.setText(tf.getText().trim()+".");
     }
    }
    else if(flag==2)//点击'-'
    {
     index=tf.getText().trim().indexOf('-');
     String str=tf.getText().trim().substring(index);
     if(str.indexOf('.')==-1)
     {
      tf.setText(tf.getText().trim()+".");
     }
    }
    else if(flag==3)//点击'*'
    {
     index=tf.getText().trim().indexOf('*');
     String str=tf.getText().trim().substring(index);
     if(str.indexOf('.')==-1)
     {
      tf.setText(tf.getText().trim()+".");
     }
    } 
    else if(flag==4)//点击'/'
    {
     index=tf.getText().trim().indexOf('/');
     String str=tf.getText().trim().substring(index);
     if(str.indexOf('.')==-1)
     {
      tf.setText(tf.getText().trim()+".");
     }
    } 
   }
   //如果没有点击q?+-*/"
   else
   {
    if(tf.getText().trim().indexOf('.')==-1)
    {
     tf.setText(tf.getText().trim()+".");
    }
   } 
  }
  //数字?='
  else if(e.getSource()==bt19)
  {
   //先判断取模键是否为true,如果为trueQ就q行取模q行Q否则进?#8220;+-*/”q算
   if(qm==true)
   {
    if(com==false&&rs==false)
    {
     int index=tf.getText().trim().indexOf('%');
     String beforeStr=tf.getText().trim().substring(0, index);
     String afterStr=tf.getText().trim().substring(index+1);
     if(afterStr.length()>0)
     {
      double d1=Double.valueOf(beforeStr);
      double d2=Double.valueOf(afterStr);
      tf.setText(tf.getText().trim()+"="+String.valueOf((int)(d1%d2)));
      qm=false;
     }
    }
   }
   else
   {
    //先判?#8220;=”键是否存在,假如不存在执行下列语句,否则下面的else语句?br />     if(rs==false)
    {
     Double result=0.0;
     switch (flag)
     {
      case 1://点击'+'
      {
       int index=0;
       index=tf.getText().trim().indexOf('+');
       afterNum=tf.getText().trim().substring(index+1);
       result=Double.valueOf(beforeNum)+Double.parseDouble(afterNum);
       tf.setText(tf.getText().trim()+"="+result.toString());
       break;    
      }
      case 2://点击'-'
      {
       int index=0;
       index=tf.getText().trim().indexOf('-');
       afterNum=tf.getText().trim().substring(index+1);
       result=Double.valueOf(beforeNum)-Double.parseDouble(afterNum);
       tf.setText(tf.getText().trim()+"="+result.toString());
       break;
      }
      case 3://点击'*'
      {
       int index=0;
       index=tf.getText().trim().indexOf('*');
       afterNum=tf.getText().trim().substring(index+1);
       result=Double.valueOf(beforeNum)*Double.parseDouble(afterNum);
       tf.setText(tf.getText().trim()+"="+result.toString());
       break;
      }
      case 4://点击'/'
      {
       int index=0;
       index=tf.getText().trim().indexOf('/');
       afterNum=tf.getText().trim().substring(index+1);
       if(Double.valueOf(afterNum)==0)
       {
        tf.setText("除数不能为零");
       }
       else
       {
        result=Double.valueOf(beforeNum)/Double.parseDouble(afterNum);
        tf.setText(tf.getText().trim()+"="+result.toString());
       }
       
       break;
      }
     }
     rs=true;
    }
    else
    {
     Double result=0.0;
     switch (flag)
     {
      case 1://点击'+'
      {
       int index=0;
       int x=0;
       index=tf.getText().trim().indexOf('+');
       x=tf.getText().trim().indexOf('=');
       afterNum=tf.getText().trim().substring(index+1, x);
       result=Double.valueOf(beforeNum)+Double.parseDouble(afterNum);
       tf.setText(tf.getText().trim().substring(0,x+1)+result.toString());
       break;    
      }
      case 2://点击'-'
      {
       int index=0;
       int x=0;
       index=tf.getText().trim().indexOf('-');
       x=tf.getText().trim().indexOf('=');
       afterNum=tf.getText().trim().substring(index+1, x);
       result=Double.valueOf(beforeNum)-Double.parseDouble(afterNum);
       tf.setText(tf.getText().trim().substring(0,x+1)+result.toString());
       break;
      }
      case 3://点击'*'
      {
       int index=0;
       int x=0;
       index=tf.getText().trim().indexOf('*');
       x=tf.getText().trim().indexOf('=');
       afterNum=tf.getText().trim().substring(index+1, x);
       result=Double.valueOf(beforeNum)*Double.parseDouble(afterNum);
       tf.setText(tf.getText().trim().substring(0,x+1)+result.toString());
       break;
      }
      case 4://点击'/'
      {
       int index=0;
       int x=0;
       index=tf.getText().trim().indexOf('/');
       x=tf.getText().trim().indexOf('=');
       afterNum=tf.getText().trim().substring(index+1, x);
       if(Double.valueOf(afterNum)==0)
       {
        tf.setText("除数不能为零");
       }
       else
       {
        result=Double.valueOf(beforeNum)/Double.parseDouble(afterNum);
        tf.setText(tf.getText().trim().substring(0,x+1)+result.toString());
       }
       break;
      }
     }
    }
   } 
  }
  
 }
}  //  @jve:decl-index=0:visual-constraint="220,8"



大头剑客 2007-09-29 15:27 发表评论
]]>
W??GUI/囑Ş用户界面http://www.aygfsteel.com/jianke/articles/146418.html大头剑客大头剑客Wed, 19 Sep 2007 04:42:00 GMThttp://www.aygfsteel.com/jianke/articles/146418.htmlhttp://www.aygfsteel.com/jianke/comments/146418.htmlhttp://www.aygfsteel.com/jianke/articles/146418.html#Feedback0http://www.aygfsteel.com/jianke/comments/commentRss/146418.htmlhttp://www.aygfsteel.com/jianke/services/trackbacks/146418.html阅读全文

大头剑客 2007-09-19 12:42 发表评论
]]>
W七?IO/输入与输?/title><link>http://www.aygfsteel.com/jianke/articles/138337.html</link><dc:creator>大头剑客</dc:creator><author>大头剑客</author><pubDate>Tue, 21 Aug 2007 04:55:00 GMT</pubDate><guid>http://www.aygfsteel.com/jianke/articles/138337.html</guid><wfw:comment>http://www.aygfsteel.com/jianke/comments/138337.html</wfw:comment><comments>http://www.aygfsteel.com/jianke/articles/138337.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jianke/comments/commentRss/138337.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jianke/services/trackbacks/138337.html</trackback:ping><description><![CDATA[     摘要:   W七?IO/输入与输??nbsp;    Filec??nbsp;    RandomAccessFilec??nbsp;    各种节点类 ?nbsp;    字符~码 ?nbsp;    各种qo与包装...  <a href='http://www.aygfsteel.com/jianke/articles/138337.html'>阅读全文</a><img src ="http://www.aygfsteel.com/jianke/aggbug/138337.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jianke/" target="_blank">大头剑客</a> 2007-08-21 12:55 <a href="http://www.aygfsteel.com/jianke/articles/138337.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>W六?Java APIhttp://www.aygfsteel.com/jianke/articles/127494.html大头剑客大头剑客Mon, 02 Jul 2007 04:04:00 GMThttp://www.aygfsteel.com/jianke/articles/127494.htmlhttp://www.aygfsteel.com/jianke/comments/127494.htmlhttp://www.aygfsteel.com/jianke/articles/127494.html#Feedback0http://www.aygfsteel.com/jianke/comments/commentRss/127494.htmlhttp://www.aygfsteel.com/jianke/services/trackbacks/127494.html阅读全文

大头剑客 2007-07-02 12:04 发表评论
]]>
W五?多线E?/title><link>http://www.aygfsteel.com/jianke/articles/122788.html</link><dc:creator>大头剑客</dc:creator><author>大头剑客</author><pubDate>Fri, 08 Jun 2007 02:46:00 GMT</pubDate><guid>http://www.aygfsteel.com/jianke/articles/122788.html</guid><wfw:comment>http://www.aygfsteel.com/jianke/comments/122788.html</wfw:comment><comments>http://www.aygfsteel.com/jianke/articles/122788.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jianke/comments/commentRss/122788.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jianke/services/trackbacks/122788.html</trackback:ping><description><![CDATA[     摘要:   W五?多线E??nbsp;    在多dpȝ中,每个独立执行的程序称E,也就?#8220;正在q行的程?#8221;。我们现在用的操作pȝ一般都是多d的,卌够同时执行多个应用程序,实际情况是,操作pȝ负责CPU{设备的资源q行分配和管理,虽然q些讑֤某一时刻只能做一件事Q但以非常小的时间间隔交替执行多个程序,可以给Z同时执行...  <a href='http://www.aygfsteel.com/jianke/articles/122788.html'>阅读全文</a><img src ="http://www.aygfsteel.com/jianke/aggbug/122788.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jianke/" target="_blank">大头剑客</a> 2007-06-08 10:46 <a href="http://www.aygfsteel.com/jianke/articles/122788.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>W四?面向对象Q下Q?/title><link>http://www.aygfsteel.com/jianke/articles/122746.html</link><dc:creator>大头剑客</dc:creator><author>大头剑客</author><pubDate>Thu, 07 Jun 2007 15:35:00 GMT</pubDate><guid>http://www.aygfsteel.com/jianke/articles/122746.html</guid><wfw:comment>http://www.aygfsteel.com/jianke/comments/122746.html</wfw:comment><comments>http://www.aygfsteel.com/jianke/articles/122746.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jianke/comments/commentRss/122746.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jianke/services/trackbacks/122746.html</trackback:ping><description><![CDATA[     摘要:   W四?面向对象Q下Q?cȝl承 ?nbsp;    通过l承可以化类的定??nbsp;    Java只支持单l承Q不允许多重l承??nbsp;    可以有多层承,即一个类可以l承某一个类的子c,如类Bl承了类AQ类C又可以承类BQ那么类C也间接承了cA??..  <a href='http://www.aygfsteel.com/jianke/articles/122746.html'>阅读全文</a><img src ="http://www.aygfsteel.com/jianke/aggbug/122746.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jianke/" target="_blank">大头剑客</a> 2007-06-07 23:35 <a href="http://www.aygfsteel.com/jianke/articles/122746.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>W三?面向对象Q上Q?/title><link>http://www.aygfsteel.com/jianke/articles/122745.html</link><dc:creator>大头剑客</dc:creator><author>大头剑客</author><pubDate>Thu, 07 Jun 2007 15:33:00 GMT</pubDate><guid>http://www.aygfsteel.com/jianke/articles/122745.html</guid><wfw:comment>http://www.aygfsteel.com/jianke/comments/122745.html</wfw:comment><comments>http://www.aygfsteel.com/jianke/articles/122745.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jianke/comments/commentRss/122745.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jianke/services/trackbacks/122745.html</trackback:ping><description><![CDATA[<span>W三?</span><strong><span>面向对象<br></span></strong><strong></strong> <p><strong><span><br>理解面向对象的概?/span></strong></p> <p><span>?span>   </span></span><span>面向q程</span></p> <p><span>      在一个结构体中定义窗口的大小Q位|,颜色Q背景等属性,对窗口操作的函数与窗口本w的定义没有M关系Q如<span>HideWindow,MoveWindow,MinimizeWindowQ这些函数都需要接受一个代表要被操作的H口参数Q是一U谓语与宾语的关pR?/span></span></p> <p><span>?span>    </span></span><span>面向对象</span></p> <p><span>      定义H口Ӟ除了要指定在面向q程中规定的那些属性,如大,位置Q颜Ԍ背景{外Q还要指定该H口可能h的动作,如隐藏,UdQ最化{。这些函数被调用Ӟ都是以某个窗口要隐藏某个H口要移动的语法格式来用的Q这是一U主语与谓语的关pR?/span></p> <p><span>?span>    </span></span><span>面向对象的三大特?/span></p> <p><span>          ?/span><span>装</span></p> <p><span>          ?/span><span>l承</span></p> <p><span>          ▂多?/span></p> <p><strong><span>cM对象</span></strong><strong></strong></p> <p><span>         cLҎ一cM物的描述Q是抽象的,概念上的定义</span><span>;</span><span>对象是实际存在的该类事物的每个个体,因而也U实例(</span><span>instance</span><span>Q?/span></p> <p><span>         如果对象比作汽车,那么cd是汽车的设计囄。所以面向对象程序设计的重点是类的设计,而不是对象的设计?/span></p> <p><strong><span>cȝ定义</span></strong><strong></strong></p> <p><span>public class Person()</span></p> <p><span> {</span></p> <p><span> <span>     </span>int age;</span></p> <p><span><span>      </span>void shout()</span></p> <p><span><span>          </span>{</span></p> <p><span><span>                 </span>System.out.println("I am age "+age);</span></p> <p><span><span>          </span>}</span></p> <p><span> }</span></p> <p><span>?span>    </span></span><span>age</span><span>是类的属性,也叫cL员变?/span></p> <p><span>?span>    </span></span><span>shout</span><span>是方法也叫类的成员函数?/span></p> <p><span>?span>    </span></span><span>shout</span><span>Ҏ可以直接讉K同一cM?/span><span>age</span><span>变量Q如果一个方法中有与成员同名的局部变量,该方法中对这?br>         变量名的讉K是局部变量,而不是成员变量?/span></p> <p><span><strong>在类中创建的成员变量会被初始化,局部变量不会被初始?/strong>?/span></p> <p><span><strong>对象的?/strong></span></p> <p><span>创徏新的对象之后Q我们就可以使用“对象?/span><span>.</span><span>对象成员”的格式,来访问对象的成员Q包括属性和ҎQ?/span></p> <p><span>class Person</span></p> <p><span>{</span></p> <p><span><span>       </span>int age;</span></p> <p><span><span>       </span>void shout()</span></p> <p><span><span>       </span>{</span></p> <p><span><span>             </span>System.out.println("age="+age);</span></p> <p><span><span>       </span>}</span></p> <p><span>}</span></p> <p><span>class TestPerson</span></p> <p><span>{</span></p> <p><span><span>       </span>public static void main(String[]args)</span></p> <p><span><span>       </span>{</span></p> <p><span><span>             </span>Person p1=new Person();</span></p> <p><span><span>             </span>p1.age=20;</span></p> <p><span><span>             </span>p1.shout();</span></p> <p><span><span>             </span>Person p2=new Person();</span></p> <p><span><span>             </span>p2.shout();</span></p> <p><span><span>       </span>}<span>     </span></span></p> <p><span>}</span></p> <p><span>上面E序q行的内存布局如下Q?/span></p> <p> <img height=255 alt="" src="http://www.aygfsteel.com/images/blogjava_net/jianke/class.JPG" width=533 border=0></p> <p><strong><span>对象的比?/span></strong><strong></strong></p> <p><span>?span> </span></span><span>“</span><span>==</span><span>”q算W与</span><span>equals()</span><span>Ҏ的区?/span></p> <p><span>   “</span><span>==</span><span>”用来比较值是否相{,</span><span>equals()</span><span>Ҏ用来比较两个对象的内Ҏ否相{?/span></p> <p><span>?nbsp; <span> </span></span><span>怎样比较两个数组对象的内Ҏ否相{?/span></p> <p><span>         arrays.equals(ary1[],ary2[]);</span></p> <p><strong><span>匿名对象</span></strong><strong></strong></p> <p><span>?span>  </span></span><span>我们也可以不定义对象的句柄,而直接调用这个对象的Ҏ。这L对象叫做匿名对象Q?br>     如:<span>new Person().shout();</span></span></p> <p><span>?nbsp; <span> </span></span><span>如果对一个对象只需要进行一ơ方法调用,那么可以用匿名对象?/span></p> <p><span>?span>   </span></span><span>我们l常匿名对象作为实参传递给一个函数调用?/span></p> <p><strong><span>实现cȝ装?/span></strong><strong></strong></p> <p><span>?span>   </span></span><span>如果外面的程序可以随意修改一个类的成员变量,会造成不可预料的程序错误,p一个hw高Q不能被外部随意修改Q只能通过各种摄取营养的方法去修改q个属性?/span></p> <p><span>?span>   </span></span><span>在定义一个类的成员(包括变量和方法)Ӟ使用</span><span>private</span><span>关键字说明这个成员的讉K权限Q这个成员成?nbsp;cȝU有成员Q只能被q个cd他成员方法调用,而不能被其他cM的方法所调用?/span></p> <p><span>?span>    </span></span><span>Z实现良好的封装性,我们通常类的成员变量声明ؓ</span><span>private</span><span>Q再通过</span><span>public</span><span>Ҏ来对q个变量q行讉K。对一个变量操作,一般都有读取和赋值操作,我们分别定义两个Ҏ来实现这两种操作Q一个是</span><span>getXxx()</span><span>ҎQ?/span><span>Xxx</span><span>表示要访问的成员变量的名字)Q用来读取这个成员变量操作,另外一个是</span><span>setXxx()</span><span>用来对这个变量赋倹{?/span></p> <p><span>?span>   </span></span><span>一个类通常是一个小的模块,我们应该让模块仅仅公开必须要让外界知道的内容,而隐藏其它一切内宏V我们在q行E序的详l设计时Q应量避免一个模块直接修Ҏ操作另外一个模块的数据Q模块设计追求强内聚Q许多功能尽量在cȝ内部独立完成Q不让外面干预)Q弱耦合Q提供给外部量的Ҏ调用Q?/span></p> <p><span><span>class Person<br>{<br>  private int age;<br>  void shout()<br>  {<br>    System.out.println(age);<br>  }<br>  public void setAge(int x)<br>  {<br>     if(x<0)<br>       return;<br>     age=x;<br>  }<br>  public int getAge()<br>  {<br>     return age;<br>  }<br>  <br>}</span></span></p> <p><span><span>class TestPerson<br>{<br>  public static void main(String[]args)<br>  {<br>    Person p=new Person();<br>    p.setAge(18);<br>    p.shout();<br>    System.out.println(p.getAge());<br>  }<br>  <br>  <br>} <br><br></span></span><strong><span>构造函数的定义与作?/span></strong><strong></strong></p> <p><span>?span>     </span></span><span>构造函数的特征</span></p> <p><span>      ?/span><span>它具有与cȝ同的名称Q?/span></p> <p><span>      ▁它不含q回?/span></p> <p><span>      ▁它不能在方法中?span>return语句q回一个?/span></span></p> <p><span>      注意Q在构造方法里不含q回值的概念是不同于“<span>void”的,在定义构造方法时加了”voiid”Q结果这个方法就不再被自动调用?/span></span></p> <p><span>?span>     </span></span><span>构造方法的作用Q当一个类的实例对象刚产生Ӟq个cȝ构造方法就会被自动调用Q我们可以在q个Ҏ中加入要完成初始化工作的代码?/span></p> <p><span>构造方法的重蝲</span></p> <p><span>?span>     </span></span><span>和一般的Ҏ重蝲一P重蝲的构造方法具有不同个数或不同cd的参敎ͼ~译器就可以Ҏq一点判断出?/span><span>new </span><span>关键字生对象时Q该调用哪个构造方法了。生对象的格式是:</span><span>new </span><span>cdQ参数列表)Q?/span></p> <p><span>?span>     </span></span><span>重蝲构造方法可以完成不同初始化的操作,如:</span><span>p3=new Person(“Tom”18);</span><span>语句Q会做这样几件事Q创建指定类的新实例对象Q在堆内存中为实例对象分配内存空_q调用指定类的构造方法,最后将实例对象的首地址赋值给引用变量</span><span>p3</span><span>?/span></p> <p><strong><span>This</span></strong><strong><span>引用句柄的应?/span></strong><strong></strong></p> <p><span>?span>     </span></span><span>一个类中成员方法可以直接调用同cM的其他成员,其实我们在一个方法内部?#8220;</span><span>this.</span><span>其他成员”的引用方式和直接使用“其他成员”的效果是一LQ那</span><span>this</span><span>q有多大的作用呢Q在有些情况下,我们是非得用</span><span>this</span><span>关键字不可的Q?/span></p> <p><span>▁让cȝ成员变量名和对其q行赋值的成员Ҏ的Ş参变量同名是必要的,q样的代码谁看了都能明白q两个变量是彼此相关的?/span></p> <p><span>▁假设我们有一个容器类和一个部件类Q在容器cȝ某个Ҏ中创建部件类的实例对象,而部件类的构造方法要接收一个代表其所在容器的参数?/span></p> <p><span>▁构造方法是在生对象时?span>javapȝ自动调用的,我们不能在程序中象调用其他方法一样去调用构造方法。但我们可以在一个构造方法里调用其他重蝲的构造方法,不是用构造方法名Q而是用this(参数列表)形式Q根据其中的参数列表Q选择相应的构造方法?/span></span></p> <p><span>垃圾回收q程分析</span></p> <p><span>?span>     </span></span><span>c++中的析构Ҏ</span></p> <p><span>?span>     </span></span><span>java中的finalize()Ҏ</span></p> <p><span>?span>     </span></span><span>System.gc的作?/span></p> <p><strong><span>Static</span></strong><strong><span>静态变?/span></strong><strong></strong></p> <p><span>       当我们编写一个类Ӟ其实是在描q其对象的属性和行ؓQ而ƈ没有产生实质上的对象Q只有通过</span><span>new</span><span>关键字才会生出对象Q这时系l才会分配内存空间对象,其方法才可以供外部调用。我们有时候希望无论是否生了对象或无Z生了多少对象的情况下Q某些特定的数据在内存空间里只有一份?/span></p> <p><span>~写使用静态变量统计一个类产生的实例对象的个数的程序?/span></p> <p><span><span></p> <p><span>class Person</span></p> <p><span>{</span></p> <p><span><span>          </span>private String name;</span></p> <p><span><span>          </span>private static int count=0;</span></p> <p><span><span>          </span>static String country="</span><span>中国</span><span>";</span></p> <p><span><span>          </span>public Person()</span></p> <p><span><span>          </span>{</span></p> <p><span><span>                     </span><span>   </span>System.out.println(name+":"+ ++count);</span></p> <p><span><span>          </span>}</span></p> <p><span><span>          </span>public Person(String name)</span></p> <p><span><span>          </span>{</span></p> <p><span><span>                 </span><span>       </span>this.name=name;</span></p> <p><span><span>                   </span><span>     </span>System.out.println(name+":"+ ++count);</span><span><span>      </span></span></p> <p><span><span>          </span>}</span></p> <p><span><span>          </span>void shout()</span></p> <p><span><span>          </span>{<span>     </span><span>       </span></span></p> <p><span><span>                 </span><span>       </span>System.out.println(name);</span></p> <p><span><span>          </span>}</span></p> <p><span>}</span></p> <p> </p> <p><span>class TestPerson</span></p> <p><span>{</span></p> <p><span><span>          </span>public static void main(String[]args)</span></p> <p><span><span>          </span>{</span></p> <p><span><span>                     </span><span>   </span>Person p=new Person("</span><span>张三</span><span>");</span></p> <p><span><span>                     </span><span>   </span>new Person();</span></p> <p><span><span>                     </span><span>   </span>p.shout();</span></p> <p><span><span>                     </span><span>   </span>new Person("</span><span>李四</span><span>").shout();</span></p> <p><span><span>                     </span><span>   </span>System.out.println(Person.country);</span></p> <p><span><span>          </span>}</span></p> <p><span>}</span></p> <p> </p> <p><span>q行l果Q?/span></p> <p><span>张三</span><span>:1</span></p> <p><span>null:2</span></p> <p><span>张三</span></p> <p><span>李四</span><span>:3</span></p> <p><span>李四</span></p> <p><span>中国</span></p> </span></span> <p><strong><span>Static</span></strong><strong><span>静态方?/span></strong><strong></strong></p> <p><span>?span>     </span></span><strong><span>在静态方法里只能直接调用同类中其它的静态成员(包括变量和方法)Q而不能直接访问类中的非静态成员。这是因为,对于非静态的Ҏ和变量,需要先创徏cȝ实例对象后才可用,而静态方法在使用前不用创ZQ何对象?/span></strong></p> <p><span>?span>     </span></span><strong><span>静态方法不能以M方式引用</span><span>this</span></strong><strong><span>?/span><span>super</span></strong><strong><span>关键字。与上面的道理一P因ؓ静态方法在使用前不用创ZQ何实例对象,当静态方法被调用Ӟ</span><span>this</span></strong><strong><span>所引用的对象根本就没有产生?/span></strong></p> <p><span>?span>     </span></span><strong><span>main()</span></strong><strong><span>Ҏ是静态的Q因?/span><span>JVM</span></strong><strong><span>在执?/span><span>main</span></strong><strong><span>Ҏ时不创徏</span><span>main</span></strong><strong><span>Ҏ所在的cȝ实例对象Q因而在</span><span>main()</span></strong><strong><span>Ҏ中,我们不能直接讉K该类中的非静态成员,必须创徏该类的一个实例对象后Q才能通过q个对象去访问类中的非静态成员?/span></strong></p> <p><strong><span style="FONT-SIZE: 18pt">单态设计模?/span></strong><strong></strong></p> <p><span>?span>     </span></span><span>设计模式是在大量的实践中ȝ和理论化之后优选的代码l构、编E风根{以及解决问题的思考方式?/span></p> <p><span>?span>     </span></span><span>所谓类的单态设计模式,是采取一定的Ҏ保证在整个的软gpȝ中,Ҏ个类只能存在一个对象实例,q且该类只提供一个取得其对象实例的方法。如果我们要让类在一个虚拟机中只能生一个对象,我们首先必须类的构造方法的讉K权限讄?/span><span>private</span><span>Q这样就不能?/span><span>new</span><span>操作W在cȝ外部产生cȝ对象了,但在cȝ内部仍可以生该cȝ对象。因为在cȝ外部开始还无法{到cȝ对象Q只能调用该cȝ某个静态方法以q回cd部创建的对象Q静态方法只能访问类中的静态成员变量,所以,指向cd部生的该类对象的变量也必须定义成静态的?/span></p> <p><span>class Chinese</span></p> <p><span>{</span></p> <p><span>      static Chinese obj=new Chinese();</span></p> <p><span>      public static Chinese getInstance()</span></p> <p><span>      {</span></p> <p><span><span>              </span>return obj;</span></p> <p><span>      }</span></p> <p><span>      private Chinese()</span></p> <p><span>      {</span></p> <p><span><span>              </span>System.out.println("ss");</span></p> <p><span>      }</span></p> <p><span>}</span></p> <p><span>class TestChinese</span></p> <p><span>{</span></p> <p><span>      public static void main(String[]args)</span></p> <p><span>      {</span></p> <p><span><span>              </span>Chinese obj1=Chinese.getInstance();</span></p> <p><span><span>              </span>Chinese obj2=Chinese.getInstance();</span></p> <p><span><span>              </span>System.out.println(obj1==obj2);</span></p> <p><span><span>              </span>//</span><span>如果相等q回</span><span>true,</span><span>否则q回</span><span>false.</span></p> <p><span>      }</span></p> <p><span>}<br></span></p> <p>q行l果Q?br><span>ss<br>true<br><br><strong>内部c?/strong></span></p> <p><span><strong><span>      </span>——在cM直接定义的内部类(</strong><span>嵌套c?/span><strong>)</strong></span></p> <p><span>?span>     内部c?</span></span><span><span>嵌套c?</span>可以直接讉K外部c?嵌套它的c?的成员,包括</span><span>private</span><span>成员Q但是,内部c?嵌套c?的成员却不能被外部类(嵌套它的c?直接讉K?/span></p> <p><span>?span>     </span></span><span>在内部类对象保存了一个对外部cd象的引用Q当内部cȝ成员Ҏ中访问某一变量Ӟ如果在该Ҏ和内部类中都没有定义q这个变量,内部cM?/span><span>this</span><span>的引用会被传递给那个外部cd象的引用?/span></p> <p><span>?span>     </span></span><span>如果?/span><span>static</span><span>修饰一个内部类Q这个类q当于是一个外部定义的c,所?/span><span>static</span><span>的内部类中可声明</span><span>static</span><span>成员Q但是,?/span><span>static</span><span>的内部类中的成员是不能声明ؓ</span><span>static</span><span>?/span><span>Static</span><span>的内部类不能再用外层封装的?/span><span>static</span><span>的成员变量,q个道理不难惌Q所?/span><span>static</span><span>嵌套cd用?/span></p> <p><span>class Outer</span></p> <p><span>{</span></p> <p><span><span>       </span>int outer_i=100;</span></p> <p><span><span>       </span>void test()</span></p> <p><span><span>       </span>{</span></p> <p><span><span>              </span>Inner inner=new Inner();</span></p> <p><span><span>              </span>inner.display();</span></p> <p><span><span>       </span>}</span></p> <p><span><span>       </span>class Inner</span></p> <p><span><span>       </span>{</span></p> <p><span><span>              </span>void display()</span></p> <p><span><span>              </span>{</span></p> <p><span><span>                     </span>System.out.println(outer_i);</span></p> <p><span><span>              </span>}</span></p> <p><span><span>       </span>}</span></p> <p><span><span>       </span></span></p> <p><span><span>       </span>public static void main(String[]args)</span></p> <p><span><span>       </span>{</span></p> <p><span><span>              </span>Outer outer=new Outer();</span></p> <p><span><span>              </span>outer.test();</span><span><span>  </span></span></p> <p><span><span>       </span>}</span></p> <p><span>}</span></p> <p><span>?span>     </span></span><span>如果函数的局部变量(函数的参C是局部变量)、内部类的成员变量、外部类的成员变量重名,我们应该按下面的E序代码所使用的方式来明确指定我们真正要访问的变量?/span></p> <p><span>public class Outer</span></p> <p><span>{</span></p> <p><span><span>       </span>private int size;</span></p> <p><span><span>       </span>public class Inner</span></p> <p><span><span>       </span>{</span></p> <p><span><span>              </span>private int size;</span></p> <p><span><span>              </span>public void doStuff(int size)</span></p> <p><span><span>              </span>{</span></p> <p><span><span>                     </span>size++;//</span><span>引用的是</span><span>doStuff</span><span>函数的Ş?/span></p> <p><span><span>                     </span>this.size++;//</span><span>引用的是</span><span>Inner</span><span>cM的成员变?/span></p> <p><span><span>                     </span>Outer.this.size++;//</span><span>引用的是</span><span>Outer</span><span>cM的成员变?/span></p> <p><span><span>              </span>}<span>            </span></span></p> <p><span><span>       </span>}</span></p> <p><span>}</span></p> <p><strong><span>内部cd何被外部引用</span></strong><strong></strong></p> <p><span>class Outer</span></p> <p><span>{</span></p> <p><span><span>       </span>private int size=100;</span></p> <p><span><span>       </span>public class Inner</span></p> <p><span><span>       </span>{</span></p> <p><span><span>              </span>public void doStuff()</span></p> <p><span><span>              </span>{</span></p> <p><span><span>                     </span>System.out.println(++size);</span></p> <p><span><span>              </span>}</span></p> <p><span><span>       </span>}</span></p> <p><span>}</span></p> <p><span>public class TestInner</span></p> <p><span>{</span></p> <p><span><span>       </span>public static void main(String[]args)</span></p> <p><span><span>       </span>{</span></p> <p><span><span>              </span>Outer outer=new Outer();</span></p> <p><span><span>              </span>Outer.Inner inner=outer.new Inner();</span></p> <p><span><span>              </span>inner.doStuff();</span></p> <p><span><span>       </span>}</span></p> <p><span>}</span></p> <p><span>在方法中定义的内部类</span></p> <p><span>?span>     </span></span><span>嵌套cdƈ非只能在cM定义Q也可以在几个程序块的范围之内定义内部类。例如,在方法中Q或甚至?/span><span>for</span><span>循环体内部,都可以定义嵌套类?/span></p> <p><span>?span>     </span></span><span>在方法中定义的内部类只能讉KҎ?/span><span>fianl</span><span>cd的局部变量,?/span><span>final</span><span>定义的局部变量相当于是一个常量,它的生命周期出Ҏq行的生命周期?/span></p> <p> </p> <img src ="http://www.aygfsteel.com/jianke/aggbug/122745.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jianke/" target="_blank">大头剑客</a> 2007-06-07 23:33 <a href="http://www.aygfsteel.com/jianke/articles/122745.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>W一?W二?/title><link>http://www.aygfsteel.com/jianke/articles/117926.html</link><dc:creator>大头剑客</dc:creator><author>大头剑客</author><pubDate>Wed, 16 May 2007 12:16:00 GMT</pubDate><guid>http://www.aygfsteel.com/jianke/articles/117926.html</guid><wfw:comment>http://www.aygfsteel.com/jianke/comments/117926.html</wfw:comment><comments>http://www.aygfsteel.com/jianke/articles/117926.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jianke/comments/commentRss/117926.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jianke/services/trackbacks/117926.html</trackback:ping><description><![CDATA[  <p><strong><span>Java</span></strong><strong><span>中的帔R</span></strong><strong></strong></p> <p><span>Q?/span><span>Lesson02A.rmvb</span><span>Q?/span></p> <p><span>?/span><span>字符帔R</span></p> <p><span>‘\r’</span><span>表示接受键盘输入Q相当于按下了回车键</span><span>;</span></p> <p><span>‘\n’</span><span>是换?/span><span>;</span></p> <p><span>‘\t’</span><span>是制表符Q相当于</span><span>table</span><span>?/span><span>;</span></p> <p><span>‘\b’</span><span>是退格键Q相当于</span><span>BackSpace;</span></p> <p><span>‘\’’</span><span>是单引号</span></p> <p><span>‘\”’</span><span>是双引号</span><span>;</span></p> <p><span>‘\\’</span><span>是一个斜?/span></p> <p><strong><span>变量的概念与作用</span></strong><strong></strong></p> <p><span>?span>     </span></span><span>变量是pȝ为程序分配的一块内存单元,用来存储各种cd的数据。根据所存储的数据类型的不同Q有各种不同cd的变量。变量名代表q块内存中的数据?/span></p> <p><span>?span>     </span></span><span>int x=0,y;</span></p> <p><span>y=x+3;</span></p> <p><span>x</span><span>在被取值前必须被初始化?/span></p> <p><strong><span>Java</span></strong><strong><span>的变量类?/span></strong><strong></strong></p> <p> <img height=409 alt="" src="http://www.aygfsteel.com/images/blogjava_net/jianke/dataformat.jpg" width=559 border=0></p> <p> </p> <p> </p> <p><strong><span>变量的字节大?/span></strong><strong></strong></p> <p>byte占用1个字?/p> <p>Boolean占用1个字?/p> <p>short占用2个字?/p> <p>char占用2个字?/p> <p>int占用4个字?/p> <p>float占用4个字?/p> <p>long占用8个字?/p> <p>double占用8个字?span></span></p> <p><span></span> <strong><span>cd转化</span></strong><strong></strong></p> <p><span>?span>     </span></span><span>自动cd转换Q也叫隐式类型{换)</span></p> <p><span>?span>     </span></span><span>强制cd转换Q也叫显式类型{换)</span></p> <p><span>?span>     </span></span><span>cd转换的原理,及什么时候要用强制类型{?/span></p> <p><span>?span>     </span></span><span>表达式的数据cd自动提升</span></p> <p><span>?span>     </span></span><span>所?/span><span>byte</span><span>型?/span><span>short</span><span>型和</span><span>char</span><span>的值将被提升到</span><span>int</span><span>?/span></p> <p><span>?span>     </span></span><span>如果一个操作数?/span><span>long</span><span>型,计算l果是</span><span>long</span><span>?/span><span>;</span></p> <p><span>?span>     </span></span><span>如果一个操作数?/span><span>float</span><span>型,计算l果是</span><span>float</span><span>?/span><span>;</span></p> <p><span>?span>     </span></span><span>如果一个操作数?/span><span>double</span><span>型,计算l果是</span><span>double</span><span>?/span><span>;</span></p> <p><strong><span>术q算W的应用技?/span></strong><strong></strong></p> <p><span>?span>     </span></span><span>思考题</span><span>1</span><span>Q某个培训中心要为新到的学员安排戉KQ假讑օ?/span><span>X</span><span>个学员,每个戉K可以?/span><span>6</span><span>个,让你用一个公式计他们要住的戉K敎ͼ</span></p> <p><span>{案Q?/span><span>(x+5)/6</span><span>。这U算法还可用在查看留a板的分布昄上:其中</span><span>x</span><span>是d的留a敎ͼ</span><span>6</span><span>是每|C的留言敎ͼl果是d有多页?/span></p> <p><span>?span>     </span></span><span>思考题2:</span><span>假设你要?/span><span>x </span><span>的值在</span><span>0</span><span>?/span><span>9</span><span>之间循环变化Q请写出相应的程序代码?/span></p> <p> class A<br>{<br>       public static void main(String[]args)<br>       {<br>              int i=0;<br>              while(true)<br>              {<br>                     i=(i+1)%10; <br>                     System.out.println(i);<br>              }<br>         }<br>}<br></p> <p> </p> <p><strong><span>逻辑q算W?/span></strong><strong></strong></p> <table cellSpacing=0 cellPadding=0 align=left border=1> <tbody> <tr> <td vAlign=top width=151> <p><span>q算W?/span><span><span>    </span></span><span>q算</span></p> <p><span>&<span>     </span>AND(</span><span>?/span><span>)</span></p> </td> <td vAlign=top width=108> <p><span>范例</span></p> <p><span>False & True</span></p> </td> <td vAlign=top width=84> <p><span>l果</span></p> <p><span>False</span></p> </td> </tr> <tr> <td vAlign=top width=151> <p><span>|<span>       </span>OR(</span><span>?/span><span>)</span></p> <p><span>^<span>      </span>XOR(</span><span>异或</span><span>)</span></p> </td> <td vAlign=top width=108> <p><span>False | true</span></p> <p><span>False ^ true</span></p> </td> <td vAlign=top width=84> <p><span>True</span></p> <p><span>True</span></p> </td> </tr> <tr> <td vAlign=top width=151> <p><span>!<span>       </span>NOT(</span><span>?/span><span>)</span></p> <p><span>&&<span>      </span>AND(</span><span>短\</span><span>)</span></p> </td> <td vAlign=top width=108> <p><span>!TRUE</span></p> <p><span>False && True</span></p> </td> <td vAlign=top width=84> <p><span>False</span></p> <p><span>False</span></p> </td> </tr> <tr> <td vAlign=top width=151> <p><span>||<span>        </span>OR(</span><span>短\</span><span>)</span></p> </td> <td vAlign=top width=108> <p><span>False !! True</span></p> </td> <td vAlign=top width=84> <p><span>True</span></p> </td> </tr> </tbody> </table> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p><span>?/span><span>1</span><span>Q逻辑q算W用于对</span><span>boolean</span><span>型结果的表达式进行运,q算的结果都?/span><span>boolean</span><span>型?/span></p> <p><span>?/span><span>2</span><span>Q?/span><span>”&”</span><span>?/span><span>”&&”</span><span>的区别在于,如果使用前者连接,那么无论M情况Q?/span><span>”&”</span><span>两边的表辑ּ都会参与计算。如果用后者连接,?/span><span>”&&”</span><span>的左边ؓ</span><span>false</span><span>Q则不会计其双的表辑ּ?/span><span>”|”</span><span>?/span><span>”||”</span><span>的区别与</span><span>”&”</span><span>?/span><span>”&&”</span><span>的区别一栗?/span></p> <p><strong><span>位运符</span></strong><strong></strong></p> <p><span>?span>     </span></span><span>M信息在计机中都是以二进制的形式保存的,</span><span>&|^</span><span>除了可以作ؓ逻辑q算W,也可以做Zq算W它们对两个操作C的每一个二q制位都q行q算?/span></p> <p><span>?span>     </span></span><span>只有参加q算的两位都?/span><span>1</span><span>Q?/span><span>&</span><span>q算的结果才?/span><span>1</span><span>Q否则就?/span><span>0</span><span>?/span></p> <p><span>?span>     </span></span><span>只有参加q算的两位都?/span><span>0</span><span>Q?/span><span>|</span><span>q算的结果才?/span><span>0</span><span>Q否则就?/span><span>1</span><span>?/span></p> <p><span>?span>     </span></span><span>只有参加q算的两位不同,</span><span>^</span><span>q算的结果才?/span><span>1</span><span>Q否则就?/span><span>0</span><span>?/span></p> <p><span>?span>     </span></span><span>我们可以Ҏ据按二进制位q行UM操作Q?/span><span>java</span><span>的移位运符有三U:</span></p> <p><span>?span>     </span></span><span><<左移</span></p> <p><span>?span>     </span></span><span>>>右移</span></p> <p><span>?span>     </span></span><span>>>>无符号右U?/span></p> <p><strong><span>UMq算的注意事及技?/span></strong><strong></strong></p> <p><span>?span>     </span></span><span>UMq算W适用数据cd?/span><span>byte</span><span>?/span><span>short</span><span>?/span><span>char</span><span>?/span><span>int</span><span>?/span><span>long</span><span>?/span></p> <p><span>?span>     </span></span><span>对低?/span><span>int</span><span>型的操作数将先自动{换ؓ</span><span>int</span><span>型再UM?/span></p> <p><span>?span>     </span></span><span>?/span><span>int</span><span>型整数移?/span><span>a>>b</span><span>Q系l先?/span><span>b</span><span>?/span><span>32</span><span>取模Q得到的l果才是真正UM的位数。例如:</span><span>a>>33</span><span>?/span><span>a>>1</span><span>l果是一LQ?/span><span>a>>32</span><span>l果q是</span><span>a</span><span>原来的数字?/span></p> <p><span>?span>     </span></span><span>对于</span><span>long</span><span>型整数移位时</span><span>a>>b</span><span>Q则是先移位位?/span><span>b</span><span>?/span><span>64</span><span>取模?/span></p> <p><span>?span>     </span></span><span>UM不会改变量本w的倹{?/span><span>A>>1;</span><span>在行语句中单独存在,毫无意义?/span></p> <p><span>?span>     </span></span><span>x>>1</span><span>的结果和</span><span>x/2</span><span>的结果是一LQ?/span><span>x<<2</span><span>?/span><span>X*4</span><span>的结果也是一L。MQ一个数左移</span><span>n</span><span>位,是{于q个C?/span><span>2</span><span>?/span><span>n</span><span>ơ方Q一个数右移</span><span>n</span><span>位,是{于q个数除?/span><span>2</span><span>?/span><span>n</span><span>ơ方。请思考:如何用程序实现求</span><span>2</span><span>?/span><span>x</span><span>ơ方。答案:</span><span>y=1<<x;</span></p> <p><span>(Lesson02B.rmvb)</span></p> <p><strong><span>E序的流E控?/span></strong></p> <p><span>?span>     </span></span><span>序l构</span></p> <p><span>?span>     </span></span><span>选择l构</span></p> <p><span>?span>     </span></span><span>循环l构</span></p> <p><strong><span>if</span></strong><strong><span>语句的选择l构</span></strong><strong></strong></p> <p><span>?span>     </span></span><span>if(</span><span>表达?/span><span>)</span><span>语句</span></p> <p><span>?span>     </span></span><span>if(</span><span>表达?/span><span>)</span><span>语句</span><span>1;else</span><span>语句</span><span>2;</span></p> <p><span>?span>     </span></span><span>if(</span><span>表达?/span><span>1)</span><span>语句</span><span>1;</span></p> <p><span>         else if(</span><span>表达?/span><span>2)</span><span>语句</span><span>2;</span></p> <p><span>         else if(</span><span>表达?/span><span>3)</span><span>语句</span><span>3;      </span></p> <p><span>         ……</span></p> <p><span>         else</span><span>语句</span><span>n;</span></p> <p><span>?span>     </span></span><span>每个语句可以是用{}组成的复合语句</span></p> <p><span>?span>     </span></span><span>变量</span><span>=</span><span>布尔表达式?语句</span><span>1:</span><span>语句</span><span>2;</span></p> <p><span>?span>     </span></span><span>if</span><span>语句q可以嵌套?/span></p> <p><span>if(</span><span>表达?/span><span>1)</span></p> <p><span><span>        </span>if(</span><span>表达?/span><span>2)</span><span>语句</span><span>1;</span></p> <p><span><span>        </span>else</span><span>语句</span><span>2;</span></p> <p><span>else</span></p> <p><span><span>        </span>if(</span><span>表达?/span><span>3)</span><span>语句</span><span>3;</span></p> <p><span><span>        </span>else</span><span>语句</span><span>4;</span></p> <p><span>嵌套时用{}确定层ơ界限,举例说明</span></p> <p><span>switch</span><span>语句的选择l构</span></p> <p><span>Switch(</span><span>表达?/span><span>)</span></p> <p><span>?/span></p> <p><span><span>       </span>case </span><span>帔R表达?/span><span>1</span><span>Q语?/span><span>1;</span></p> <p><span><span>       </span>case </span><span>帔R表达?/span><span>2</span><span>Q语?/span><span>2;</span></p> <p><span><span>              </span>……</span></p> <p><span><span>       </span>case </span><span>帔R表达?/span><span>n</span><span>Q语?/span><span>n;</span></p> <p><span><span>       </span>default:</span><span>语句</span><span>n;</span></p> <p><span>?/span></p> <p><span>?span>     </span></span><span>default</span><span>语句是可选的Q它接受除上面接受值有其他|通俗的讲Q就是谁是也不要的都归它?/span></p> <p><span>?span>     </span></span><span>case</span><span>后面可以跟多个语句,q些语句可以不用在括hh?/span></p> <p><span>?span>     </span></span><span>switch</span><span>语句判断条g可以接受</span><span>int,byte,char,short</span><span>型,不可以接受其他类型?/span></p> <p><span>?span>     </span></span><span>一旦碰到第一?/span><span>case</span><span>匚wQ就会开始顺序执行以后所有的E序代码Q而不后面的</span><span>case</span><span>条g是否匚wQ后?/span><span>case</span><span>条g下的代码都会被执行,直到到</span><strong><span>break</span></strong><span>语句为止。我们可以利用这个特Ҏ用同一D语句处理多?/span><span>case</span><span>条g?/span></p> <p><strong><span>While</span></strong><strong><span>循环语句</span></strong><strong></strong></p> <p><span>While(</span><span>表达?/span><span>)</span></p> <p><span><span>       </span></span><span>语句</span><span>;</span></p> <p><span>int x=1;</span></p> <p><span>while(x<3)</span></p> <p><span>{</span></p> <p><span>System.out.println(“x=”+x);</span></p> <p><span><span>       </span>X++;</span></p> <p><span>}</span></p> <p><span>脚下留心Q?/span><span>while</span><span>表达式的括号后面一定不要加“</span><span>;</span><span>”</span></p> <p><strong><span>do-while</span><span>循环语句</span></strong></p> <p><span>do </span><span>语句</span></p> <p><span>while(</span><span>表达?/span><span>);<br></span></p> <p>do..while 循环则先执行Q再判断是否要l执行,也就是说循环臛_执行一ơ,有点像是先斩后奏的方法。只有条件计结果ؓ <code>true</code> 时语句才会执行?span><br>public class TestDO</span></p> <p><span>{</span></p> <p><span><span>       </span>public static void main(String[]args)</span></p> <p><span><span>       </span>{</span></p> <p><span><span>              </span>int x=3;</span></p> <p><span><span>              </span>while(x==0)</span></p> <p><span><span>       </span><span>              </span>{</span></p> <p><span><span>                            </span>System.out.println("ok1");</span></p> <p><span><span>                            </span>x++;</span></p> <p><span><span>                     </span>}</span></p> <p><span><span>              </span>int y=0;</span></p> <p><span><span>              </span>do</span></p> <p><span><span>              </span>{</span></p> <p><span><span>                     </span>System.out.println("ok2");</span></p> <p><span><span>                     </span>y++;</span></p> <p><span><span>              </span>}</span></p> <p><span><span>              </span>while(y==0);</span></p> <p><span><span>       </span>}</span></p> <p><span>}</span></p> <p><span>~写一个程序,q个E序不断地读取从键盘上输入的字符Q直到讲到字W?/span><span>’q’</span><span>ӞE序l束。提C:调用</span><span><strong>System.in.read();</strong></span><span>可以dC个从键盘上输入的字符对应的整数。通过q个E序Q你一定体会到在什么样的情况下Q用</span><span>do-while</span><span>循环语句l?/span><span>while</span><span>循环语句方便?/span></p> <p> </p> <p><span>public class TestWhile </span></p> <p><span>{</span></p> <p><span><span>    </span>public TestWhile() </span></p> <p><span><span>    </span>{</span></p> <p><span><span>    </span><span>       </span></span></p> <p><span><span>    </span>}</span></p> <p><span><span>    </span>public static void main(String[] args) </span></p> <p><span><span>    </span>{</span></p> <p><span><span>        </span>// TODO code application logic here</span></p> <p><span><span>        </span>int ch=0;</span></p> <p><span><span>       </span>/* try</span></p> <p><span><span>        </span>{</span></p> <p><span><span>        </span><span>       </span>ch=System.in.read(); </span></p> <p><span><span>        </span><span>       </span>while(ch!='q')</span></p> <p><span><span>              </span><span>        </span>{</span></p> <p><span><span>              </span><span>        </span><span>       </span>System.out.println((char)ch);</span></p> <p><span><span>              </span><span>        </span><span>       </span>try</span></p> <p><span><span>              </span><span>        </span><span>       </span>{</span></p> <p><span><span>              </span><span>        </span><span>              </span>ch=System.in.read();</span></p> <p><span><span>              </span><span>        </span><span>       </span>}catch(Exception e){}</span></p> <p><span><span>              </span><span>        </span>}</span></p> <p><span><span>              </span><span>    </span></span></p> <p><span><span>        </span>}</span></p> <p><span><span>        </span>catch(Exception e)</span></p> <p><span><span>        </span>{</span></p> <p><span><span>        </span><span>       </span>e.printStackTrace();</span></p> <p><span><span>        </span><span>       </span>//e.getMessage();</span></p> <p><span><span>        </span>}</span></p> <p><span><span>        </span>*/</span></p> <p><span><span>        </span></span></p> <p><span><span>       </span><span>        </span><span>       </span>do</span></p> <p><span><span>       </span><span>        </span><span>       </span>{</span></p> <p><span><span>       </span><span>        </span><span>              </span>try</span></p> <p><span><span>       </span><span>        </span><span>              </span>{</span></p> <p><span><span>       </span><span>        </span><span>                     </span>ch=System.in.read(); </span></p> <p><span><span>       </span><span>        </span><span>              </span>}<span>     </span></span></p> <p><span><span>       </span><span>        </span><span>              </span>catch(Exception e)</span></p> <p><span><span>                     </span><span>        </span>{</span></p> <p><span><span>                     </span><span>        </span><span>       </span>e.printStackTrace();</span></p> <p><span><span>                     </span><span>        </span><span>       </span>//e.getMessage();</span></p> <p><span><span>                     </span><span>        </span>}</span></p> <p><span><span>      </span><span>    </span></span></p> <p><span><span>       </span><span>        </span><span>              </span>System.out.println((char)ch);<span>       </span></span></p> <p><span><span>       </span><span>        </span><span>              </span>//System.out.println(ch);</span></p> <p><span><span>       </span><span>        </span><span>       </span>}</span></p> <p><span><span>       </span><span>        </span><span>       </span>while(ch!='q');</span></p> <p><span><span>    </span>}</span></p> <p><span>}</span></p> <p><strong><span>for</span></strong><strong><span>循环语句</span></strong><strong></strong></p> <p><span>for(</span><span>表达?/span><span>1, </span><span>表达?/span><span>2, </span><span>表达?/span><span>3) </span><span>语句</span></p> <p><strong><span>break</span></strong><strong><span>?/span></strong><strong><span>continue</span></strong><strong><span>语句</span></strong><strong></strong></p> <p><span>break</span><span>语句可以中止循环中的子语?/span><span>switch</span><span>语句。一个无标号?/span><span>break</span><span>语句会把控制传给当前Q最内)循环Q?/span><span>while,do,for</span><span>?/span><span>switch</span><span>Q的下一条语句。如果有标号Q控制会被传递给当前Ҏ中的带有q一标号的语句?/span></p> <p><span>St:while(true)</span></p> <p><span>{</span></p> <p><span><span>       </span>while(true)</span></p> <p><span><span>              </span>{</span></p> <p><span><span>                     </span>break st;</span></p> <p><span><span>              </span>}</span></p> <p><span>}</span></p> <p><span>continue</span><span>语句在能出现在@环语?/span><span>(while,do,for)</span><span>的子语句块中Q无标号?/span><span>continue</span><span>语句的作用是跌当前循环的剩余语句块Q接着执行下一ơ@环。用</span><span>continue</span><span>语句的打印出</span><span>0</span><span>?/span><span>10</span><span>之间的所有奇数的E序例子?/span></p> <p><span>public class TestContinue </span></p> <p><span>{</span></p> <p><span><span>    </span>public TestContinue() </span></p> <p><span><span>    </span>{</span></p> <p><span><span>    </span>}</span></p> <p><span><span>    </span>public static void main(String[] args) </span></p> <p><span><span>    </span>{</span></p> <p><span><span>        </span>// TODO code application logic here</span></p> <p><span><span>        </span>for(int i=0;i<10;i++)</span></p> <p><span><span>        </span>{</span></p> <p><span><span>        </span><span>       </span>if(i%2==0)</span></p> <p><span><span>        </span><span>              </span>continue;</span></p> <p><span><span>        </span><span>       </span>System.out.println(i);</span></p> <p><span><span>        </span>}</span></p> <p><span><span>    </span>}</span></p> <p><span>}</span></p> <p><strong><span>数组</span></strong><strong></strong></p> <p><span>?span>     </span></span><span>静态数l?/span></p> <p><span>?/span><span>int ia[]={1,2,3,4};</span></p> <p><span>?span>int[]ia=new int[]{3,4,5};</span></span></p> <p><span>?span>int a[5];//声明数组Ӟ不能指定光度,~译时将出错<br></span></span></p> <p><span><span>▂a</span>=null;</span><span><br>?span>     </span></span><span>使用数组时要注意的问?/span></p> <p><span>▂空指针异常</span></p> <p><span>▂如何计数l长?/span></p> <p><span>▂数l越界异?/span></p> <p><span>多维数组</span></p> <p><span>?span>     </span></span><span>java</span><span>中ƈ没有真正的多l数l,只有数组的数l,</span><span>Java</span><span>中多l数l不一定是规则矩阵形式?/span></p> <p> <img height=285 alt="" src="http://www.aygfsteel.com/images/blogjava_net/jianke/array.JPG" width=460 border=0></p> <p><span>?span>     </span></span><span>定义一个多l数l?/span></p> <p><span>int [][]xx;</span></p> <p><span>xx=new int [3][];</span></p> <p><span>xx[0]=new int[3];</span></p> <p><span>xx[1]=new int[2];</span></p> <p><span>xx[2]=new int[8];</span></p> <p><span>public class hello <br>{</span></p> <p><span></span></p> <p><span>      public static void main(String[] args) </span></p> <p><span>      {</span></p> <p><span><span>     </span></span><span><span>         </span>int[][]xx=new int[2][3];</span></p> <p><span><span>              </span>xx[0][0]=2;</span></p> <p><span><span>              </span>xx[1][2]=6;</span></p> <p><span><span>              </span>for(int i=0;i<xx.length;i++)</span></p> <p><span><span>              </span>{</span></p> <p><span><span>                     </span>for(int j=0;j<xx[i].length;j++)</span></p> <p><span><span>                     </span>{</span></p> <p><span><span>                            </span>System.out.println("xx["+i+"]["+j+"]="+xx[i][j]);</span></p> <p><span><span>                     </span>}</span></p> <p><span><span>              </span>}</span></p> <p><span>      }<span>     </span></span></p> <p><span>}<br>  </p> <p><strong><span>数组的排序:</span></strong><strong></strong></p> <p><span>class ArrayTest</span></p> <p><span>{</span></p> <p><span><span>              </span>public static void main(String[]args)</span></p> <p><span><span>              </span>{</span></p> <p><span><span>                     </span><span>       </span>int []x=new int[]{1,5,2,7,4};</span></p> <p><span><span>                     </span><span>       </span>for(int i=0;i<x.length;i++)</span></p> <p><span><span>                     </span><span>       </span>{</span></p> <p><span><span>                     </span><span>              </span><span>       </span>System.out.println("x["+i+"]="+x[i]);</span></p> <p><span><span>                     </span><span>       </span>}</span></p> <p><span><span>                     </span><span>       </span><strong>java.util.Arrays.sort(x);</strong></span></p> <p><span><span>                     </span><span>       </span>for(int i=0;i<x.length;i++)</span></p> <p><span><span>                     </span><span>       </span>{</span></p> <p><span><span>                     </span><span>              </span><span>       </span>System.out.println("x["+i+"]="+x[i]);</span></p> <p><span><span>                     </span><span>       </span>}</span></p> <p><span><span>              </span>}</span></p> <p><span>}</span></p> <p><strong><span>数组的拷贝:</span></strong><strong></strong></p> <pre><span>public static void <strong>arraycopy</strong>(Object</span> <span>src,</span></pre> <pre><span><span>                             </span>int</span> <span>srcPos,</span></pre> <pre><span><span>                             </span>Object</span> <span>dest,</span></pre> <pre><span><span>                             </span>int</span> <span>destPos,</span></pre> <p><span>i</span><span>nt</span> <span>length)</span></p> <p><span>class ArrayTest</span></p> <p><span>{</span></p> <p><span><span>              </span>public static void main(String[]args)</span></p> <p><span><span>              </span>{</span></p> <p><span><span>                     </span><span>       </span>int []x=new int[]{1,5,2,7,4};</span></p> <p><span><span>                     </span><span>       </span>for(int i=0;i<x.length;i++)</span></p> <p><span><span>                     </span><span>       </span>{</span></p> <p><span><span>                     </span><span>              </span><span>       </span>System.out.println("x["+i+"]="+x[i]);</span></p> <p><span><span>                     </span><span>       </span>}</span></p> <p><span><span>                     </span><span>       </span>int[]y=new int[10];</span></p> <p><span><span>                     </span><span>       </span><strong>System.arraycopy(x,0,y,1,4);</strong></span></p> <p><span><span>                     </span><span>       </span>for(int i=0;i<y.length;i++)</span></p> <p><span><span>                     </span><span>       </span>{</span></p> <p><span><span>                     </span><span>              </span><span>       </span>System.out.println("y["+i+"]="+y[i]);</span></p> <p><span><span>                     </span><span>       </span>}</span></p> <p><span><span>              </span>}</span></p> <p><span>}</span></p> </span> <img src ="http://www.aygfsteel.com/jianke/aggbug/117926.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jianke/" target="_blank">大头剑客</a> 2007-05-16 20:16 <a href="http://www.aygfsteel.com/jianke/articles/117926.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>讉K其他WEB应用E序http://www.aygfsteel.com/jianke/articles/115755.html大头剑客大头剑客Mon, 07 May 2007 13:25:00 GMThttp://www.aygfsteel.com/jianke/articles/115755.htmlhttp://www.aygfsteel.com/jianke/comments/115755.htmlhttp://www.aygfsteel.com/jianke/articles/115755.html#Feedback0http://www.aygfsteel.com/jianke/comments/commentRss/115755.htmlhttp://www.aygfsteel.com/jianke/services/trackbacks/115755.htmlimport java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.http.HttpServlet;

public class OtherContextServlet extends HttpServlet
{
 public void service(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException
 {
  PrintWriter pwout=response.getWriter();
  ServletContext rootContext=getServletContext().getContext("/");
  if(rootContext!=null)
  {
   pwout.println(rootContext.getRealPath("/")); 
  }
  else
  {
   pwout.println("getServlet failed!");
  }
 }
}

注:要想在某一WEB应用E序中获得其他WEB应用E序的ServletContext 对象Q必?nbsp;加入U字部分?nbsp;  <Context path="/it315" docBase="d:\myweb" debug="0" reloadable="true" crossContext="true" >



大头剑客 2007-05-07 21:25 发表评论
]]>
使用ServletContext接口和ClassLoadercM的方法访问资源文?/title><link>http://www.aygfsteel.com/jianke/articles/115691.html</link><dc:creator>大头剑客</dc:creator><author>大头剑客</author><pubDate>Mon, 07 May 2007 05:53:00 GMT</pubDate><guid>http://www.aygfsteel.com/jianke/articles/115691.html</guid><wfw:comment>http://www.aygfsteel.com/jianke/comments/115691.html</wfw:comment><comments>http://www.aygfsteel.com/jianke/articles/115691.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jianke/comments/commentRss/115691.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jianke/services/trackbacks/115691.html</trackback:ping><description><![CDATA[<p>import java.io.*;<br>import javax.servlet.http.*;<br>import javax.servlet.*;<br>import java.net.URL;<br>import java.util.Properties;<br>import javax.servlet.http.HttpServlet;</p> <p>public class ResourceServlet extends HttpServlet <br>{<br> public void service(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException<br> {<br>  response.setContentType("text/html;charset=GB2312");<br>  PrintWriter pwout=response.getWriter();<br>  URL urlIt=getServletContext().getResource("/WEB-INF/classes/longin.properties");<br>  pwout.println(urlIt.toString());<br>  pwout.println("<br>");<br>  /*下面的两条语句可以实CL功能Q但被注释的部分我没有实玎ͼ哪位好心帮我实现好了,谢谢?br>  it315.propertiesq个文g我放在了WEB-INF\classes目录中?/ <br>  //InputStream ips=getServletContext().getResourceAsStream("longin.properties");<br>  InputStream ips=getClass().getResourceAsStream("longin.properties");<br>  Properties props = new Properties();<br>  try<br>  {<br>   props.load(ips);<br>   pwout.println("database=" + props.getProperty("database"));<br>   pwout.println("username=" + props.getProperty("username"));<br>   pwout.println("password=" + props.getProperty("password"));<br>  }<br>  catch(Exception e)<br>  {<br>   e.printStackTrace();<br>  }</p> <p>  ips.close();<br> }<br>}<br><br>注:getClass().getResourceAsStreamҎ只能加蝲位于classloader搜烦目录中的资源文gQ如果将longin.properties文g攑֜WEB-INF目录外的其它目录Q就只能使用getServletContext().getResourceAsStreamҎ?/p> <img src ="http://www.aygfsteel.com/jianke/aggbug/115691.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jianke/" target="_blank">大头剑客</a> 2007-05-07 13:53 <a href="http://www.aygfsteel.com/jianke/articles/115691.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat启动分析http://www.aygfsteel.com/jianke/articles/115119.html大头剑客大头剑客Thu, 03 May 2007 03:44:00 GMThttp://www.aygfsteel.com/jianke/articles/115119.htmlhttp://www.aygfsteel.com/jianke/comments/115119.htmlhttp://www.aygfsteel.com/jianke/articles/115119.html#Feedback0http://www.aygfsteel.com/jianke/comments/commentRss/115119.htmlhttp://www.aygfsteel.com/jianke/services/trackbacks/115119.htmlTomcatW记(1)

Tomcat启动分析

heavyz, 2003-03-22

1 - Tomcat Server的组成部?

1.1 - Server

A Server element represents the entire Catalina servlet container. (Singleton)

1.2 - Service

A Service element represents the combination of one or more Connector components that share a single Engine
Service是这样一个集合:它由一个或者多个Connectorl成Q以及一个EngineQ负责处理所有Connector所获得的客戯?br>

1.3 - Connector

一个Connector在某个指定端口上侦听客戯求,q将获得的请求交lEngine来处理,从Engine处获得回应ƈq回客户
TOMCAT有两个典型的ConnectorQ一个直接侦听来自browser的httphQ一个侦听来自其它WebServer的请?br>Coyote Http/1.1 Connector 在端?080处侦听来自客户browser的httph
Coyote JK2 Connector 在端?009处侦听来自其它WebServer(Apache)的servlet/jsp代理h

1.4 - Engine

The Engine element represents the entire request processing machinery associated with a particular Service
It receives and processes all requests from one or more Connectors
and returns the completed response to the Connector for ultimate transmission back to the client
Engine下可以配|多个虚拟主机Virtual HostQ每个虚拟主机都有一个域?br>当Engine获得一个请求时Q它把该h匚w到某个Host上,然后把该h交给该Host来处?br>Engine有一个默认虚拟主机,当请求无法匹配到M一个Host上的时候,交l该默认Host来处?br>

1.5 - Host

代表一个Virtual HostQ虚拟主机,每个虚拟L和某个网l域名Domain Name相匹?br>每个虚拟L下都可以部v(deploy)一个或者多个Web AppQ每个Web App对应于一个ContextQ有一个Context path
当Host获得一个请求时Q将把该h匚w到某个Context上,然后把该h交给该Context来处?br>匚w的方法是“最长匹?#8221;Q所以一个path==""的Context成Host的默认Context
所有无法和其它Context的\径名匚w的请求都最l和该默认Context匚w

1.6 - Context

一个Context对应于一个Web ApplicationQ一个Web Application׃个或者多个Servletl成
Context在创建的时候将Ҏ配置文g$CATALINA_HOME/conf/web.xml?WEBAPP_HOME/WEB-INF/web.xml载入Servletc?br>当Context获得hӞ在自己的映表(mapping table)中寻扄匚w的Servletc?br>如果扑ֈQ则执行该类Q获得请求的回应Qƈq回

2 - Tomcat Server的结构图

3 - 配置文g$CATALINA_HOME/conf/server.xml的说?

该文件描qC如何启动Tomcat Server


<!----------------------------------------------------------------------------------------------->


<!-- 启动Server
在端?005处等待关闭命?
如果接受?SHUTDOWN"字符串则关闭服务?
-->

<Server port="8005" shutdown="SHUTDOWN" debug="0">

<!-- Listener ???
目前没有看到q里
-->

<Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" debug="0"/>
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" debug="0"/>

<!-- Global JNDI resources ???
目前没有看到q里Q先略去
-->

<GlobalNamingResources>
... ... ... ...
</GlobalNamingResources>

<!-- Tomcat的Standalone Service
Service是一lConnector的集?
它们q一个Engine来处理所有Connector收到的请?
-->

<Service name="Tomcat-Standalone">

<!-- Coyote HTTP/1.1 Connector
className : 该Connector的实现类是org.apache.coyote.tomcat4.CoyoteConnector
port : 在端口号8080处侦听来自客户browser的HTTP1.1h
minProcessors : 该Connector先创?个线E等待客戯求,每个h׃个线E负?
maxProcessors : 当现有的U程不够服务客户hӞ若线EL不75个,则创建新U程来处理请?
acceptCount : 当现有线E已l达到最大数75Ӟ为客戯求排?
当队列中h数超q?00Ӟ后来的请求返回Connection refused错误
redirectport : 当客戯求是httpsӞ把该h转发到端?443?
其它属性略
-->

<Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8080"
minProcessors="5" maxProcessors="75" acceptCount="100"
enableLookups="true"
redirectPort="8443"
debug="0"
connectionTimeout="20000"
useURIValidationHack="false"
disableUploadTimeout="true" />

<!-- Engine用来处理Connector收到的Httph
它将匚wh和自q虚拟LQƈ把请求{交给对应的Host来处?
默认虚拟L是localhost
-->

<Engine name="Standalone" defaultHost="localhost" debug="0">

<!-- 日志c,目前没有看到Q略d -->

<Logger className="org.apache.catalina.logger.FileLogger" .../>

<!-- RealmQ目前没有看刎ͼ略去?-->

<Realm className="org.apache.catalina.realm.UserDatabaseRealm" .../>

<!-- 虚拟Llocalhost
appBase : 该虚拟主机的根目录是webapps/
它将匚wh和自qContext的\径,q把h转交l对应的Context来处?
-->

<Host name="localhost" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true">

<!-- 日志c,目前没有看到Q略d -->

<Logger className="org.apache.catalina.logger.FileLogger" .../>

<!-- ContextQ对应于一个Web App
path : 该Context的\径名?"Q故该Context是该Host的默认Context
docBase : 该Context的根目录是webapps/mycontext/
-->

<Context path="" docBase="mycontext" debug="0"/>

<!-- 另外一个ContextQ\径名?wsota -->

<Context path="/wsota" docBase="wsotaProject" debug="0"/>
</Host>
</Engine>
</Service>
</Server>

<!----------------------------------------------------------------------------------------------->

 

4 - Context的部|配|文件web.xml的说?

一个Context对应于一个Web AppQ每个Web App是由一个或者多个servletl成?br>当一个Web App被初始化的时候,它将用自qClassLoader对象载入“部v配置文gweb.xml”中定义的每个servletc?br>它首先蝲入在$CATALINA_HOME/conf/web.xml中部|的servletc?br>然后载入在自qWeb App根目录下的WEB-INF/web.xml中部|的servletc?br>web.xml文g有两部分Qservletcd义和servlet映射定义
每个被蝲入的servletc都有一个名字,且被填入该Context的映表(mapping table)中,和某UURL PATTERN对应
当该Context获得hӞ查询mapping tableQ找到被h的servletQƈ执行以获得请求回?br>

分析一下所有的Context׃n的web.xml文gQ在其中定义的servlet被所有的Web App载入


<!----------------------------------------------------------------------------------------------->

<web-app>

<!-- 概述Q?
该文件是所有的WEB APPq的部|配|文Ӟ
每当一个WEB APP被DEPLOYQ该文g都将先被处理Q然后才是WEB APP自己?WEB-INF/web.xml
-->


<!--  +-------------------------+  -->
<!--  |    servletcd义部?   |  -->
<!--  +-------------------------+  -->


<!-- DefaultServlet
当用LHTTPh无法匚wM一个servlet的时候,该servlet被执?
URL PATTERN MAPPING : /
-->

<servlet>
<servlet-name>default</servlet-name>
<servlet-class>
org.apache.catalina.servlets.DefaultServlet
</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

<!-- InvokerServlet
处理一个WEB APP中的匿名servlet
当一个servlet被编写ƈ~译攑օ/WEB-INF/classes/中,却没有在/WEB-INF/web.xml中定义的时?
该servlet被调用,把匿名servlet映射?servlet/ClassName的Ş?
URL PATTERN MAPPING : /servlet/*
-->

<servlet>
<servlet-name>invoker</servlet-name>
<servlet-class>
org.apache.catalina.servlets.InvokerServlet
</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>

<!-- JspServlet
当请求的是一个JSP面的时候(*.jspQ该servlet被调?
它是一个JSP~译器,请求的JSP面~译成ؓservlet再执?
URL PATTERN MAPPING : *.jsp
-->

<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>logVerbosityLevel</param-name>
<param-value>WARNING</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>

<!--  +---------------------------+  -->
<!--  |    servlet映射定义部分    |  -->
<!--  +---------------------------+  -->

<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>invoker</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>

<!--  +------------------------+  -->
<!--  |    其它部分Q略d    |  -->
<!--  +------------------------+  -->

... ... ... ...
</web-app>

<!----------------------------------------------------------------------------------------------->

 

5 - Tomcat Server处理一个httph的过E?

假设来自客户的请求ؓQ?br>http://localhost:8080/wsota/wsota_index.jsp

1) h被发送到本机端口8080Q被在那里侦听的Coyote HTTP/1.1 Connector获得
2) Connector把该h交给它所在的Service的Engine来处理,q等待来自Engine的回?br>3) Engine获得hlocalhost/wsota/wsota_index.jspQ匹配它所拥有的所有虚拟主机Host
4) Engine匚w到名为localhost的HostQ即使匹配不C把请求交l该Host处理Q因Host被定义ؓ该Engine的默认主机)
5) localhost Host获得h/wsota/wsota_index.jspQ匹配它所拥有的所有Context
6) Host匚w到\径ؓ/wsota的ContextQ如果匹配不到就把该h交给路径名ؓ""的Contextd理)
7) path="/wsota"的Context获得h/wsota_index.jspQ在它的mapping table中寻扑֯应的servlet
8) Context匚w到URL PATTERN?.jsp的servletQ对应于JspServletc?br>9) 构造HttpServletRequest对象和HttpServletResponse对象Q作为参数调用JspServlet的doGet或doPostҎ
10)Context把执行完了之后的HttpServletResponse对象q回lHost
11)Host把HttpServletResponse对象q回lEngine
12)Engine把HttpServletResponse对象q回lConnector
13)Connector把HttpServletResponse对象q回l客户browser



大头剑客 2007-05-03 11:44 发表评论
]]>
Tomcat下创建和发布Web应用http://www.aygfsteel.com/jianke/articles/110849.html大头剑客大头剑客Sun, 15 Apr 2007 16:13:00 GMThttp://www.aygfsteel.com/jianke/articles/110849.htmlhttp://www.aygfsteel.com/jianke/comments/110849.htmlhttp://www.aygfsteel.com/jianke/articles/110849.html#Feedback0http://www.aygfsteel.com/jianke/comments/commentRss/110849.htmlhttp://www.aygfsteel.com/jianke/services/trackbacks/110849.html 

    前面我们把Tomcat+JDK1.5+MySQL+Eclipse架构搭v来了Q接下去的工作是举一个小例子让初学者明白如何创建和发布Web应用Q有了一个ȝ框架Q这样大家在做JSP和Servlet的时候就不会有一U破损残~、缺乏系l的感觉Q我的学习方式历来是q到细Q先看树木再俯瞰林会把我弄疯的......

1、首先创建Web应用的目录结构,我这里在Tomcat?webapps下面创徏一个Web应用的目录helloapp,q是Web应用的根目录Q所有JSP和HTML文g都存攑֜此目录下Q它下一U有个WEB-INF文g夹,它存放web.xml文g和classes、lib文g夹,详细后面再说Q先Z?

2、介lweb.xml文g。这是一个发布描q文Ӟ用来配置发布信息Q包括:Servlet定义QServlet初始化参敎ͼServlet以及JSP的映;安全域配|参敎ͼwelcome文g清单Q资源引用;环境变量的定义。闲话少_创徏web.xml文gQ内容如下:

<?xml version="1.0" encoding="ISO-8859-1"?>
  <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">

  </web-app>

W一行指定XML的版本和字符~码Q第二行指定文档cdQ?lt;web-app>中放着关于Web应用的配|元素?

3、在server.xml中加?lt;Context>元素。server.xml?conf?打开后在<host>后面加入如下<Context>元素

    <Context path="/helloapp" docBase="helloapp" debug="0"
     reloadable="true"/>

其中Qpath指定讉K该Web应用的URL入口QdocBase指定Web应用的文件\径;reloadable如果为true,一旦class文g被更斎ͼ服务器会自动重新加蝲Web应用Q当然这样会加重服务器运行负荗?

4、部|HTML文g。在helloapp下创建index.html文gQ内容如下:

<html>
 <head>
  <title>Alec's Addressing</title>
 </head>
 <body>
  <p><font size="7">Welcome to Alec's Home</p>
  <p><a href="login.jsp?language=English">English version</a>
    </body>
</html>

在浏览器地址栏键?a href="http://localhost:8080/helloapp/index.html">http://localhost:8080/helloapp/index.html

5、部|JSP。创Z个JSP文gQ一个login.jsp,一个hello.jsp。前者显C登陆页面,要求输入用户名和口oQ这个页面链接到名ؓDispatcherServlet的Servlet。后者被q个Servlet调用Q显Chello面。如前面所_JSP文g都放在helloapp下?

<html>
 <head>
  <title>Alex's Addressing</title>
 </head>
 <body>
  <br>
  <form name="loginForm" method="post" action="dispatcher">
   <table>
    <tr>
     <td><div align="right">用户名:</div></td>
     <td><input type="text" name="username"></td>
    </tr>
    <tr>
     <td><div align="right">密码Q?lt;/div></td>
     <td><input type="password" name="password"></td>
    </tr>
    <tr>
     <td></td>
     <td><input type="Submit" name="Submit" value="提交"></td>
    </tr>
   </table>
  </form>
 </body>
</html>

上述是login.jsp文g内容?

<html>
<head>
 <title>Alec's Addressing</title>
</head>
<body>
 <b>Ƣ迎Q?lt;%=request.getAttribute("USER")%></b>
</body>
</html>

q是hello.jsp文g内容?

6、部|Servlet。创建名为DispatcherServlet.java的文件编译成ServletQ它调用HttpServletRequest对象的getParameterҎd提交的loginForm表单数据Q获取用户名和口令,然后用户名和口令保存在HttpServletRequest对象的属性中Q在把请求{发给hello.jsp?

package mypack;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;

public class DispatcherServlet extends HttpServlet
{
 public String target="/hello.jsp";

 public void init(ServletConfig config)
  throws ServletException{
  super.init(config);
 }

 public void doGet(HttpServletRequest request,HttpServletResponse response)
  throws ServletException,IOException{
  doPost(request,response);
 }

 public void doPost(HttpServletRequest request,HttpServletResponse response)
  throws ServletException,IOException{
  String username=request.getParameter("username");
  String password=request.getParameter("password");

  request.setAttribute("USER",username);
  request.setAttribute("PASSWORD",password);

  //请求定向到目标文g
  ServletContext context=getServletContext();

  System.out.println("重定向到"+target);
  RequestDispatcher dispatcher=context.getRequestDispatcher(target);
  dispatcher.forward(request,response);
 }

 public void destroy(){
 }
}

上述是DispatcherServlet.java文gQ用来编译成servlet。编译成class文g后存放位|ؓ/helloapp/WEB-INF/classes/mypack/DispatcherServlet.classQ然后在/helloapp下的web.xml中作如下修改Q?

<?xml version="1.0" encoding="ISO-8859-1"?>

   <!DOCTYPE web-app PUBLIC

     '-//Sun Microsystems,Inc.//DTD Web Application 2.3//EN'

     'http://java.sun.com/j2ee/dtds/web-app_2_3.dtd'>

    <web-app>


      <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>mypack.DispatcherServlet</servlet-class>
      </servlet>


      <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/dispatcher</url-pattern>
      </servlet-mapping>


    </web-app>

说明一下,<servlet-name>定义Servlet的名字;<servlet-class>指定实现q个Servlet的类Q?lt;init-param>定义Servlet的初始化参数Q包括参数名和参数|Q一?lt;servlet>元素中可以有多个<init-param>元素Q?lt;load-on-startup>指当Web应用启动Ӟ装蝲Servlet的次序。当q个gؓ正数或零ӞServlet容器先加载数值小的servletQ再依次加蝲其他数值大的servletQ如果这个gؓ负数或者没有设定,那么Servlet容器在Web客户首次讉Kq个Servlet时加载它。我q里没用到后两个元素?

7、部|JSP Tag Library

Tag Library向用h供了自定义JSP标签的功能。我们定义一个名为mytaglib的标{ֺQ包含一个简单的hello标签Q它能将JSP面中所有的<mm:hello/>解析为字W串“Hello”?

Q?Q?

package mypack;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.tagext.TagSupport;

public class HelloTag extends TagSupport
{
 public void HelloTag(){}
 public int doEndTag() throws JspException{

  try{
   pageContext.getOut().print("Hello");
  }
  catch(Exception e){
   throw new JspTagException(e.getMessage());
  }

  return SKIP_BODY;
 }

 public void release(){
  super.release();
 }
}

q是HelloTag.java文gQ编译成用于处理hello标签的类?

Q?Q创建Tag Library的描q文件mytaglib.tld文gQ这个文件定义mytaglib标签库和hello标签。它存放?WEB-INF/mytaglib.tld。源码如下:

<?xml version="1.0" encoding="ISO-8859-1"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">

 <tlibversion>1.0</tlibversion>
 <jspversion>1.1</jspversion>
 <shortname>mytaglib</shortname>
 <uri>mytaglib</uri>

 <tag>
   <name>hello</name>
   <tagclass>mypack.HelloTag</tagclass>
   <bodycontent>empty</bodycontent>
   <info>Just Says Hello</info>
 </tag>
</taglib>

Q?Q在/helloapp/WEB-INF下的web.xmld<taglib>元素Q如下:

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">
  <servlet>
   <servlet-name>dispatcher</servlet-name>
   <servlet-class>mypack.DispatcherServlet</servlet-class>
  </servlet>
  <servlet-mapping>
   <servlet-name>dispatcher</servlet-name>
   <url-pattern>/dispatcher</url-pattern>
  </servlet-mapping>

  <taglib>
   <taglib-uri>/mytaglib</taglib-uri>
   <taglib-location>/WEB-INF/mytaglib.tld</taglib-location>
  </taglib>

    </web-app>

<taglib>中包?lt;taglib-uri>?lt;taglib-location>属性。前者指定Tag Library标示W;后者指定Tag Library的描q文?TLD)的位|?

Q?Q在hello.jsp文g中加入hello标签。prefix用来指定引用mytaglib标签库时的前~Q修改后如下Q?

<%@ taglib uri="/mytaglib" prefix="mm"%>
<html>
<head>
 <title>Alec's Addressing</title>
</head>
<body>
 <b><mm:hello/><%=request.getAttribute("USER")%></b>
</body>
</html>

l测试OKQ?

8、创建ƈ发布WAR文g。一般来_在Web应用的开发阶D,Z方便调试Q采用开攑ּ的目录结构来发布Web应用Q这h便更新或替换文g。品发布时Q应整个Web应用打包为WAR文gQ再q行发布?

Q?QMS-DOS下进?helloapp目录下键入如下命令:jar cvf helloapp.war *.*Q?

Q?Q把helloapp.war拯?webapps目录下;

Q?Q删除原来的helloapp目录Q?

Q?Q启动Tomcat服务器?

Tomcat服务器启动时Q会把webapps下所有WAR文g自动展开为开攑ּ的目录结构,变ؓ/webapps/helloapp目录?br>文章来源Q?a >http://syneer1981.spaces.live.com/blog/cns!6F8B2C7500427759!120.entry?_c=BlogPart



大头剑客 2007-04-16 00:13 发表评论
]]>
◆用UDP~写|络聊天E序http://www.aygfsteel.com/jianke/articles/96607.html大头剑客大头剑客Mon, 29 Jan 2007 12:31:00 GMThttp://www.aygfsteel.com/jianke/articles/96607.htmlhttp://www.aygfsteel.com/jianke/comments/96607.htmlhttp://www.aygfsteel.com/jianke/articles/96607.html#Feedback0http://www.aygfsteel.com/jianke/comments/commentRss/96607.htmlhttp://www.aygfsteel.com/jianke/services/trackbacks/96607.html * @(#)Chat1.java
 *
 * Chat1 application
 *
 * @author
 * @version 1.00 2007/1/29
 */
 import java.awt.List;
 import java.awt.*;
 import java.awt.event.*;
 import java.net.*;
 import java.util.*;
public class Chat1 extends Frame
{
 List lst=new List(6);
 TextField tfIP=new TextField(15);
 TextField tfData=new TextField(20);
 DatagramSocket ds=null;
    public Chat1()
    {
     this.addWindowListener(new WindowAdapter()
     {
      public void windowClosing(WindowEvent e)
      {
       ds.close();
       e.getWindow().dispose();
       System.exit(0);
      }
     });
     Panel pl=new Panel();
     pl.setLayout(new BorderLayout());
     pl.add(tfIP,BorderLayout.WEST);
     pl.add(tfData,BorderLayout.EAST);
     this.add(lst,BorderLayout.CENTER);
     this.add(pl,BorderLayout.SOUTH);
     
     try
     {
    ds=new DatagramSocket(3000);
     }
     catch(Exception e)
     {
      e.printStackTrace();
     }
     
     new Thread(new Runnable()
     {
      public void run()
      {
       byte []buf=new byte [1024];
       DatagramPacket dp=new DatagramPacket(buf,1024);
       while(true)
       {
        try
        {
         ds.receive(dp);
         Calendar c=Calendar.getInstance();
         lst.add(new String(dp.getData(),0,dp.getLength())+"    from: "+
          dp.getAddress().getHostAddress()+":"+dp.getPort()+new Date(),0); 
        }
        catch(Exception e)
        {
         if(ds.isClosed()==false)
         {
          e.printStackTrace();
         } 
        } 
       }
      }
     }).start();
     
     tfData.addActionListener(new ActionListener()
     {
      public void actionPerformed(ActionEvent e)
      {
       byte []buf=tfData.getText().getBytes();
       try
       {
        DatagramPacket dp=new DatagramPacket(buf,buf.length,
         InetAddress.getByName(tfIP.getText()),3000);
        ds.send(dp);
       }
       catch(Exception ex)
       {
        ex.printStackTrace();
       }
       //lst.add(tfData.getText());
       tfData.setText("");
       
      }
     });
     
     
    }
    public static void main(String[] args)
    {
     
     // TODO, add your application code
     System.out.println("Hello World!");
     Chat1 mainFrame=new Chat1();
     mainFrame.setTitle("Chat");
     mainFrame.setBounds(300,200,300,400);
     mainFrame.setVisible(true);
     mainFrame.setResizable(false);
    }
}


大头剑客 2007-01-29 20:31 发表评论
]]>
W九?|络~程http://www.aygfsteel.com/jianke/articles/96296.html大头剑客大头剑客Sat, 27 Jan 2007 10:32:00 GMThttp://www.aygfsteel.com/jianke/articles/96296.htmlhttp://www.aygfsteel.com/jianke/comments/96296.htmlhttp://www.aygfsteel.com/jianke/articles/96296.html#Feedback0http://www.aygfsteel.com/jianke/comments/commentRss/96296.htmlhttp://www.aygfsteel.com/jianke/services/trackbacks/96296.html W九?/span> |络~程

?span style="FONT: 7pt 'Times New Roman'">     |络~程的基知识

?span style="FONT: 7pt 'Times New Roman'">     |络协议?/span> TCP/IP

?span style="FONT: 7pt 'Times New Roman'">     IP 地址?/span> Port Q端口号Q?/span>

▼本地回路的 IP 地址Q?/span> 127.0.0.1

▼端口号的范围ؓ 0 ?/span> 65535 之间Q?/span> 0 ?/span> 1023 之间的端口数是用于一些知名的|络服务和应用?/span>

?span style="FONT: 7pt 'Times New Roman'">     UDP |络E序

?/span> UDP Q用h据报协议Q?/span> User Datagram Protocol Q,是无q接通信协议?/span>

?span style="FONT: 7pt 'Times New Roman'">     TCP |络E序

?span style="FONT: 7pt 'Times New Roman'">     TCP Q传输控制协议( Transmission Control Protocol Q?/span> , 是面向连接的通信协议?/span>

TCP ?/span> UDP 的数据格式单图例:

协议cd

?/span> IP

目标 IP

源端?/span>

目标端口

帧序?/span>

帧数?/span>

                                                        其中协议cd用于区分 TCP Q?/span> UDP

Socket

?span style="FONT: 7pt 'Times New Roman'">     Socket 是网l驱动层提供l应用程序编E的接口和一U机制?/span>

?span style="FONT: 7pt 'Times New Roman'">     可以?/span> Socket 比喻成是一个港口码_应用E序只要把货物放到港口码头上Q就完成了货物的运送。应用程序只需{待货物到达码头后,货物取走?/span>

?span style="FONT: 7pt 'Times New Roman'">     Socket 是应用程序中创徏Q通过一U绑定机制与驱动E序建立关系Q告诉自己所对应?/span> IP ?/span> Port ?/span>

?span style="FONT: 7pt 'Times New Roman'">     Socket 数据发送过E?/span>

?span style="FONT: 7pt 'Times New Roman'">     Socket 数据接收q程

Java 中的|络~程c?/span>

?span style="FONT: 7pt 'Times New Roman'">     位于 java.net 包中

?span style="FONT: 7pt 'Times New Roman'">     DatagramSocket cȝ?/span> UDP 通信

?span style="FONT: 7pt 'Times New Roman'">     ServerSocket cȝ?/span> TCP 通信的服务器端(接受客户端连接的Q?/span>

?span style="FONT: 7pt 'Times New Roman'">     Socket cȝ?/span> TCP 通信的服务器Q专用于和客Lq行数据传输的)和客L

UDP |络E序

?span style="FONT: 7pt 'Times New Roman'">     DatagramSocket c?/span>

此类表示用来发送和接收数据报包的套接字?span lang="EN-US">

数据报套接字是包投递服务的发送或接收炏V每个在数据报套接字上发送或接收的包都是单独~址和\q。从一台机器发送到另一台机器的多个包可能选择不同的\由,也可能按不同的顺序到达?span lang="EN-US">

?span lang="EN-US"> DatagramSocket 上L启用 UDP q播发送。ؓ了接收广播包Q应该将 DatagramSocket l定到通配W地址。在某些实现中,?DatagramSocket l定C个更加具体的地址时广播包也可以被接收?

CZQ?/font> DatagramSocket s = new DatagramSocket(null); s.bind(new InetSocketAddress(8888)); q等价于Q?/font> DatagramSocket s = new DatagramSocket(8888); 两个例子都能创徏能够?UDP 8888 端口上接收广播的 DatagramSocket

?span style="FONT: 7pt 'Times New Roman'">     构造函?/span>

?span lang="EN-US">DatagramSocket ()
          
构造数据报套接字ƈ其l定到本CZM可用的端口?/span>

?span lang="EN-US">DatagramSocket (int   port)
          
创徏数据报套接字q将其绑定到本地L上的指定端口

?span lang="EN-US">DatagramSocket (int   port, InetAddress   laddr)
          
创徏数据报套接字Q将其绑定到指定的本地地址?/span>

?span style="FONT: 7pt 'Times New Roman'">     close ()
          
关闭此数据报套接字?/span>

?span style="FONT: 7pt 'Times New Roman'">     send (DatagramPacket   p)
          
从此套接字发送数据报包?/span>

?span style="FONT: 7pt 'Times New Roman'">     receive (DatagramPacket   p)
          
从此套接字接收数据报包?/span>

?span style="FONT: 7pt 'Times New Roman'">     DatagramPacket c?/span>

如果?/span> DatagramSocket 比作创徏的港口码_那么 DatagramPacket 是发送和接收数据的集装箱?/span>

?span style="FONT: 7pt 'Times New Roman'">     构造函敎ͼ

?span lang="EN-US">DatagramPacket (byte[]   buf, int   length)
          
构?/span> DatagramPacket Q用来接攉度ؓ length 的数据包

?span lang="EN-US">DatagramPacket (byte[]   buf, int   length, InetAddress   address, int   port)
          
构造数据报包,用来长度ؓ length 的包发送到指定L上的指定端口受?/span>

?span style="FONT: 7pt 'Times New Roman'">     getAddress ()
          
q回某台机器?/span> IP 地址Q此数据报将要发往该机器或者是从该机器接收到的?/span>

?span style="FONT: 7pt 'Times New Roman'">     getPort ()
          
q回某台q程L的端口号Q此数据报将要发往该主机或者是从该L接收到的?/span>

?span style="FONT: 7pt 'Times New Roman'">     getData ()
          
q回数据~冲区?/span>

?span style="FONT: 7pt 'Times New Roman'">     getLength ()
          
q回要发送或接收到的数据的长度?/span>

?span style="FONT: 7pt 'Times New Roman'">     InetAddress c?/span>

?span style="FONT: 7pt 'Times New Roman'">     InetAddress 是用于表C机 IP 地址的一个类Q而在日常应用中的计算机地址是用?/span> 192.168.0.1 ”?/span> www.it315.org {字W串格式来表C的?/span>

?span style="FONT: 7pt 'Times New Roman'">     getByName (String   host)
          
在给定主机名的情况下定L?/span> IP 地址?/span>

?span style="FONT: 7pt 'Times New Roman'">     getHostAddress ()
          
q回 IP 地址字符Ԍ以文本表现Ş式)?/span>

?span style="FONT: 7pt 'Times New Roman'">     getHostName ()
          
获取?/span> IP 地址的主机名?/span>

?span style="FONT: 7pt 'Times New Roman'">     getLocalHost ()
          
q回本地L?/span>

?span style="FONT: 7pt 'Times New Roman'">     最单的 UDP E序

?span style="FONT: 7pt 'Times New Roman'">     字符串与字节数组之间的双向{?/span>

?span style="FONT: 7pt 'Times New Roman'">     UDP 接收E序必须先启动运行,才能接收 UDP 发送程序发送的数据?/span>

?span style="FONT: 7pt 'Times New Roman'">     ?/span> start 命o来打开新命令行H口的好处?/span>

?span style="FONT: 7pt 'Times New Roman'">     解决发送中文字W串的问题?/span>

?span style="FONT: 7pt 'Times New Roman'">     ?/span> UDP ~写|络聊天E序
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
import java.net.*;
public class UdpSend
{
 
 /**
  * Method main
  *
  *
  * @param args
  *
  */
 public static void main(String[] args)
 {
  // TODO: Add your code here
  try
  {
   DatagramSocket ds=new DatagramSocket();
   /*
   String strInfo="hello    ds.send(new DatagramPacket(strInfo.getBytes(),strInfo.length(),InetAddress.getByName("192.168.0.239"),2000));
   */
   String str="hello 中国";
   ds.send(new DatagramPacket(str.getBytes(),str.getBytes().length,InetAddress.getByName("192.168.0.239"),2500));
   ds.close();
  }
  catch(Exception e)
  {
   e.printStackTrace();
  }
  
 } 
}
import java.net.*;
public class UdpReceive
{
 
 /**
  * Method main
  *
  *
  * @param args
  *
  */
 public static void main(String[] args)
 {
  // TODO: Add your code here
  try
  {
   DatagramSocket ds=new DatagramSocket(2500);
   byte []buf=new byte [1024];
   DatagramPacket dp=new DatagramPacket(buf,1024);
   ds.receive(dp);
   System.out.println(new String(dp.getData(),0,dp.getLength())+
    " from:"+" IP: "+dp.getAddress().getHostAddress()+" Port: "+dp.getPort());
   ds.close();
  }
  catch(Exception e)
  {
   e.printStackTrace();
  }
  
  
 } 
}


       



大头剑客 2007-01-27 18:32 发表评论
]]>
BoxLayoutlghttp://www.aygfsteel.com/jianke/articles/96165.html大头剑客大头剑客Fri, 26 Jan 2007 07:16:00 GMThttp://www.aygfsteel.com/jianke/articles/96165.htmlhttp://www.aygfsteel.com/jianke/comments/96165.htmlhttp://www.aygfsteel.com/jianke/articles/96165.html#Feedback0http://www.aygfsteel.com/jianke/comments/commentRss/96165.htmlhttp://www.aygfsteel.com/jianke/services/trackbacks/96165.html/**
 * @(#)TestBoxLayout.java
 *
 * TestBoxLayout application
 *
 * @author
 * @version 1.00 2007/1/25
 */
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.EventListener;
public class TestBoxLayout extends JFrame implements ActionListener
{
 JTextField jtf=new JTextField(); 
    public TestBoxLayout()
    {
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     Container c=this.getContentPane();
     
     JPanel jpl1=new JPanel();
     JPanel jpl2=new JPanel();
     JPanel jpl3=new JPanel();
     JPanel jpl4=new JPanel();
     
     //BoxLayout blo=new BoxLayout(jtf,BoxLayout.LINE_AXIS);
     BoxLayout blo1=new BoxLayout(jpl1,BoxLayout.X_AXIS);
     BoxLayout blo2=new BoxLayout(jpl2,BoxLayout.X_AXIS);
     BoxLayout blo3=new BoxLayout(jpl3,BoxLayout.X_AXIS);
     BoxLayout blo4=new BoxLayout(jpl4,BoxLayout.X_AXIS);
     /*
     blo1.maximumLayoutSize(jpl1);
     blo2.maximumLayoutSize(jpl2);
     blo3.maximumLayoutSize(jpl3);
     blo4.maximumLayoutSize(jpl4);
     */
     jpl1.setLayout(blo1);
     jpl2.setLayout(blo2);
     jpl3.setLayout(blo3);
     jpl4.setLayout(blo4);
     
     JButton jb=null;
   
     for(int i=0;i<4;i++)
     {
      String str=new String("123+");
      Character ch=str.charAt(i);
      jb=new JButton(ch.toString());
      jb.setSize(100,100);
      jpl1.add(jb);
      jb.addActionListener(this);
     }
     for(int i=0;i<4;i++)
     {
      String str=new String("456-");
      Character ch=str.charAt(i);
      jb=new JButton(ch.toString());
      jpl2.add(jb);
      jb.addActionListener(this);
     }
      
     for(int i=0;i<4;i++)
     {
      String str=new String("789*");
      Character ch=str.charAt(i);
      jb=new JButton(ch.toString());
      jpl3.add(jb);
      jb.addActionListener(this);
     }
     for(int i=0;i<4;i++)
     {
      String str=new String("0.=\\");
      Character ch=str.charAt(i);
      jb=new JButton(ch.toString());
      jpl4.add(jb);
      jb.addActionListener(this);
     }
     c.setLayout(new GridLayout(5,1));
     c.add(jtf);
     c.add(jpl1);
     c.add(jpl2);
     c.add(jpl3);
     c.add(jpl4);
    }
    public static void main(String[] args)
    {
     
     // TODO, add your application code
     System.out.println("Hello World!");
     TestBoxLayout mainFrame=new TestBoxLayout();
     mainFrame.setTitle("TestBoxLayout");
     mainFrame.setBounds(300,200,200,200);
     mainFrame.setVisible(true);
    }

 /**
  * Method actionPerformed
  *
  *
  * @param e
  *
  */
 public void actionPerformed(ActionEvent e)
 {
  // TODO: Add your code here
  jtf.setText(jtf.getText()+e.getActionCommand());
  //d.setText(jfd.getText()+e.getActionCommand());
 }
}



大头剑客 2007-01-26 15:16 发表评论
]]>
GridLayout,JPanelghttp://www.aygfsteel.com/jianke/articles/96162.html大头剑客大头剑客Fri, 26 Jan 2007 07:14:00 GMThttp://www.aygfsteel.com/jianke/articles/96162.htmlhttp://www.aygfsteel.com/jianke/comments/96162.htmlhttp://www.aygfsteel.com/jianke/articles/96162.html#Feedback0http://www.aygfsteel.com/jianke/comments/commentRss/96162.htmlhttp://www.aygfsteel.com/jianke/services/trackbacks/96162.html/**
 * @(#)TestCalculator.java
 *
 * TestCalculator application
 *
 * @author
 * @version 1.00 2007/1/22
 */
 import java.*;
 import java.awt.*;
 import java.awt.event.*;
 import javax.swing.*;
import java.util.EventListener;
public class TestCalculator extends JFrame implements ActionListener
{
 private JTextField jfd=new JTextField();
 String str=new String("123+456-789*0.=\\");
 String strch=null;
 Character ch=null;
 
    public TestCalculator()
    {
     
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     Container c=this.getContentPane();
     jfd.setHorizontalAlignment(JTextField.RIGHT);
     JPanel jpl=new JPanel();
     jpl.setLayout(new GridLayout(4,4));
     c.add(jfd,BorderLayout.NORTH);
     c.add(jpl,BorderLayout.CENTER);
     //System.out.println(str.substring(1));
     JButton b=null;

     for(int i=0;i<16;i++)
     {
      ch=str.charAt(i);
      b=new JButton(ch.toString());
      //b=new JButton(new Integer(i+1).toString());
      b.addActionListener(this);
      jpl.add(b);
     }
     /*b=new JButton("1");
     b.addActionListener(this);
     jpl.add(b);
     
     b=new JButton("2");
     b.addActionListener(this);
     jpl.add(b);
     
     b=new JButton("3");
     b.addActionListener(this);
     jpl.add(b);
     
     b=new JButton("+");
     b.addActionListener(this);
     jpl.add(b);
     
     b=new JButton("4");
     b.addActionListener(this);
     jpl.add(b);
     
     b=new JButton("5");
     b.addActionListener(this);
     jpl.add(b);
     
     b=new JButton("6");
     b.addActionListener(this);
     jpl.add(b);
     
     b=new JButton("-");
     b.addActionListener(this);
     jpl.add(b);
     
     b=new JButton("7");
     b.addActionListener(this);
     jpl.add(b);
     
     b=new JButton("8");
     b.addActionListener(this);
     jpl.add(b);
     
     b=new JButton("9");
     b.addActionListener(this);
     jpl.add(b);
     
     b=new JButton("*");
     b.addActionListener(this);
     jpl.add(b);
     
     b=new JButton("0");
     b.addActionListener(this);
     jpl.add(b);
     
     b=new JButton(".");
     b.addActionListener(this);
     jpl.add(b);
     
     b=new JButton("=");
     b.addActionListener(this);
     jpl.add(b);
     
     b=new JButton("\\");
     b.addActionListener(this);
     jpl.add(b);*/
     
     
     
   
      
    }
    public static void main(String[] args)
    {
     
     // TODO, add your application code
     System.out.println("Hello World!");
     TestCalculator mainFrame=new TestCalculator();
     mainFrame.setTitle("TestCalculator");
     mainFrame.setBounds(300,200,300,400);
     mainFrame.setVisible(true);
    }


 public void actionPerformed(ActionEvent e)
 {
  // TODO: Add your code here
     //||strnum.indexOf("-")!=-1||strnum.indexOf("*")!=-1||strnum.indexOf("\\")!=-1
  
  String strnum=jfd.getText();
  //System.out.println(strnum);
  Character c1='+';
  //Character c2='-';
  int n1=0;
  float num1=0;
  float num2=0;
  float sum=0;
  Integer len=new Integer(0);
  
  if(e.getActionCommand().equals("+")||e.getActionCommand().equals("-")||e.getActionCommand().equals("*")||e.getActionCommand().equals("\\"))
  {
   
   num1=new Float(strnum.substring(0,len));
   
   System.out.println(num1);
   if(strnum.indexOf(c1)!=-1||strnum.indexOf("-")!=-1||strnum.indexOf("*")!=-1||strnum.indexOf("\\")!=-1)
   {
    //System.out.println(strnum.length());
    jfd.setText(jfd.getText());
    //System.out.println(e.getActionCommand());
   }
   else
   {
    jfd.setText(jfd.getText()+e.getActionCommand());
     
    //System.out.println("no find.");
   }
   
  }
  else if(e.getActionCommand().equals("."))
  {
   
   if(strnum.indexOf(".")!=-1)
   {
    
    n1=strnum.indexOf(".");
    
    //System.out.println(strnum.length());
    if(strnum.substring(n1+1,n1+1).equals(".")==false)
    {
     //System.out.println(strnum.substring(n1+1,n1+1).equals("."));
     jfd.setText(jfd.getText());
     
    }
    else
    {
     jfd.setText(jfd.getText()+e.getActionCommand());
     
    }
   }
   else
   {
    jfd.setText(jfd.getText()+e.getActionCommand());
   }
   
  }
  else
  {
   if(e.getActionCommand().equals("="))
   {
    if(strnum.indexOf("=")!=-1)
    {
     jfd.setText(jfd.getText());
    }
    else
    {
     
     jfd.setText(jfd.getText()+e.getActionCommand());
    
    
     //System.out.println(strnum.substring(len+1,strnum.length()));
    }
   }
   else
   {
    jfd.setText(jfd.getText()+e.getActionCommand());
   }
   
  }
  
 }
}



大头剑客 2007-01-26 15:14 发表评论
]]>
Swing中的标准对话?/title><link>http://www.aygfsteel.com/jianke/articles/95195.html</link><dc:creator>大头剑客</dc:creator><author>大头剑客</author><pubDate>Sun, 21 Jan 2007 17:32:00 GMT</pubDate><guid>http://www.aygfsteel.com/jianke/articles/95195.html</guid><wfw:comment>http://www.aygfsteel.com/jianke/comments/95195.html</wfw:comment><comments>http://www.aygfsteel.com/jianke/articles/95195.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jianke/comments/commentRss/95195.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jianke/services/trackbacks/95195.html</trackback:ping><description><![CDATA[/**<br /> * @(#)TestJOptionPane.java<br /> *<br /> * TestJOptionPane application<br /> *<br /> * @author <br /> * @version 1.00 2007/1/22<br /> */<br /> import javax.swing.*;<br /> import javax.swing.event.*;<br /> import java.awt.event.*;<br />public class TestJOptionPane extends JFrame<br />{<br /> String strValue=null;<br />    public TestJOptionPane()<br />    {<br />     JOptionPane.showMessageDialog(/*this*/null,"E序已开始运?..","q行",JOptionPane.DEFAULT_OPTION);<br />     JTextArea jta=new JTextArea();<br />     JScrollPane jsp=new JScrollPane();<br />     jsp.getViewport().add(jta);<br />     this.getContentPane().add(jsp);<br />     this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);<br />     strValue=JOptionPane.showInputDialog(null,"误入姓名:");<br />     //jta.setText(strValue);<br />     jta.append(strValue);<br />     addWindowListener(new WindowAdapter()<br />     {<br />      public void windowClosing(WindowEvent e)<br />      {<br />       if(JOptionPane.OK_OPTION==JOptionPane.showConfirmDialog(TestJOptionPane.this,"认要退出程序吗Q?,"Exit",JOptionPane.OK_CANCEL_OPTION,JOptionPane.WARNING_MESSAGE))<br />       {<br />        e.getWindow().dispose();<br />       }<br />       <br />      }<br />     });<br />     <br />    }<br />    public static void main(String[] args) <br />    {<br />     <br />     // TODO, add your application code<br />     System.out.println("Hello World!");<br />     TestJOptionPane mainFrame=new TestJOptionPane();<br />     mainFrame.setTitle("TestJOptionPane");<br />     mainFrame.setBounds(300,200,400,400);<br />     mainFrame.setVisible(true);<br />    }<br />}<br /><img src ="http://www.aygfsteel.com/jianke/aggbug/95195.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jianke/" target="_blank">大头剑客</a> 2007-01-22 01:32 <a href="http://www.aygfsteel.com/jianke/articles/95195.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JscrollPanelghttp://www.aygfsteel.com/jianke/articles/95193.html大头剑客大头剑客Sun, 21 Jan 2007 15:57:00 GMThttp://www.aygfsteel.com/jianke/articles/95193.htmlhttp://www.aygfsteel.com/jianke/comments/95193.htmlhttp://www.aygfsteel.com/jianke/articles/95193.html#Feedback0http://www.aygfsteel.com/jianke/comments/commentRss/95193.htmlhttp://www.aygfsteel.com/jianke/services/trackbacks/95193.html * @(#)TestSwing.java
 *
 * TestSwing application
 *
 * @author
 * @version 1.00 2007/1/21
 */
 import javax.swing.*;
public class TestSwing extends JFrame
{
    public TestSwing()
    {
     JTextArea jta=new JTextArea(50,50);
      JScrollPane jsp=new JScrollPane();
      jsp.getViewport().add(jta);
      this.getContentPane().add(jsp);
      this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    public static void main(String[] args)
    {
     
     // TODO, add your application code
     System.out.println("Hello World!");
     TestSwing mainFrame=new TestSwing();
     mainFrame.setTitle("TestSwing");
     mainFrame.setBounds(300,200,400,400);
     mainFrame.setVisible(true);
    }
}


大头剑客 2007-01-21 23:57 发表评论
]]>
JFrame来创建程序的L架窗?/title><link>http://www.aygfsteel.com/jianke/articles/95173.html</link><dc:creator>大头剑客</dc:creator><author>大头剑客</author><pubDate>Sun, 21 Jan 2007 13:22:00 GMT</pubDate><guid>http://www.aygfsteel.com/jianke/articles/95173.html</guid><wfw:comment>http://www.aygfsteel.com/jianke/comments/95173.html</wfw:comment><comments>http://www.aygfsteel.com/jianke/articles/95173.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jianke/comments/commentRss/95173.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jianke/services/trackbacks/95173.html</trackback:ping><description><![CDATA[/**<br /> * @(#)TestSwing.java<br /> *<br /> * TestSwing application<br /> *<br /> * @author <br /> * @version 1.00 2007/1/21<br /> */<br /> import javax.swing.*;<br />public class TestSwing extends JFrame<br />{<br />    public TestSwing()<br />    {<br />     this.getContentPane().add(new JButton("hello"),"South");<br />     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);<br />    }<br />    public static void main(String[] args) <br />    {<br />     <br />     // TODO, add your application code<br />     System.out.println("Hello World!");<br />     TestSwing mainFrame=new TestSwing();<br />     mainFrame.setTitle("TestSwing");<br />     mainFrame.setBounds(300,200,400,400);<br />     mainFrame.setVisible(true);<br />    }<br />}<br /><img src ="http://www.aygfsteel.com/jianke/aggbug/95173.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jianke/" target="_blank">大头剑客</a> 2007-01-21 21:22 <a href="http://www.aygfsteel.com/jianke/articles/95173.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>取消布局理?/title><link>http://www.aygfsteel.com/jianke/articles/95120.html</link><dc:creator>大头剑客</dc:creator><author>大头剑客</author><pubDate>Sun, 21 Jan 2007 05:28:00 GMT</pubDate><guid>http://www.aygfsteel.com/jianke/articles/95120.html</guid><wfw:comment>http://www.aygfsteel.com/jianke/comments/95120.html</wfw:comment><comments>http://www.aygfsteel.com/jianke/articles/95120.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jianke/comments/commentRss/95120.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jianke/services/trackbacks/95120.html</trackback:ping><description><![CDATA[ <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"> <span style="FONT-SIZE: 16pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">取消布局理?/span> <span lang="EN-US" style="FONT-SIZE: 16pt; mso-bidi-font-size: 12.0pt"> <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; tab-stops: list 18.0pt; mso-list: l1 level1 lfo4"> <span lang="EN-US" style="FONT-FAMILY: 宋体">?span style="FONT: 7pt 'Times New Roman'">     </span></span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">调用</span> <span lang="EN-US">Container.setLayout(null)</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Ҏ取消布局理器设|,在这U情况下Q可以调?/span> <span lang="EN-US">Component.setBounds</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Ҏ来用l对坐标讄容器上的每个lg的大和位置?/span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; tab-stops: list 18.0pt; mso-list: l1 level1 lfo4"> <span lang="EN-US" style="FONT-FAMILY: 宋体">?span style="FONT: 7pt 'Times New Roman'">     </span></span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不用布局理器将会给E序</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">带来一个潜在的问题Q当容器大小改变Ӟ所有组件仍保持原来的位|和大小Q将D整个E序界面比较“难看”?/span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"> <span lang="EN-US"> <o:p></o:p></span> </p> <img src ="http://www.aygfsteel.com/jianke/aggbug/95120.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jianke/" target="_blank">大头剑客</a> 2007-01-21 13:28 <a href="http://www.aygfsteel.com/jianke/articles/95120.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>布局理器—CardLayout、GridLayout(Panellg)http://www.aygfsteel.com/jianke/articles/95117.html大头剑客大头剑客Sun, 21 Jan 2007 05:01:00 GMThttp://www.aygfsteel.com/jianke/articles/95117.htmlhttp://www.aygfsteel.com/jianke/comments/95117.htmlhttp://www.aygfsteel.com/jianke/articles/95117.html#Feedback0http://www.aygfsteel.com/jianke/comments/commentRss/95117.htmlhttp://www.aygfsteel.com/jianke/services/trackbacks/95117.html * @(#)TestCardLayout.java
 *
 * TestCardLayout application
 *
 * @author
 * @version 1.00 2007/1/21
 */
 import java.awt.*;
 import java.awt.event.*;
 
public class TestCardLayout extends Frame

 CardLayout cl=new CardLayout();
    Panel plCenter=new Panel(cl);
    public TestCardLayout()
    {
     GridLayout gl=new GridLayout(5,1);
     Panel plWest=new Panel(gl);
     Button first=new Button("first");
     Button prev=new Button("prev");
     Button next=new Button("next");
     Button three=new Button("three");
     Button last=new Button("last");
     plWest.add(first);
     plWest.add(prev);
     plWest.add(next);
     plWest.add(three);
     plWest.add(last);
  
     plCenter.add(new Button("one"),"1");
     plCenter.add(new Button("two"),"2");
     plCenter.add(new Button("three"),"3");
     plCenter.add(new Button("four"),"4");
     plCenter.add(new Button("five"),"5");
     add(plWest,"West");
     add(plCenter);
     class MyactionListener implements ActionListener
     {
      public void actionPerformed(ActionEvent e)
      {
       if(e.getActionCommand().equals("first"))
       {
        cl.first(plCenter);
       }
       else if(e.getActionCommand().equals("prev"))
       {
        cl.previous(plCenter);
       }
       else if(e.getActionCommand().equals("next"))
       {
        cl.next(plCenter);
       }
       else if(e.getActionCommand().equals("three"))
       {
        cl.show(plCenter,"3");
       }
       else
       {
        cl.last(plCenter);
       }
      }
     }
     MyactionListener ml=new MyactionListener();
     first.addActionListener(ml);
     prev.addActionListener(ml);
     next.addActionListener(ml);
     three.addActionListener(ml);
     last.addActionListener(ml);
     addWindowListener(new WindowAdapter()
     {
      public void windowClosing(WindowEvent e)
      {
       e.getWindow().dispose();
      }
     });
    }
    public static void main(String[] args)
    {
     
     // TODO, add your application code
     System.out.println("Hello World!");
     TestCardLayout mainFrame=new TestCardLayout();
     mainFrame.setTitle("TestCardLayout");
     mainFrame.setBounds(300,200,400,400);
     mainFrame.setVisible(true);
     
    }
}


大头剑客 2007-01-21 13:01 发表评论
]]>
布局理器—FlowLayouthttp://www.aygfsteel.com/jianke/articles/95113.html大头剑客大头剑客Sun, 21 Jan 2007 03:13:00 GMThttp://www.aygfsteel.com/jianke/articles/95113.htmlhttp://www.aygfsteel.com/jianke/comments/95113.htmlhttp://www.aygfsteel.com/jianke/articles/95113.html#Feedback0http://www.aygfsteel.com/jianke/comments/commentRss/95113.htmlhttp://www.aygfsteel.com/jianke/services/trackbacks/95113.html * @(#)TestFlowLayout.java
 *
 * TestFlowLayout application
 *
 * @author
 * @version 1.00 2007/1/21
 */
 import java.awt.*;
 import java.awt.event.*;
public class TestFlowLayout extends Frame
 {
    public void init()
 {
  add(new Button("W一?));
  add(new Button("W二?));
  add(new Button("W三?));
  add(new Button("W四?));
 }
    public TestFlowLayout()
    {
     FlowLayout fl=new FlowLayout();
     setLayout(fl);
     init();
     addWindowListener(new WindowAdapter()
     {
      public void windowClosing(WindowEvent e)
      {
       e.getWindow().dispose();
      }
     });
    }
    public static void main(String[] args)
    {
     System.out.println("Hello World!");
     TestFlowLayout mainFram=new TestFlowLayout();
     mainFram.setTitle("TestBorderLayout");
     mainFram.setBounds(300,200,400,400);
     mainFram.setVisible(true);
    }
}


大头剑客 2007-01-21 11:13 发表评论
]]>
布局理器—BorderLayoutlghttp://www.aygfsteel.com/jianke/articles/95109.html大头剑客大头剑客Sun, 21 Jan 2007 02:42:00 GMThttp://www.aygfsteel.com/jianke/articles/95109.htmlhttp://www.aygfsteel.com/jianke/comments/95109.htmlhttp://www.aygfsteel.com/jianke/articles/95109.html#Feedback0http://www.aygfsteel.com/jianke/comments/commentRss/95109.htmlhttp://www.aygfsteel.com/jianke/services/trackbacks/95109.html * @(#)TestBorderLayout.java
 *
 * TestBorderLayout application
 *
 * @author
 * @version 1.00 2007/1/21
 */
 import java.awt.*;
 import java.awt.event.*;
public class TestBorderLayout extends Frame
{
 public void init()
 {
  add(new Button("East"),"East");
  add(new Button("South"),"South");
  add(new Button("West"),"West");
  add(new Button("North"),"North");
  add(new Button("Center"),/*"Center"*/BorderLayout.CENTER);
 }
    public TestBorderLayout()
    {
     init();
  
     addWindowListener(new WindowAdapter()
     {
      public void windowClosing(WindowEvent e)
      {
       e.getWindow().dispose();
      }
     });
    }
    public static void main(String[] args)
    {
     System.out.println("Hello World!");
     TestBorderLayout mainFram=new TestBorderLayout();
     mainFram.setTitle("TestBorderLayout");
     mainFram.setBounds(300,200,400,400);
     mainFram.setVisible(true);
    }
}


大头剑客 2007-01-21 10:42 发表评论
]]>
ScrollPane与TextArealghttp://www.aygfsteel.com/jianke/articles/95078.html大头剑客大头剑客Sat, 20 Jan 2007 12:14:00 GMThttp://www.aygfsteel.com/jianke/articles/95078.htmlhttp://www.aygfsteel.com/jianke/comments/95078.htmlhttp://www.aygfsteel.com/jianke/articles/95078.html#Feedback0http://www.aygfsteel.com/jianke/comments/commentRss/95078.htmlhttp://www.aygfsteel.com/jianke/services/trackbacks/95078.html * @(#)TestScrollPane.java
 *
 * TestScrollPane application
 *
 * @author
 * @version 1.00 2007/1/20
 */
 import java.awt.*;
 import java.awt.event.*;
public class TestScrollPane extends Frame
{
    public TestScrollPane()
    {
     TextArea ta=new TextArea("",10,50,TextArea.SCROLLBARS_NONE);
     ScrollPane sp=new ScrollPane(ScrollPane.SCROLLBARS_AS_NEEDED);
     add(sp);
     sp.add(ta);
     addWindowListener(new WindowAdapter()
     {
      public void windowClosing(WindowEvent e)
      {
       e.getWindow().dispose();
      }
     });
    }
    public static void main(String[] args)
    {
     
     // TODO, add your application code
     System.out.println("Hello World!");
     TestScrollPane mainFrame=new TestScrollPane();
     mainFrame.setTitle("TestScrollPane");
     mainFrame.setBounds(300,200,200,200);
     mainFrame.setVisible(true);
    }
}


大头剑客 2007-01-20 20:14 发表评论
]]>
Choicelghttp://www.aygfsteel.com/jianke/articles/95076.html大头剑客大头剑客Sat, 20 Jan 2007 11:50:00 GMThttp://www.aygfsteel.com/jianke/articles/95076.htmlhttp://www.aygfsteel.com/jianke/comments/95076.htmlhttp://www.aygfsteel.com/jianke/articles/95076.html#Feedback0http://www.aygfsteel.com/jianke/comments/commentRss/95076.htmlhttp://www.aygfsteel.com/jianke/services/trackbacks/95076.html/**
 * @(#)TestChoice.java
 *
 * TestChoice application
 *
 * @author
 * @version 1.00 2007/1/20
 */
 
 import java.awt.*;
 import java.awt.event.*;
public class TestChoice extends Frame
{
 Choice ch=new Choice();
    public TestChoice()
    {
     FlowLayout fl=new FlowLayout();
     setLayout(fl);
     ch.add("choice1");
     ch.add("choice2");
     ch.add("choice3");
     
     add(ch);
     ch.addItemListener(new ItemListener()
     {
      public void itemStateChanged(ItemEvent e)
      {
       System.out.println(e.getItem());
      }
     });
     addWindowListener(new WindowAdapter()
  {
   public void windowClosing(WindowEvent e)
   {
    e.getWindow().dispose();
   }
  });
    }

    public static void main(String[] args)
    {
     
     // TODO, add your application code
     System.out.println("Hello World!");
     TestChoice mainFrame=new TestChoice();
     mainFrame.setTitle("TestChoice");
     mainFrame.setBounds(300,200,200,100);
     mainFrame.setVisible(true);
    }
}



大头剑客 2007-01-20 19:50 发表评论
]]>
Checkboxlghttp://www.aygfsteel.com/jianke/articles/95069.html大头剑客大头剑客Sat, 20 Jan 2007 10:54:00 GMThttp://www.aygfsteel.com/jianke/articles/95069.htmlhttp://www.aygfsteel.com/jianke/comments/95069.htmlhttp://www.aygfsteel.com/jianke/articles/95069.html#Feedback0http://www.aygfsteel.com/jianke/comments/commentRss/95069.htmlhttp://www.aygfsteel.com/jianke/services/trackbacks/95069.html/**
 * @(#)TestCheckbox.java
 *
 * TestCheckbox application
 *
 * @author
 * @version 1.00 2007/1/20
 */
 import java.awt.*;
 import java.awt.event.*;
public class TestCheckbox extends Frame
{
   
    Checkbox cb1=new Checkbox("Are you a boy or gril?",true);
 CheckboxGroup cbg=new CheckboxGroup();
 Checkbox cb2=new Checkbox("Boy",true,cbg);
 Checkbox cb3=new Checkbox("Girl",false,cbg);


 class CbItemListener implements ItemListener
 {
  public void itemStateChanged(ItemEvent e)
  {
   Checkbox cb=(Checkbox)e.getItemSelectable();
   /*if(cb.getLabel().equals("Are you a boy or gril?"))
   {
    ....
   }*/
   if(cb==cb1)
   {
    if(cb.getState()==true)
    {
     System.out.println("你选择了复选框");
    }
    else
    {
     System.out.println("你取消选择复选框");
    }
   }
   else if(cb==cb2)
   {
    if(cb.getState()==true)
    {
     System.out.println("你是个男?);
    }
    else
    {
     System.out.println("你是个女?);
    }
   }
   else
   {
    if(cb.getState()==true)
    {
     System.out.println("你是个女?);
    }
    else
    {
     System.out.println("你是个男?);
    } 
   }
    
  }
 }

 public TestCheckbox()
 {
  FlowLayout fl=new FlowLayout();
  setLayout(fl);
  add(cb1);
  add(cb2);
  add(cb3);
  addWindowListener(new WindowAdapter()
  {
   public void windowClosing(WindowEvent e)
   {
    e.getWindow().dispose();
   }
  });
  CbItemListener cbit=new CbItemListener();
  cb1.addItemListener(cbit);
  cb2.addItemListener(cbit);
  cb3.addItemListener(cbit);
 }


   
    public static void main(String[] args)
    {
     
     // TODO, add your application code
     System.out.println("Hello World!");
     TestCheckbox mainFrame=new TestCheckbox();
  mainFrame.setTitle("TestCheckbox");
  mainFrame.setBounds(300,200,400,400);
  mainFrame.setVisible(true);
    }
}



大头剑客 2007-01-20 18:54 发表评论
]]>
MenuBar、Menu、MenuItemlghttp://www.aygfsteel.com/jianke/articles/95046.html大头剑客大头剑客Sat, 20 Jan 2007 06:40:00 GMThttp://www.aygfsteel.com/jianke/articles/95046.htmlhttp://www.aygfsteel.com/jianke/comments/95046.htmlhttp://www.aygfsteel.com/jianke/articles/95046.html#Feedback0http://www.aygfsteel.com/jianke/comments/commentRss/95046.htmlhttp://www.aygfsteel.com/jianke/services/trackbacks/95046.html
 import java.awt.*;
 import java.awt.event.*;
 import javax.swing.*;
import java.util.EventListener;
public class TestMenuBar extends Frame /*implements ActionListener*/
{
 MenuBar menubar=new MenuBar();
 
 Menu fileM=new Menu("File");
 Menu editM=new Menu("Edit");
 Menu toolsM=new Menu("Tools");
 Menu helpM=new Menu("Help");
 
 MenuItem fileM1=new MenuItem("New");
 MenuItem fileM2=new MenuItem("Open");
 MenuItem fileM3=new MenuItem("Save");
 Menu fileM4=new Menu("Print");
 CheckboxMenuItem fileM5=new CheckboxMenuItem("Quit",true);
 MenuItem printM=new MenuItem("Preview");
 MenuItem setM=new MenuItem("Setting");
 MenuItem editM1=new MenuItem("q接");
 
    public TestMenuBar()
    {
     setM.setActionCommand("set");
     editM1.setActionCommand("connect");
     printM.addActionListener(new MenuBarListener());
     setM.addActionListener(new MenuBarListener());
     
        menubar.add(fileM);
  menubar.add(editM);
  menubar.add(toolsM);
  menubar.add(helpM); 

  fileM.add(fileM1);
  fileM.add(fileM2);
  fileM.add(fileM3);
  fileM.add(fileM4);
  fileM.addSeparator();
  fileM4.add(printM);
  fileM4.add(setM);
  fileM.add(fileM5);
  
  editM.add(editM1);
  //editM1.addActionListener(this);
  
  this.setMenuBar(menubar); 
     
     this.addWindowListener(new WindowAdapter()
     {
      public void windowClosing(WindowEvent e)
      {
       e.getWindow().dispose();
      }
     });
     editM1.addActionListener(new ActionListener()
     {
      public void actionPerformed(ActionEvent e)
      {
       if(editM1.getActionCommand().equals("connect"))
       {
        editM1.setActionCommand("disconnect");
        editM1.setLabel("断开");
       }
       else if(editM1.getActionCommand().equals("disconnect"))
       {
        editM1.setActionCommand("connect");
        editM1.setLabel("q接");
       }
      }
     });
    }
    public static void main(String[] args)
    {
     System.out.println("Hello World!");
     TestMenuBar mainFrame=new TestMenuBar();
     mainFrame.setTitle("TestMenuBar");
     mainFrame.setSize(400,400);
     mainFrame.setVisible(true);
    }
   
 /*public void actionPerformed(ActionEvent e)
 {
  // TODO: Add your code here
  if(e.getActionCommand().equals("connect"))
  {
   editM1.setActionCommand("disconnect");
   editM1.setLabel("断开");
  }
  else if(e.getActionCommand().equals("disconnect"))
  {
   editM1.setActionCommand("connect");
   editM1.setLabel("q接");
  }
 }*/
}



大头剑客 2007-01-20 14:40 发表评论
]]>
利用双缓冲来DrawLinehttp://www.aygfsteel.com/jianke/articles/95044.html大头剑客大头剑客Sat, 20 Jan 2007 06:26:00 GMThttp://www.aygfsteel.com/jianke/articles/95044.htmlhttp://www.aygfsteel.com/jianke/comments/95044.htmlhttp://www.aygfsteel.com/jianke/articles/95044.html#Feedback0http://www.aygfsteel.com/jianke/comments/commentRss/95044.htmlhttp://www.aygfsteel.com/jianke/services/trackbacks/95044.html/**
 * @(#)DrawLine.java
 *
 * DrawLine application
 *
 * @author
 * @version 1.00 2007/1/17
 */

import java.awt.*;
import java.awt.event.*;
public class DrawLine extends Frame
{
 private int begX;
 private int begY;
 private int endX;
 private int endY;
 Image oimg=null;
 Graphics og=null;
 public void paint(Graphics g)
 {
  /*
  Image img=this.getToolkit().getImage("..\\我要学习?gif");
  g.drawImage(img,100,100,this);
  if(oimg!=null)
  {
   //g.drawImage(oimg,0,0,this);
  }
  */
  g.drawImage(oimg,0,0,this);
  
 }
    public DrawLine()
    {
     setTitle("DrawLines");
     setSize(400,400);
     setVisible(true);
     Dimension d=this.getSize();
     oimg=this.createImage(d.width,d.height);
     og=oimg.getGraphics();
     addWindowListener(new WindowAdapter()
     {
      public void windowClosing(WindowEvent e)
      {
       e.getWindow().dispose();
      }
     });
     addMouseListener(new MouseAdapter()
     {
      
      public void mousePressed(MouseEvent e)
      {
       begX=e.getX();
       begY=e.getY();
      }
      public void mouseReleased(MouseEvent e)
      {
       endX=e.getX();
       endY=e.getY();
       Graphics g=getGraphics();
       g.setFont(new Font(null,Font.ITALIC|Font.BOLD,30));
       g.setColor(Color.RED);
       g.drawString(begX+","+begY,begX,begY);
       g.drawString(endX+","+endY,endX,endY);
       g.drawLine(begX,begY,endX,endY);
       og.setFont(new Font(null,Font.ITALIC|Font.BOLD,30));
       og.setColor(Color.RED);
       og.drawString(begX+","+begY,begX,begY);
       og.drawString(endX+","+endY,endX,endY);
       og.drawLine(begX,begY,endX,endY);
      
      }
     });
    }
    public static void main(String[] args) {
     
     // TODO, add your application code
     System.out.println("Hello World!");
     DrawLine mainFrame=new DrawLine();
     
     
    }
}



大头剑客 2007-01-20 14:26 发表评论
]]>
Dialoglghttp://www.aygfsteel.com/jianke/articles/95043.html大头剑客大头剑客Sat, 20 Jan 2007 06:18:00 GMThttp://www.aygfsteel.com/jianke/articles/95043.htmlhttp://www.aygfsteel.com/jianke/comments/95043.htmlhttp://www.aygfsteel.com/jianke/articles/95043.html#Feedback0http://www.aygfsteel.com/jianke/comments/commentRss/95043.htmlhttp://www.aygfsteel.com/jianke/services/trackbacks/95043.html * @(#)TestDialog2.java
 *
 * TestDialog2 application
 *
 * @author
 * @version 1.00 2007/1/20
 */
import java.awt.*;
import java.awt.event.*;
public class TestDialog2 extends Frame
{
 private TextField tf=new TextField(10);
 
   public TestDialog2()
   {
     Button bt1=new Button("打开模态窗?);
     Button bt2=new Button("打开非模态窗?);
     add(tf,"North");
     add(bt1,"Center");
     add(bt2,"East");
    
    bt1.addActionListener(new ActionListener()
    {
     public void actionPerformed(ActionEvent e)
     {
      MyDialog dlg=new MyDialog(TestDialog2.this,"模态窗?,true);
      dlg.setTF(tf.getText());
      dlg.setVisible(true);
     }
    });
    
    bt2.addActionListener(new ActionListener()
    {
     public void actionPerformed(ActionEvent e)
     {
      MyDialog dlg=new MyDialog(TestDialog2.this,"非模态窗?,false);
      dlg.setTF(tf.getText());
      dlg.setVisible(true);
     }
    });
        
    addWindowListener(new WindowAdapter()
    {
     public void windowClosing(WindowEvent e)
     {
      e.getWindow().dispose();
     }
    });
   }
  
   public void setTF(String setInfo)
   {
     tf.setText(setInfo);
   }
  
  
    public static void main(String[] args)
    {
     
     // TODO, add your application code
     System.out.println("Hello World!");
     TestDialog2 mainFram=new TestDialog2();
     mainFram.setTitle("hello");
     //mainFram.setBackground(Color.lightGray);
     mainFram.setBounds(300,200,400,400);
     mainFram.setVisible(true);
    }
}
//**************************************************************
import java.awt.*;
import java.awt.event.*;
import java.awt.Dialog;
public class MyDialog extends Dialog
{
 private TextField tf=new TextField(10);
 
 public MyDialog(Frame owner,String title,boolean modal)
 {
  super(owner,title,modal);
  Button b1=new Button("应用");
  Button b2=new Button("定");
  
  add(tf,"North");
  add(b1,"Center");
  add(b2,"East");
  setBounds(0,0,200,200);
 
  if(this.isModal()==true)
  {
   b1.setEnabled(false);
  }
  
  b1.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent e)
   {
    ((TestDialog2)MyDialog.this.getOwner()).setTF(tf.getText()); 
   }
  });
  
  b2.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent e)
   {
    ((TestDialog2)MyDialog.this.getOwner()).setTF(tf.getText());
    dispose();
   }
  });
  
  
  addWindowListener(new WindowAdapter()
  {
   public void windowClosing(WindowEvent e)
   {
    e.getWindow().dispose();
   }
  });
 }
 public void setTF(String setInfo)
 {
  tf.setText(setInfo);
 }

}



大头剑客 2007-01-20 14:18 发表评论
]]>
վ֩ģ壺 | ɽ| | | | | ʷ| ׳| н| Ӫ| ԭ| ½| ̨| | ľ| | | | | ԭ| | | пǰ| | | פ| ̫| | ƽ| ǹ| ʡ| | | | | ̨| | ƽ| | ˳| |