1、
实现点击开始按钮,出现一个矩形,并实现移动,在这里实现了点击开始出现矩形,结构已经给出,其余代码各位自行补出,还可以引申到多个矩形,需要使用集合来保存矩形。
代码示例
importjava.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;
importjava.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 classMainFrame 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;
importjava.awt.Rectangle;
import javax.swing.JComponent;
public classMyComponentextends 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 classStudentFrameextends 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 classShowDataFrameextends 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);
}
}
|
importjava.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 classAddFrameextends 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);
}
}
|