您的位置:首页 > 编程语言 > Java开发

Java实训笔记(四)

2011-08-12 19:46 375 查看
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<Student> students = new ArrayList<Student>();
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<Student> 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<Student>(); 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<Student> 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<String ,String> 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<String, String>(); 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<String> keys=telCity.keys(); Collection<String > 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); }}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: