IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]Java实训笔记(四)

    zhazha1980518发表于 2011-08-12 19:46:03
    love 0

    1、 线程示例:

    实现点击开始按钮,出现一个矩形,并实现移动,在这里实现了点击开始出现矩形,结构已经给出,其余代码各位自行补出,还可以引申到多个矩形,需要使用集合来保存矩形。

    代码示例

    import java.util.*;

    public class Run {

    /**

    * @param args

    */

    public static void main(String[] args) {

    // TODO Auto-generated method stub

    MainFrame frame = new MainFrame();

    frame.setVisible(true);

    }

    }

    import java.awt.BorderLayout;

    import java.awt.Rectangle;

    import java.awt.event.ActionEvent;

    import java.awt.event.ActionListener;

    import javax.swing.JButton;

    import javax.swing.JFrame;

    import javax.swing.JPanel;

    public class MainFrame extends JFrame implements ActionListener{

    JButton btnStart=null,btnStop =null;

    MyComponent comp = null;

    public MainFrame(){

    btnStart = new JButton("Start");

    btnStop = new JButton("Stop");

    JPanel p = new JPanel();

    comp = new MyComponent();

    btnStart.addActionListener(this);

    btnStop.addActionListener(this);

    p.add(btnStart);

    p.add(btnStop);

    this.add(comp);

    this.add(p,BorderLayout.SOUTH);

    this.setSize(400,400);

    }

    public void actionPerformed(ActionEvent e) {

    // TODO Auto-generated method stub

    if(e.getSource()== btnStart){

    Rect r = new Rect(0,0,20,20);

    comp.setRect(r);

    comp.repaint();

    }

    }

    }

    import java.awt.Graphics;

    import java.awt.Graphics2D;

    import java.awt.Rectangle;

    import javax.swing.JComponent;

    public class MyComponent extends JComponent{

    Rect rect =null;

    public MyComponent(){

    rect = new Rect(40,30,30,30);

    }

    public void setRect(Rect rect){

    this.rect = rect;

    }

    @Override

    protected void paintComponent(Graphics g) {

    // TODO Auto-generated method stub

    super.paintComponent(g);

    Graphics2D g2d = (Graphics2D)g;

    g2d.drawRect(rect.x, rect.y, rect.width, rect.height);

    }

    }

    public class Rect {

    int x,y,width,height;

    public Rect(int x,int y,int width,int height){

    this.x= x;

    this.y = y;

    this.width = width;

    this.height = height;

    }

    //矩形如何移动

    public void move(){

    }

    }

    public class MyThread extends Thread {

    //实现矩形动态移动效果

    public void run(){

    }

    }

    2、 集合

    集合实现了对数据结构的封装,数据结构的就是数据在计算机内存中的如何存储。

    在这里简单说几种数据结构,以及能用到数据结构的地方。

    堆栈:是一种先进后出的保存数据的方式,在程序中所有的局部变量都是存储在堆栈中,会自动回收堆栈的值。

    堆:是存储对象的地方,所有通过new创建的对象都在堆中,垃圾回收机制回收的就是在堆中分配的对象。

    队列:是一种先进先出保存数据的方式,比如调度系统就采用先进先出的方式,就采用队列来存储,在比如操作系统中的运行队列。

    下面我们通过分析代码来让大家对数据结构就简单的认识。

    Student std = new Student();//假定这里有一个类称为Student。我们来了解这句代码的内存分配方式:在等号的左边Student std,是一个局部变量在堆栈中开辟的空间,右边的部分(new Student())在堆里开辟的空间,在程序结束时,会自动把堆栈的空间回收,堆中的空间并不释放,这个时候就称为不可访问的对象,这个时候就需要通过垃圾回收机制来回收这些对象。

    通过前面的描述,大家对数据结构有了一定的了解,那我们下面进入到集合的讲解中。

    首先在使用集合的时候需要引入的包是:java.util包。

    然后在了解集合的结构。

    在集合中有一个根接口就是Collection结构。Collection 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。JDK 不提供此接口的任何直接实现:它提供更具体的子接口(如Set和List)实现。此接口通常用来传递 collection,并在需要最大普遍性的地方操作这些 collection。

    List接口:有序的Collection。

    Set结构:一个不包含重复元素的 collection。

    问题:实现学生信息的保存并显示。

    解决问题:1、如何保存学生信息,具体的一个学生是一个对象,要保存一个学生的信息就需要创建一个对象,然后给对象赋值,在这里就需要创建Student类。那多个学生的信息如何存储,并且这些学生的个人是不定,在这里就需要用到ArrayList类,这个类就是动态数组,在这里ArrayList已经明确了里面存储Student类的对象,那这个时候我们需要采用泛型。写法:

    ArrayList students = new ArrayList();

    2、如何显示,在这里我们是通过JTable来整体显示。

    详细代码:

    import java.awt.event.ActionEvent;

    import java.awt.event.ActionListener;

    import java.util.ArrayList;

    import javax.swing.JButton;

    import javax.swing.JComboBox;

    import javax.swing.JFrame;

    import javax.swing.JLabel;

    import javax.swing.JTextField;

    public class StudentFrame extends JFrame implements ActionListener {

    JLabel lblId = null, lblName = null, lblSex = null;

    JTextField txtId = null, txtName = null;

    JComboBox cboSex = null;

    JButton btnAdd = null, btnView = null;

    ArrayList arrs = null;

    public StudentFrame() {

    lblId = new JLabel("学号");

    lblName = new JLabel("姓名");

    lblSex = new JLabel("性别");

    txtId = new JTextField(10);

    txtName = new JTextField(20);

    cboSex = new JComboBox();

    cboSex.addItem("男");

    cboSex.addItem("女");

    this.setLayout(null);

    lblId.setBounds(10, 10, 50, 30);

    txtId.setBounds(70, 10, 50, 30);

    lblName.setBounds(10, 50, 50, 30);

    txtName.setBounds(70, 50, 50, 30);

    lblSex.setBounds(10, 90, 50, 30);

    cboSex.setBounds(70, 90, 50, 30);

    btnAdd = new JButton("Add");

    btnView = new JButton("View");

    btnAdd.setBounds(10, 130, 50, 30);

    btnView.setBounds(70, 130, 50, 30);

    arrs = new ArrayList();

    this.add(lblId);

    this.add(txtId);

    this.add(lblName);

    this.add(txtName);

    this.add(lblSex);

    this.add(cboSex);

    this.add(btnAdd);

    this.add(btnView);

    this.setSize(400, 400);

    btnAdd.addActionListener(this);

    btnView.addActionListener(this);

    }

    public void actionPerformed(ActionEvent e) {

    // TODO Auto-generated method stub

    if (e.getSource() == btnAdd) {

    Student stu = new Student();

    stu.setId(Integer.parseInt(txtId.getText()));

    stu.setName(txtName.getText());

    stu.setSex(cboSex.getSelectedItem().toString());

    arrs.add(stu);

    } else {

    ShowDataFrame frame = new ShowDataFrame(arrs);

    frame.setVisible(true);

    // for(Student std : arrs){

    // System.out.print(std.getId()+":"+std.getName()+":"+std.getSex()+

    // "\n");

    // }

    }

    }

    }

    public class Student {

    private int id;

    private String name;

    private String sex;

    public int getId() {

    return id;

    }

    public void setId(int id) {

    this.id = id;

    }

    public String getName() {

    return name;

    }

    public void setName(String name) {

    this.name = name;

    }

    public String getSex() {

    return sex;

    }

    public void setSex(String sex) {

    this.sex = sex;

    }

    }

    import java.awt.BorderLayout;

    import java.util.ArrayList;

    import javax.swing.JFrame;

    import javax.swing.JTable;

    import javax.swing.table.DefaultTableModel;

    import javax.swing.table.JTableHeader;

    public class ShowDataFrame extends JFrame {

    JTable table = null;

    public ShowDataFrame(ArrayList students){

    DefaultTableModel model = new DefaultTableModel();

    //model.addRow(new Object[]{1,"1",1});

    model.addColumn("学号");

    model.addColumn("姓名");

    model.addColumn("性别");

    for(Student std : students){

    model.addRow(new Object[]{std.getId(),std.getName(),std.getSex()});

    System.out.println(std.getId());

    }

    table = new JTable(model);

    JTableHeader header = table.getTableHeader();

    this.add(header,BorderLayout.NORTH);

    this.getContentPane().add(table,BorderLayout.CENTER);

    this.setSize(400, 300);

    }

    }

    import java.util.*;

    public class Run {

    /**

    * @param args

    */

    public static void main(String[] args) {

    // TODO Auto-generated method stub

    StudentFrame frame = new StudentFrame();

    frame.setVisible(true);

    }

    }

    问题:如何实现区号和城市的查询?

    解决问题方法:

    1、 数据如何保存:在这里需要区号和城市是对应的关系,这里我们可以使用哈希的方式来存储,也就是通过键值对的方法,有一个关键字和一个值对应就可以。

    2、 查找问题

    完整代码:

    import java.awt.BorderLayout;

    import java.awt.event.ActionEvent;

    import java.awt.event.ActionListener;

    import javax.swing.JButton;

    import javax.swing.JComboBox;

    import javax.swing.JFrame;

    import javax.swing.JLabel;

    import javax.swing.JPanel;

    import javax.swing.JTextField;

    import java.util.*;

    public class AddFrame extends JFrame implements ActionListener{

    JLabel lblNumber=null,lblCity=null;

    JTextField txtNumber=null,txtCity=null;

    JButton btnAdd =null,btnFind =null;

    JComboBox cboFind =null;

    JTextField txtFind =null;

    Hashtable telCity = null;

    public AddFrame(){

    lblNumber = new JLabel("区号");

    lblCity = new JLabel("城市");

    txtNumber = new JTextField(10);

    txtCity = new JTextField(10);

    btnAdd = new JButton("增加");

    btnFind = new JButton("查找");

    cboFind = new JComboBox();

    cboFind.addItem("区号");

    cboFind.addItem("城市");

    txtFind = new JTextField(10);

    JPanel p1 = new JPanel();

    JPanel p2 = new JPanel();

    p1.add(lblNumber);

    p1.add(txtNumber);

    p1.add(lblCity);

    p1.add(txtCity);

    p1.add(btnAdd);

    p2.add(cboFind);

    p2.add(txtFind);

    p2.add(btnFind);

    this.add(p1,BorderLayout.WEST);

    this.add(p2,BorderLayout.EAST);

    telCity = new Hashtable();

    btnAdd.addActionListener( this);

    btnFind.addActionListener(this);

    this.pack();

    }

    public void actionPerformed(ActionEvent e) {

    // TODO Auto-generated method stub

    if(e.getSource() == btnAdd){

    String key = this.txtNumber.getText().trim();

    String value = this.txtCity.getText().trim();

    telCity.put(key, value);

    }else{

    if(cboFind.getSelectedItem().toString().equals("区号")){

    //telCity.get

    }else{

    Enumeration keys=telCity.keys();

    Collection values= telCity.values();

    for(String str :values){

    if(str.equals(txtFind.getText())){

    String findKey=keys.nextElement();

    System.out.print("key="+findKey+"value="+str);

    break;

    }

    keys.nextElement();

    }

    }

    }

    }

    }

    public class Run {

    /**

    * @param args

    */

    public static void main(String[] args) {

    // TODO Auto-generated method stub

    AddFrame frame = new AddFrame();

    frame.setSize(650,300);

    frame.setVisible(true);

    }

    }



沪ICP备19023445号-2号
友情链接