关于DataOutputStream和DataInputStream的练习
package com.jimzhai.datastream;
import java.io.*;
public class DataStream {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ByteArrayOutputStream mybyte = new ByteArrayOutputStream();
DataOutputStream mydata = null;
mydata = new DataOutputStream(mybyte);
try {
mydata.writeDouble(Math.random());
ByteArrayInputStream myInbyte = new ByteArrayInputStream(mybyte.toByteArray());
DataInputStream myIn = new DataInputStream(myInbyte);
System.out.println(0.2356896d);
mydata.flush();
mydata.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
关于JFrame以及事件监听的练习
package com.java;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JFrametest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new ActionDemo();
}
}
class ActionDemo extends JFrame{
JTextField jtfName;//在此输入姓名
JTextArea jtaChat;//显示聊天信息
JTextArea jtaInput;//输入聊天信息
JButton jbSend;//发送消息按钮
JButton jbClear;//清除输入消息框中的内容
public ActionDemo(){//构造器
super("Hello win");//调用父类构造函数(给程序添加标题)
Container container = getContentPane();//得到容器
JPanel panel = new JPanel();//从初始化面板
jtfName = new JTextField(10);//初始化名字输入域
panel.add(new JLabel("主题:Write Once,Run Anywhere! "));//增加聊天标签
panel.add(jtfName);//加入名字输入域
container.add(panel,BorderLayout.NORTH);//在容器上上增加面板
jtaChat = new JTextArea();//初始化信息显示文本框
container.add(new JScrollPane(jtaChat),BorderLayout.CENTER);//添加信息显示文本框
Box box = new Box(BoxLayout.X_AXIS);//初始化一个Box
jtaInput = new JTextArea(3,20);//初始化消息输入域
jbSend = new JButton();//初始化发送按钮
jbClear = new JButton();//初始化清除按钮
jbClear.setText("清除");//设置按钮文本
box.add(new JScrollPane(jtaInput));//增加消息输入域
box.add(jbClear);//增加按钮
box.add(jbSend);
container.add(box,BorderLayout.SOUTH);//在容器上增加Box
jbClear.addActionListener(new ActionListener(){//清除按钮的事件监听
public void actionPerformed(ActionEvent e){
jtaInput.setText("");
}
});
Action sendMessage = new AbstractAction(){//发送消息Action
public void actionPerformed(ActionEvent e){
replaceMessage();//更新消息显示框
}
};
jtaInput.getInputMap().put(KeyStroke.getKeyStroke("ENTER"),"send");//接受回车事件
jtaInput.getActionMap().put("send",sendMessage);//回车事件的处理(调用发送消息Action)
jbSend.setAction(sendMessage);//设置命令为发送消息
jbSend.setText("发送");//设置按钮文本
setVisible(true);//设置窗口可视
setSize(400,200);//设置窗口大小
setLocation(300,300);//设置窗口显示位置
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭程序时退出窗口
}
private void replaceMessage(){
String message = jtfName.getText()+">"+jtaInput.getText()+"\n";//得到消息文本
jtaChat.insert(message,jtaChat.getDocument().getLength());//插入消息到显示区域末端
jtaInput.setText("");//清空输入消息域
}
}
效果图:
BoxLayout:
X_AXIS
指定组件应该从左到右放置。
Y_AXIS
指定组件应该从上到下放置。
Box
public class Box extends JComponent implements Accessible
使用 BoxLayout 对象作为其布局管理器的一个轻量级容器。Box 提供几个对使用 BoxLayout 的容器(甚至非 Box 容器)有用的类方法。
Box
类可以创建几种影响布局的不可见组件:glue、struts 和 rigid 区域。如果 Box
包含的所有组件都有一个固定大小,可以使用 glue 组件(由 createGlue
返回)来控制组件的位置。如果想让两个组件之间有一个固定的空间量,可以尝试使用 strut(createHorizontalStrut
或 createVerticalStrut
)。如果需要一个总是占用相同空间量的不可见组件,可以通过调用 createRigidArea
获得。
今天的收获:
今天开始复习线程,不过感觉忘得差不多了!压力啊。今天的不足:
对事件监听的复习力度还是不够。