??xml version="1.0" encoding="utf-8" standalone="yes"?>
也希望大家有什么好的功能徏议提出来,
我会(x)快完善功能.
MSN见首公?br>?span>能说?br>面板Q?nbsp;
提供鼠标点击修改功能
提供鼠标Ud数据跟随昄功能
提供数据扚w修改功能(右键拖拽选取Q按键盘?sh)下键修?
数据修改提示曲线 (两条l色的细U?
数据修改回溯(键盘ESC?
面板右键菜单Q?br> 保存囄
颜色修改
标题字体修改
数据分时D修?br> 是否允许修改
曲线跟踪提示
是否有数据跟t显C?br>主菜单:(x)
修改UImanager
数据昄表格Q?br> 昄数据
修改数据(输入数据后回车或者点d的行)
?wi)面板?x)删除曲线
颜色修改
下蝲链接
jdk版本 1.6
截图Q?br>
]]>
import java.awt.Dimension;
import java.util.Vector;
import javax.swing.ComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JFrame;
public class WideComboBox extends JComboBox {
public WideComboBox() {
}
public WideComboBox(final Object items[]) {
super(items);
}
public WideComboBox(Vector items) {
super(items);
}
public WideComboBox(ComboBoxModel aModel) {
super(aModel);
}
private boolean layingOut = false;
public void doLayout() {
try {
layingOut = true;
super.doLayout();
} finally {
layingOut = false;
}
}
public Dimension getSize() {
Dimension dim = super.getSize();
if (!layingOut)
dim.width = Math.max(dim.width, getPreferredSize().width);
return dim;
}
public static void main(String[] args) {
JFrame jf = new JFrame();
WideComboBox wc = new WideComboBox(new String[] { "11111111111111",
"22222222222222", "333" });
jf.getContentPane().add(wc);
jf.setVisible(true);
}
}
(tng) (tng) (tng) 二:(x)java对象序列化不仅保留一个对象的数据Q而且递归保存对象引用的每个对象的数据。可以将整个对象层次写入字节中Q可以保存在文g中或在网l连接上传递。利用对象序列化可以q行对象的“深复制”,卛_制对象本w及(qing)引用的对象本w。序列化一个对象可能得到整个对象序列?/p>
(tng) (tng) (tng) 从上面的叙述中,我们知道?jin)对象序列化是java~程中的必备武器Q那么让我们从基开始,好好学习(fn)一下它的机制和用法?/p>
(tng) (tng) (tng) java序列化比较简单,通常不需要编写保存和恢复对象状态的定制代码。实现java.io.Serializable接口的类对象可以转换成字节流或从字节恢复,不需要在cM增加M代码。只有极数情况下才需要定制代码保存或恢复对象状态。这里要注意Q不是每个类都可序列化,有些cL不能序列化的Q例如涉?qing)线E的cM特定JVM有非常复杂的关系?/p>
(tng) (tng) (tng) 序列化机Ӟ(x)
(tng) (tng) (tng) 序列化分Z大部分:(x)序列化和反序列化。序列化是这个过E的W一部分Q将数据分解成字节流Q以便存储在文g中或在网l上传输。反序列化就是打开字节ƈ重构对象。对象序列化不仅要将基本数据cd转换成字节表C,有时q要恢复数据。恢复数据要求有恢复数据的对象实例。ObjectOutputStream中的序列化过E与字节连接,包括对象cd和版本信息。反序列化时QJVM用头信息生成对象实例Q然后将对象字节中的数据复制到对象数据成员?sh)。下面我们分两大部分来阐qͼ(x)
(tng) (tng) (tng) 处理对象:(x)
(tng) (tng) (tng) Q序列化q程和反序列化过E)(j)
(tng) (tng) (tng) java.io包有两个序列化对象的cRObjectOutputStream负责对象写入字节流QObjectInputStream从字节流重构对象?/p>
(tng) (tng) (tng) 我们先了(jin)解ObjectOutputStreamcd。ObjectOutputStreamcL展DataOutput接口?/p>
(tng) (tng) (tng) writeObject()Ҏ(gu)是最重要的方法,用于对象序列化。如果对象包含其他对象的引用Q则writeObject()Ҏ(gu)递归序列化这些对象。每个ObjectOutputStreaml护序列化的对象引用表,防止发送同一对象的多个拷贝。(q点很重要)(j)׃writeObject()可以序列化整l交叉引用的对象Q因此同一ObjectOutputStream实例可能不小?j)被h序列化同一对象。这Ӟq行反引用序列化Q而不是再ơ写入对象字节流?/p>
(tng) (tng) (tng) 下面Q让我们从例子中来了(jin)解ObjectOutputStreamq个cd?/p>
(tng) (tng) (tng) // 序列?today's date C个文件中.
(tng) (tng) (tng) FileOutputStream f = new FileOutputStream("tmp");
(tng) (tng) (tng) ObjectOutputStream s = new ObjectOutputStream(f);
(tng) (tng) (tng) s.writeObject("Today");
(tng) (tng) (tng) s.writeObject(new Date());
(tng) (tng) (tng) s.flush();
(tng) (tng) (tng) 现在Q让我们来了(jin)解ObjectInputStreamq个cR它与ObjectOutputStream怼。它扩展DataInput接口。ObjectInputStream中的Ҏ(gu)镜像DataInputStream中读取Java基本数据cd的公开Ҏ(gu)。readObject()Ҏ(gu)从字节流中反序列化对象。每ơ调用readObject()Ҏ(gu)都返回流中下一个Object。对象字节流q不传输cȝ字节码,而是包括cd?qing)其{。readObject()收到对象ӞJVM装入头中指定的类。如果找不到q个c,则readObject()抛出ClassNotFoundException,如果需要传输对象数据和字节码,则可以用RMI框架。ObjectInputStream的其余方法用于定制反序列化过E?/p>
(tng) (tng) (tng) 例子如下Q?/p>
(tng) (tng) (tng) //从文件中反序列化 string 对象?date 对象
(tng) (tng) (tng) FileInputStream in = new FileInputStream("tmp");
(tng) (tng) (tng) ObjectInputStream s = new ObjectInputStream(in);
(tng) (tng) (tng) String today = (String)s.readObject();
(tng) (tng) (tng) Date date = (Date)s.readObject();
(tng) (tng) (tng) 定制序列化过E?
(tng) (tng) (tng) 序列化通常可以自动完成Q但有时可能要对q个q程q行控制。java可以类声明为serializableQ但仍可手工控制声明为static或transient的数据成员?/p>
(tng) (tng) (tng) 例子Q一个非常简单的序列化类?/p>
(tng) (tng) (tng) public class simpleSerializableClass implements Serializable{
(tng) (tng) (tng) String sToday="Today:";
(tng) (tng) (tng) transient Date dtToday=new Date();
(tng) (tng) (tng) }
(tng) (tng) (tng) 序列化时Q类的所有数据成员应可序列化除了(jin)声明为transient或static的成员。将变量声明为transient告诉JVM我们?x)负责将变元序列化。将数据成员声明为transient后,序列化过E就无法其加进对象字节中Q没有从transient数据成员发送的数据。后面数据反序列化时Q要重徏数据成员Q因为它是类定义的一部分Q,但不包含M数据Q因个数据成员(sh)向流中写入Q何数据。记住,对象不序列化static或transient。我们的c要用writeObject()与readObject()Ҏ(gu)以处理这些数据成员。用writeObject()与readObject()Ҏ(gu)Ӟq要注意按写入的序dq些数据成员?/p>
(tng) (tng) (tng) 关于如何使用定制序列化的部分代码如下Q?/p>
(tng) (tng) (tng) //重写writeObject()Ҏ(gu)以便处理transient的成员?/p>
(tng) (tng) (tng) public void writeObject(ObjectOutputStream outputStream) throws IOException{
(tng) (tng) (tng) outputStream.defaultWriteObject();//使定制的writeObject()Ҏ(gu)可以
(tng) (tng) (tng) 利用自动序列化中内置的逻辑?/p>
(tng) (tng) (tng) outputStream.writeObject(oSocket.getInetAddress());
(tng) (tng) (tng) outputStream.writeInt(oSocket.getPort());
(tng) (tng) (tng) }
(tng) (tng) (tng) //重写readObject()Ҏ(gu)以便接收transient的成员?/p>
(tng) (tng) (tng) private void readObject(ObjectInputStream inputStream) throws IOException,ClassNotFoundException{
(tng) (tng) (tng) inputStream.defaultReadObject();//defaultReadObject()补充自动序列?br /> (tng) (tng) (tng) InetAddress oAddress=(InetAddress)inputStream.readObject();
(tng) (tng) (tng) int iPort =inputStream.readInt();
(tng) (tng) (tng) oSocket = new Socket(oAddress,iPort);
(tng) (tng) (tng) iID=getID();
(tng) (tng) (tng) dtToday =new Date();
(tng) (tng) (tng) }
(tng) (tng) (tng) 完全定制序列化过E?
(tng) (tng) (tng) 如果一个类要完全负责自q序列化,则实现Externalizable接口而不是Serializable接口。Externalizable接口定义包括两个Ҏ(gu)writeExternal()与readExternal()。利用这些方法可以控制对象数据成员如何写入字节流.cd现ExternalizableӞ头写入对象流中,然后cd全负责序列化和恢复数据成员,除了(jin)头以外,Ҏ(gu)没有自动序列化。这里要注意?jin)。声明类实现Externalizable接口?x)有重大的安全风险。writeExternal()与readExternal()Ҏ(gu)声明为publicQ恶意类可以用这些方法读取和写入对象数据。如果对象包含敏感信息,则要格外心(j)。这包括使用安全套接或加密整个字节流。到此ؓ(f)臻I我们学习(fn)?jin)序列化的基部分知识?br />
import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.UIManager;
import javax.swing.WindowConstants;
import javax.swing.text.AttributeSet;
import javax.swing.text.DefaultStyledDocument;
import javax.swing.text.Document;
import javax.swing.text.EditorKit;
import javax.swing.text.MutableAttributeSet;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;
import javax.swing.text.StyledEditorKit;
public class NewJFrame extends javax.swing.JFrame implements ActionListener {
(tng)private JPanel jp1;
(tng)private JButton color;
(tng)private JTextPane jep;
(tng)private JScrollPane jsp;
(tng)private JButton font;
(tng)/**
(tng) * Auto-generated main method to display this JFrame
(tng) */
(tng)public static void main(String[] args) {
(tng) (tng)NewJFrame inst = new NewJFrame();
(tng) (tng)inst.setVisible(true);
(tng)}
(tng)public NewJFrame() {
(tng) (tng)super();
(tng) (tng)initGUI();
(tng)}
(tng)private void initGUI() {
(tng) (tng)try {
(tng) (tng) (tng)BorderLayout thisLayout = new BorderLayout();
(tng) (tng) (tng)getContentPane().setLayout(thisLayout);
(tng) (tng) (tng)setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
(tng) (tng) (tng){
(tng) (tng) (tng) (tng)jp1 = new JPanel();
(tng) (tng) (tng) (tng)getContentPane().add(jp1, BorderLayout.NORTH);
(tng) (tng) (tng) (tng){
(tng) (tng) (tng) (tng) (tng)font = new JButton();
(tng) (tng) (tng) (tng) (tng)font.addActionListener(this);
(tng) (tng) (tng) (tng) (tng)jp1.add(font);
(tng) (tng) (tng) (tng) (tng)font.setText("font");
(tng) (tng) (tng) (tng)}
(tng) (tng) (tng) (tng){
(tng) (tng) (tng) (tng) (tng)color = new JButton();
(tng) (tng) (tng) (tng) (tng)jp1.add(color);
(tng) (tng) (tng) (tng) (tng)color.addActionListener(this);
(tng) (tng) (tng) (tng) (tng)color.setText("color");
(tng) (tng) (tng) (tng)}
(tng) (tng) (tng)}
(tng) (tng) (tng){
(tng) (tng) (tng) (tng)jsp = new JScrollPane();
(tng) (tng) (tng) (tng)getContentPane().add(jsp, BorderLayout.CENTER);
(tng) (tng) (tng) (tng){
(tng) (tng) (tng) (tng) (tng)jep = new JTextPane();
(tng) (tng) (tng) (tng) (tng)jsp.setViewportView(jep);
(tng) (tng) (tng) (tng) (tng)jep.setDocument(new DefaultStyledDocument());
(tng) (tng) (tng) (tng)}
(tng) (tng) (tng)}
(tng) (tng) (tng)pack();
(tng) (tng) (tng)setSize(400, 300);
(tng) (tng)} catch (Exception e) {
(tng) (tng) (tng)e.printStackTrace();
(tng) (tng)}
(tng)}
(tng)public static void setFontSize(JEditorPane editor, int size) {
(tng) (tng)if (editor != null) {
(tng) (tng) (tng)if ((size > 0) && (size < 512)) {
(tng) (tng) (tng) (tng)MutableAttributeSet attr = new SimpleAttributeSet();
(tng) (tng) (tng) (tng)StyleConstants.setFontSize(attr, size);
(tng) (tng) (tng) (tng)setCharacterAttributes(editor, attr, false);
(tng) (tng) (tng)} else {
(tng) (tng) (tng) (tng)UIManager.getLookAndFeel().provideErrorFeedback(editor);
(tng) (tng) (tng)}
(tng) (tng)}
(tng)}
(tng)public static void setForeground(JEditorPane editor, Color fg) {
(tng) (tng)if (editor != null) {
(tng) (tng) (tng)if (fg != null) {
(tng) (tng) (tng) (tng)MutableAttributeSet attr = new SimpleAttributeSet();
(tng) (tng) (tng) (tng)StyleConstants.setForeground(attr, fg);
(tng) (tng) (tng) (tng)setCharacterAttributes(editor, attr, false);
(tng) (tng) (tng)} else {
(tng) (tng) (tng) (tng)UIManager.getLookAndFeel().provideErrorFeedback(editor);
(tng) (tng) (tng)}
(tng) (tng)}
(tng)}
(tng)public static final void setCharacterAttributes(JEditorPane editor,
(tng) (tng) (tng)AttributeSet attr, boolean replace) {
(tng) (tng)int p0 = editor.getSelectionStart();
(tng) (tng)int p1 = editor.getSelectionEnd();
(tng) (tng)if (p0 != p1) {
(tng) (tng) (tng)StyledDocument doc = getStyledDocument(editor);
(tng) (tng) (tng)doc.setCharacterAttributes(p0, p1 - p0, attr, replace);
(tng) (tng)}
(tng) (tng)StyledEditorKit k = getStyledEditorKit(editor);
(tng) (tng)MutableAttributeSet inputAttributes = k.getInputAttributes();
(tng) (tng)if (replace) {
(tng) (tng) (tng)inputAttributes.removeAttributes(inputAttributes);
(tng) (tng)}
(tng) (tng)inputAttributes.addAttributes(attr);
(tng)}
(tng)protected static final StyledDocument getStyledDocument(JEditorPane e) {
(tng) (tng)Document d = e.getDocument();
(tng) (tng)if (d instanceof StyledDocument) {
(tng) (tng) (tng)return (StyledDocument) d;
(tng) (tng)}
(tng) (tng)throw new IllegalArgumentException("document must be StyledDocument");
(tng)}
(tng)protected static final StyledEditorKit getStyledEditorKit(JEditorPane e) {
(tng) (tng)EditorKit k = e.getEditorKit();
(tng) (tng)if (k instanceof StyledEditorKit) {
(tng) (tng) (tng)return (StyledEditorKit) k;
(tng) (tng)}
(tng) (tng)throw new IllegalArgumentException("EditorKit must be StyledEditorKit");
(tng)}
(tng)public void actionPerformed(ActionEvent e) {
(tng) (tng)Object obj = e.getSource();
(tng) (tng)if (obj == font) {
(tng) (tng) (tng)JEditorPane editor = jep;
(tng) (tng) (tng)setFontSize(editor, 20);
(tng) (tng)}
(tng) (tng)if (obj == color) {
(tng) (tng) (tng)JEditorPane editor = jep;
(tng) (tng) (tng)setForeground(editor, Color.red);
(tng) (tng)}
(tng)}
}
(tng) (tng)JRadioButton motifButton = new JRadioButton("Motif"),
(tng) (tng) (tng) (tng)windowsButton = new JRadioButton("Windows"),
(tng) (tng) (tng) (tng)metalButton = new JRadioButton("Metal");
(tng) (tng)public ControlPanel() {
(tng) (tng) (tng)ActionListener listener = new RadioHandler();
(tng) (tng) (tng)ButtonGroup group = new ButtonGroup();
(tng) (tng) (tng)group.add(motifButton);
(tng) (tng) (tng)group.add(windowsButton);
(tng) (tng) (tng)group.add(metalButton);
(tng) (tng) (tng)motifButton.addActionListener(listener);
(tng) (tng) (tng)windowsButton.addActionListener(listener);
(tng) (tng) (tng)metalButton.addActionListener(listener);
(tng) (tng) (tng)add(motifButton);
(tng) (tng) (tng)add(windowsButton);
(tng) (tng) (tng)add(metalButton);
(tng) (tng)}
(tng) (tng)class RadioHandler implements ActionListener {
(tng) (tng) (tng)public void actionPerformed(ActionEvent e) {
(tng) (tng) (tng) (tng)JRadioButton src = (JRadioButton) e.getSource();
(tng) (tng) (tng) (tng)try {
(tng) (tng) (tng) (tng) (tng)if (src == motifButton)
(tng) (tng) (tng) (tng) (tng) (tng)UIManager.setLookAndFeel("com.sun.java.swing.plaf."
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)+ "motif.MotifLookAndFeel");
(tng) (tng) (tng) (tng) (tng)else if (src == windowsButton)
(tng) (tng) (tng) (tng) (tng) (tng)UIManager.setLookAndFeel("com.sun.java.swing.plaf."
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)+ "windows.WindowsLookAndFeel");
(tng) (tng) (tng) (tng) (tng)else if (src == metalButton)
(tng) (tng) (tng) (tng) (tng) (tng)UIManager.setLookAndFeel("javax.swing.plaf.metal."
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)+ "MetalLookAndFeel");
(tng) (tng) (tng) (tng)} catch (Exception ex) {
(tng) (tng) (tng) (tng) (tng)ex.printStackTrace();
(tng) (tng) (tng) (tng)}
(tng) (tng) (tng) (tng)SwingUtilities.updateComponentTreeUI(getContentPane());
(tng) (tng) (tng)}
(tng) (tng)}
(tng)}
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;
import javax.swing.UIManager;
import javax.swing.WindowConstants;
import javax.swing.event.UndoableEditEvent;
import javax.swing.event.UndoableEditListener;
import javax.swing.undo.CannotRedoException;
import javax.swing.undo.CannotUndoException;
import javax.swing.undo.UndoManager;
public class NewJFrame extends javax.swing.JFrame {
(tng)private JPanel jp1;
(tng)private JButton jb1;
(tng)private JButton jb2;
(tng)private JMenuItem jm12;
(tng)private JMenuItem jm11;
(tng)private JMenu jm;
(tng)private JMenuBar jMenuBar1;
(tng)private JTextArea jta;
(tng)private JScrollPane jsp;
(tng)/**
(tng) * Auto-generated main method to display this JFrame
(tng) */
(tng)public static void main(String[] args) {
(tng) (tng)NewJFrame inst = new NewJFrame();
(tng) (tng)inst.setVisible(true);
(tng)}
(tng)public NewJFrame() {
(tng) (tng)super();
(tng) (tng)initGUI();
(tng)}
(tng)private void initGUI() {
(tng) (tng)try {
(tng) (tng) (tng)setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
(tng) (tng) (tng){
(tng) (tng) (tng) (tng)jMenuBar1 = new JMenuBar();
(tng) (tng) (tng) (tng)setJMenuBar(jMenuBar1);
(tng) (tng) (tng) (tng){
(tng) (tng) (tng) (tng) (tng)jm = new JMenu();
(tng) (tng) (tng) (tng) (tng)jMenuBar1.add(jm);
(tng) (tng) (tng) (tng) (tng)jm.setText("jm");
(tng) (tng) (tng) (tng) (tng){
(tng) (tng) (tng) (tng) (tng) (tng)jm11 = new JMenuItem(redoAction);
(tng) (tng) (tng) (tng) (tng) (tng)jm.add(jm11);
(tng) (tng) (tng) (tng) (tng) (tng)jm11.setText("re");
(tng) (tng) (tng) (tng) (tng)}
(tng) (tng) (tng) (tng) (tng){
(tng) (tng) (tng) (tng) (tng) (tng)jm12 = new JMenuItem(undoAction);
(tng) (tng) (tng) (tng) (tng) (tng)jm.add(jm12);
(tng) (tng) (tng) (tng) (tng) (tng)jm12.setText("undo");
(tng) (tng) (tng) (tng) (tng)}
(tng) (tng) (tng) (tng) (tng)jm12.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z,
(tng) (tng) (tng) (tng) (tng) (tng) (tng)I(yng)nputEvent.CTRL_MASK));
(tng) (tng) (tng) (tng)}
(tng) (tng) (tng)}
(tng) (tng) (tng){
(tng) (tng) (tng) (tng)jp1 = new JPanel();
(tng) (tng) (tng) (tng)getContentPane().add(jp1, BorderLayout.NORTH);
(tng) (tng) (tng) (tng)jp1.setPreferredSize(new java.awt.Dimension(392, 35));
(tng) (tng) (tng) (tng){
(tng) (tng) (tng) (tng) (tng)jb1 = new JButton(redoAction);
(tng) (tng) (tng) (tng) (tng)jp1.add(jb1);
(tng) (tng) (tng) (tng) (tng)jb1.setText("redo");
(tng) (tng) (tng) (tng)}
(tng) (tng) (tng) (tng)// (tng) (tng) (tng) (tng)jb1.registerKeyboardAction(redoAction, KeyStroke.getKeyStroke(
(tng) (tng) (tng) (tng)// (tng) (tng) (tng) (tng) (tng) (tng)KeyEvent.VK_Y, KeyEvent.CTRL_DOWN_MASK, true),
(tng) (tng) (tng) (tng)// (tng) (tng) (tng) (tng) (tng) (tng)JComponent.WHEN_IN_FOCUSED_WINDOW);
(tng) (tng) (tng) (tng){
(tng) (tng) (tng) (tng) (tng)jb2 = new JButton(undoAction);
(tng) (tng) (tng) (tng) (tng)jp1.add(jb2);
(tng) (tng) (tng) (tng) (tng)jb2.setText("undo");
(tng) (tng) (tng) (tng)}
(tng) (tng) (tng) (tng)// (tng) (tng) (tng) (tng)jb2.registerKeyboardAction(undoAction, KeyStroke.getKeyStroke(
(tng) (tng) (tng) (tng)// (tng) (tng) (tng) (tng) (tng) (tng)KeyEvent.VK_Z, KeyEvent.CTRL_DOWN_MASK, true),
(tng) (tng) (tng) (tng)// (tng) (tng) (tng) (tng) (tng) (tng)JComponent.WHEN_IN_FOCUSED_WINDOW);
(tng) (tng) (tng)}
(tng) (tng) (tng){
(tng) (tng) (tng) (tng)jsp = new JScrollPane();
(tng) (tng) (tng) (tng)getContentPane().add(jsp, BorderLayout.CENTER);
(tng) (tng) (tng) (tng){
(tng) (tng) (tng) (tng) (tng)jta = new JTextArea();
(tng) (tng) (tng) (tng) (tng)jsp.setViewportView(jta);
(tng) (tng) (tng) (tng) (tng)jta.getDocument().addUndoableEditListener(undoHandler);
(tng) (tng) (tng) (tng)}
(tng) (tng) (tng)}
(tng) (tng) (tng)pack();
(tng) (tng) (tng)setSize(400, 300);
(tng) (tng)} catch (Exception e) {
(tng) (tng) (tng)e.printStackTrace();
(tng) (tng)}
(tng)}
(tng)protected UndoableEditListener undoHandler = new UndoHandler();
(tng)protected UndoManager undo = new UndoManager();
(tng)private UndoAction undoAction = new UndoAction();
(tng)private RedoAction redoAction = new RedoAction();
(tng)class UndoHandler implements UndoableEditListener {
(tng) (tng)/**
(tng) (tng) * Messaged when the Document has created an edit, the edit is
(tng) (tng) * added to <code>undo</code>, an instance of UndoManager.
(tng) (tng) */
(tng) (tng)public void undoableEditHappened(UndoableEditEvent e) {
(tng) (tng) (tng)undo.addEdit(e.getEdit());
(tng) (tng) (tng)undoAction.update();
(tng) (tng) (tng)redoAction.update();
(tng) (tng)}
(tng)}
(tng)class UndoAction extends AbstractAction {
(tng) (tng)public UndoAction() {
(tng) (tng) (tng)super();
(tng) (tng) (tng)setEnabled(false);
(tng) (tng)}
(tng) (tng)public void actionPerformed(ActionEvent e) {
(tng) (tng) (tng)try {
(tng) (tng) (tng) (tng)undo.undo();
(tng) (tng) (tng)} catch (CannotUndoException ex) {
(tng) (tng) (tng) (tng)ex.printStackTrace();
(tng) (tng) (tng)}
(tng) (tng) (tng)update();
(tng) (tng) (tng)redoAction.update();
(tng) (tng)}
(tng) (tng)protected void update() {
(tng) (tng) (tng)if (undo.canUndo()) {
(tng) (tng) (tng) (tng)setEnabled(true);
(tng) (tng) (tng) (tng)// (tng) (tng) (tng) (tng)System.out.println(undo.getUndoPresentationName());
(tng) (tng) (tng) (tng)putValue(Action.NAME, undo.getUndoPresentationName());
(tng) (tng) (tng)} else {
(tng) (tng) (tng) (tng)setEnabled(false);
(tng) (tng) (tng) (tng)putValue(Action.NAME, "撤消");
(tng) (tng) (tng)}
(tng) (tng)}
(tng)}
(tng)class RedoAction extends AbstractAction {
(tng) (tng)public RedoAction() {
(tng) (tng) (tng)super();
(tng) (tng) (tng)setEnabled(false);
(tng) (tng)}
(tng) (tng)public void actionPerformed(ActionEvent e) {
(tng) (tng) (tng)try {
(tng) (tng) (tng) (tng)undo.redo();
(tng) (tng) (tng)} catch (CannotRedoException ex) {
(tng) (tng) (tng) (tng)ex.printStackTrace();
(tng) (tng) (tng)}
(tng) (tng) (tng)update();
(tng) (tng) (tng)undoAction.update();
(tng) (tng)}
(tng) (tng)protected void update() {
(tng) (tng) (tng)if (undo.canRedo()) {
(tng) (tng) (tng) (tng)setEnabled(true);
(tng) (tng) (tng) (tng)putValue(Action.NAME, undo.getRedoPresentationName());
(tng) (tng) (tng)} else {
(tng) (tng) (tng) (tng)setEnabled(false);
(tng) (tng) (tng) (tng)putValue(Action.NAME, "重做");
(tng) (tng) (tng)}
(tng) (tng)}
(tng)}
}
/**
(tng)* 用Java模拟出QQ桌面截图功能
(tng)*/
public class Test extends JFrame {
(tng)private static final long serialVersionUID = -267804510087895906L;
(tng)private JButton button = null;
(tng)
(tng)private JLabel imgLabel = null;
(tng)public Test() {
(tng) (tng)button = new JButton("模拟屏幕Q点右键退出)(j)");
(tng) (tng)button.addActionListener(new ActionListener() {
(tng) (tng) (tng)public void actionPerformed(ActionEvent e) {
(tng) (tng) (tng) (tng)try {
(tng) (tng) (tng) (tng) (tng)new ScreenWindow(imgLabel);
(tng) (tng) (tng) (tng)} catch (Exception e1) {
(tng) (tng) (tng) (tng) (tng)JOptionPane.showConfirmDialog(null, "出现意外错误Q?, "pȝ提示", JOptionPane.DEFAULT_OPTION, JOptionPane.ERROR_MESSAGE);
(tng) (tng) (tng) (tng)}
(tng) (tng) (tng)}
(tng) (tng)});
(tng) (tng)JPanel pane = new JPanel();
(tng) (tng)pane.setBackground(Color.WHITE);
(tng) (tng)imgLabel = new JLabel();
(tng) (tng)pane.add(imgLabel);
(tng) (tng)JScrollPane spane = new JScrollPane(pane);
(tng) (tng)this.getContentPane().add(button, BorderLayout.NORTH);
(tng) (tng)this.getContentPane().add(spane);
(tng) (tng)this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
(tng) (tng)this.setSize(300, 200);
(tng) (tng)this.setLocationRelativeTo(null);
(tng) (tng)this.setVisible(true);
(tng)}
(tng)public static void main(String[] args) {
(tng) (tng)new Test();
(tng)}
}
class ScreenWindow extends JFrame {
(tng)private static final long serialVersionUID = -3758062802950480258L;
(tng)
(tng)private boolean isDrag = false;
(tng)private int x = 0;
(tng)private int y = 0;
(tng)private int xEnd = 0;
(tng)private int yEnd = 0;
(tng)public ScreenWindow(final JLabel imgLabel) throws AWTException, InterruptedException {
(tng) (tng)Dimension screenDims = Toolkit.getDefaultToolkit().getScreenSize();
(tng) (tng)JLabel label = new JLabel(new ImageIcon(ScreenImage.getScreenImage(0, 0, screenDims.width, screenDims.height)));
(tng) (tng)label.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
(tng) (tng)label.addMouseListener(new MouseAdapter() {
(tng) (tng) (tng)public void mouseClicked(MouseEvent e) {
(tng) (tng) (tng) (tng)if (e.getButton() == MouseEvent.BUTTON3) {
(tng) (tng) (tng) (tng) (tng)dispose();
(tng) (tng) (tng) (tng)}
(tng) (tng) (tng)}
(tng) (tng) (tng)public void mousePressed(MouseEvent e) {
(tng) (tng) (tng) (tng)x = e.getX();
(tng) (tng) (tng) (tng)y = e.getY();
(tng) (tng) (tng)}
(tng) (tng) (tng)public void mouseReleased(MouseEvent e) {
(tng) (tng) (tng) (tng)if (isDrag) {
(tng) (tng) (tng) (tng) (tng)xEnd = e.getX();
(tng) (tng) (tng) (tng) (tng)yEnd = e.getY();
(tng) (tng) (tng) (tng) (tng)if(x > xEnd){
(tng) (tng) (tng) (tng) (tng) (tng)int temp = x;
(tng) (tng) (tng) (tng) (tng) (tng)x = xEnd;
(tng) (tng) (tng) (tng) (tng) (tng)xEnd = temp;
(tng) (tng) (tng) (tng) (tng)}
(tng) (tng) (tng) (tng) (tng)if(y > yEnd){
(tng) (tng) (tng) (tng) (tng) (tng)int temp = y;
(tng) (tng) (tng) (tng) (tng) (tng)y = yEnd;
(tng) (tng) (tng) (tng) (tng) (tng)yEnd = temp;
(tng) (tng) (tng) (tng) (tng)}
(tng) (tng) (tng) (tng) (tng)try {
(tng) (tng) (tng) (tng) (tng) (tng)imgLabel.setIcon(new ImageIcon(ScreenImage.getScreenImage(x, y, xEnd - x, yEnd - y)));
(tng) (tng) (tng) (tng) (tng)} catch (Exception ex) {
(tng) (tng) (tng) (tng) (tng) (tng)JOptionPane.showConfirmDialog(null, "出现意外错误Q?, "pȝ提示", JOptionPane.DEFAULT_OPTION, JOptionPane.ERROR_MESSAGE);
(tng) (tng) (tng) (tng) (tng)}
(tng) (tng) (tng) (tng) (tng)dispose();
(tng) (tng) (tng) (tng)}
(tng) (tng) (tng)}
(tng) (tng)});
(tng) (tng)label.addMouseMotionListener(new MouseMotionListener() {
(tng) (tng) (tng)public void mouseDragged(MouseEvent e) {
(tng) (tng) (tng) (tng)if(!isDrag)
(tng) (tng) (tng) (tng) (tng)isDrag = true;
(tng) (tng) (tng)}
(tng) (tng) (tng)public void mouseMoved(MouseEvent e) {
(tng) (tng) (tng) (tng)/** 拖动q程的虚UK取框需自己实现 */
(tng) (tng) (tng)}
(tng) (tng)});
(tng) (tng)this.setUndecorated(true);
(tng) (tng)this.getContentPane().add(label);
(tng) (tng)this.setSize(screenDims.width, screenDims.height);
(tng) (tng)this.setVisible(true);
(tng) (tng)this.setExtendedState(JFrame.MAXIMIZED_BOTH);
(tng)}
}
class ScreenImage {
(tng)public static Image getScreenImage(int x, int y, int w, int h) throws AWTException, InterruptedException {
(tng) (tng)Robot robot = new Robot();
(tng) (tng)I(yng)mage screen = robot.createScreenCapture(new Rectangle(x, y, w, h)).getScaledInstance(w, h, Image.SCALE_SMOOTH);
(tng) (tng)MediaTracker tracker = new MediaTracker(new Label());
(tng) (tng)tracker.addImage(screen, 1);
(tng) (tng)tracker.waitForID(0);
(tng) (tng)return screen;
(tng)}
}
截屏
public class GuiCamera {
(tng)private String fileName; //文g的前~
(tng)private String defaultName = "GuiCamera";
(tng)static int serialNum = 0;
(tng)private String imageFormat; //囑փ文g的格?
(tng)private String defaultImageFormat = "png";
(tng)Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
(tng)/****************************************************************
(tng) * 默认的文件前~为GuiCameraQ文件格式ؓ(f)PNG格式
(tng) * The default construct will use the default (tng)
(tng) * Image file surname "GuiCamera", (tng)
(tng) * and default image format "png"
(tng) ****************************************************************/
(tng)public GuiCamera() {
(tng) (tng)fileName = defaultName;
(tng) (tng)imageFormat = defaultImageFormat;
(tng)}
(tng)/****************************************************************
(tng) * @param s the surname of the snapshot file
(tng) * @param format the format of the (tng) image file, (tng)
(tng) * it can be "jpg" or "png"
(tng) * 本构造支持JPG和PNG文g的存?
(tng) ****************************************************************/
(tng)public GuiCamera(String s, String format) {
(tng) (tng)fileName = s;
(tng) (tng)imageFormat = format;
(tng)}
(tng)/****************************************************************
(tng) * 对屏q进行拍?
(tng) * snapShot the Gui once
(tng) ****************************************************************/
(tng)public void snapShot() {
(tng) (tng)try {
(tng) (tng) (tng)//拯屏幕C个BufferedImage对象screenshot
(tng) (tng) (tng)BufferedImage screenshot = (new Robot())
(tng) (tng) (tng) (tng) (tng).createScreenCapture(new Rectangle(0, 0,
(tng) (tng) (tng) (tng) (tng) (tng) (tng)(int) d.getWidth(), (int) d.getHeight()));
(tng) (tng) (tng)serialNum++;
(tng) (tng) (tng)//Ҏ(gu)文g前缀变量和文件格式变量,自动生成文g?
(tng) (tng) (tng)String name = fileName + String.valueOf(serialNum) + "."
(tng) (tng) (tng) (tng) (tng)+ imageFormat;
(tng) (tng) (tng)File f = new File(name);
(tng) (tng) (tng)System.out.print("Save File " + name);
(tng) (tng) (tng)//screenshot对象写入囑փ文g
(tng) (tng) (tng)I(yng)mageIO.write(screenshot, imageFormat, f);
(tng) (tng) (tng)System.out.print("..Finished!\n");
(tng) (tng)} catch (Exception ex) {
(tng) (tng) (tng)System.out.println(ex);
(tng) (tng)}
(tng)}
(tng)public static void main(String[] args) {
(tng) (tng)GuiCamera cam = new GuiCamera("d:\\Hello", "png");//
(tng) (tng)cam.snapShot();
(tng)}
}
透明H体
public class TransparentBackground extends JComponent implements
(tng) (tng)ComponentListener, WindowFocusListener, Runnable {
(tng)private JFrame frame;
(tng)private Image background;
(tng)private long lastupdate = 0;
(tng)public boolean refreshRequested = true;
(tng)public TransparentBackground(JFrame frame) {
(tng) (tng)this.frame = frame;
(tng) (tng)updateBackground();
(tng) (tng)frame.addComponentListener(this);
(tng) (tng)frame.addWindowFocusListener(this);
(tng) (tng)new Thread(this).start();
(tng)}
(tng)public void componentShown(ComponentEvent evt) {
(tng) (tng)repaint();
(tng)}
(tng)public void componentResized(ComponentEvent evt) {
(tng) (tng)repaint();
(tng)}
(tng)public void componentMoved(ComponentEvent evt) {
(tng) (tng)repaint();
(tng)}
(tng)public void componentHidden(ComponentEvent evt) {
(tng)}
(tng)public void windowGainedFocus(WindowEvent evt) {
(tng) (tng)refresh();
(tng)}
(tng)public void windowLostFocus(WindowEvent evt) {
(tng) (tng) refresh();
(tng)}
(tng)public void refresh() {
(tng) (tng)if (frame.isVisible()) {
(tng) (tng) (tng)repaint();
(tng) (tng) (tng)refreshRequested = true;
(tng) (tng) (tng)lastupdate = new Date().getTime();
(tng) (tng)}
(tng)}
(tng)public void run() {
(tng) (tng)try {
(tng) (tng) (tng)while (true) {
(tng) (tng) (tng) (tng)Thread.sleep(250);
(tng) (tng) (tng) (tng)long now = new Date().getTime();
(tng) (tng) (tng) (tng)if (refreshRequested && ((now - lastupdate) > 1000)) {
(tng) (tng) (tng) (tng) (tng)if (frame.isVisible()) {
(tng) (tng) (tng) (tng) (tng) (tng)Point location = frame.getLocation();
// (tng) (tng) (tng) (tng) (tng) (tng)frame.setVisible(false);
(tng) (tng) (tng) (tng) (tng) (tng)updateBackground();
// (tng) (tng) (tng) (tng) (tng) (tng)frame.setVisible(true);
(tng) (tng) (tng) (tng) (tng) (tng)frame.setLocation(location);
(tng) (tng) (tng) (tng) (tng) (tng)refresh();
(tng) (tng) (tng) (tng) (tng)}
(tng) (tng) (tng) (tng) (tng)lastupdate = now;
(tng) (tng) (tng) (tng) (tng)refreshRequested = false;
(tng) (tng) (tng) (tng)}
(tng) (tng) (tng)}
(tng) (tng)} catch (Exception ex) {
(tng) (tng) (tng)ex.printStackTrace();
(tng) (tng)}
(tng)}
(tng)public static void main(String[] args) {
(tng) (tng)JFrame frame = new JFrame("Transparent Window");
(tng) (tng)frame.setUndecorated(true);
(tng) (tng)TransparentBackground bg = new TransparentBackground(frame);
(tng) (tng)// bg.snapBackground();
(tng) (tng)bg.setLayout(new BorderLayout());
(tng) (tng)JPanel panel = new JPanel() {
(tng) (tng) (tng)public void paintComponent(Graphics g) {
(tng) (tng) (tng) (tng)g.setColor(Color.blue);
(tng) (tng) (tng) (tng)I(yng)mage img = new ImageIcon("d:/moon.gif").getImage();
(tng) (tng) (tng) (tng)g.drawImage(img, 150, 150, null);
(tng) (tng) (tng)// (tng)g.drawLine(0,0, 600, 500);
(tng) (tng) (tng)}
(tng) (tng)};
(tng) (tng)panel.setOpaque(false);
(tng) (tng)JLabel jl=new JLabel(new ImageIcon("d:/moon.gif"));
(tng) (tng)
(tng) (tng)
(tng) (tng)bg.add("North", jl);
(tng) (tng)bg.add("Center", panel);
(tng) (tng)frame.getContentPane().add("Center", bg);
(tng) (tng)frame.pack();
(tng) (tng)Toolkit tk = Toolkit.getDefaultToolkit();
(tng) (tng)Dimension dim = tk.getScreenSize();
(tng) (tng)frame.setSize((int) dim.getWidth(), (int) dim.getHeight());
(tng) (tng)frame.setLocationRelativeTo(null);
(tng) (tng)frame.show();
(tng)}
(tng)public void updateBackground() {
(tng) (tng)try {
(tng) (tng) (tng)Robot rbt = new Robot();
(tng) (tng) (tng)Toolkit tk = Toolkit.getDefaultToolkit();
(tng) (tng) (tng)Dimension dim = tk.getScreenSize();
(tng) (tng) (tng)background = rbt.createScreenCapture(new Rectangle(0, 0, (int) dim
(tng) (tng) (tng) (tng) (tng).getWidth(), (int) dim.getHeight()));
(tng) (tng)} catch (Exception ex) {
(tng) (tng) (tng)// p(ex.toString( ));
(tng) (tng) (tng)// 此方法没有申明过Q因为无法得知上下文。因Z影响执行效果Q先注释掉它
(tng) (tng) (tng)ex.printStackTrace();
(tng) (tng)}
(tng)}
(tng)public void paintComponent(Graphics g) {
(tng) (tng)Point pos = this.getLocationOnScreen();
(tng) (tng)Point offset = new Point(-pos.x, -pos.y);
(tng) (tng)g.drawImage(background, offset.x, offset.y, null);
(tng)}
}
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) String filename = LocalAccess.getSaveFileName(comp,"JavaComponent.jpg");
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) if(filename==null)return false;
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) BufferedOutputStream bos =
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) new BufferedOutputStream(new FileOutputStream(filename));
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) com.sun.image.codec.jpeg.JPEGImageEncoder encoder = com.sun.image.codec.jpeg.JPEGCodec.createJPEGEncoder(bos);
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) com.sun.image.codec.jpeg.JPEGEncodeParam jep = encoder.getDefaultJPEGEncodeParam(image);
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) jep.setQuality(1.0f, false);
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) encoder.setJPEGEncodeParam(jep);
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) encoder.encode(image);
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) bos.close();
(tng) (tng) (tng) (tng) (tng) (tng) (tng) }
(tng) (tng) (tng) (tng) (tng) (tng) (tng) catch (Exception e) {
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) result = false;
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) e.printStackTrace();
(tng) (tng) (tng) (tng) (tng) (tng) (tng) }
(tng) (tng) (tng) (tng) (tng) (tng) (tng) return result;
(tng) (tng) (tng) }
(tng) (tng) (tng)javax.swing.UIManager.setLookAndFeel(alloyLnF);
(tng) (tng)} catch (javax.swing.UnsupportedLookAndFeelException ex) {
(tng) (tng) (tng)// You may handle the exception here
(tng) (tng) (tng)ex.printStackTrace();
(tng) (tng)}
import javax.swing.*;
public class T {
(tng)public static void main(String[] args) {
(tng) (tng)try {
(tng) (tng) (tng)UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
(tng) (tng)} catch (Exception e) {
(tng) (tng)}
(tng) (tng)final JTextField tf = new JTextField();
(tng) (tng)tf.setEnabled(false);
(tng) (tng)JPanel p = new JPanel(new GridLayout(0, 3, 5, 5));
(tng) (tng)for (int i = 0; i <= 9; i++) {
(tng) (tng) (tng)final JButton btn = new JButton(String.valueOf(i));
(tng) (tng) (tng)p.add(btn);
(tng) (tng) (tng)btn.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
(tng) (tng) (tng) (tng) (tng)KeyStroke.getKeyStroke((char) (i + '0')), "PressKeyAction");
(tng) (tng) (tng)btn.getActionMap().put("PressKeyAction", new AbstractAction() {
(tng) (tng) (tng) (tng)public void actionPerformed(ActionEvent e) {
(tng) (tng) (tng) (tng) (tng)btn.doClick();
(tng) (tng) (tng) (tng)}
(tng) (tng) (tng)});
(tng) (tng) (tng)btn.addActionListener(new ActionListener() {
(tng) (tng) (tng) (tng)public void actionPerformed(ActionEvent e) {
(tng) (tng) (tng) (tng) (tng)tf.setText(tf.getText() + btn.getText());
(tng) (tng) (tng) (tng)}
(tng) (tng) (tng)});
(tng) (tng)}
(tng) (tng)JFrame f = new JFrame();
(tng) (tng)JComponent contentPane = (JComponent) f.getContentPane();
(tng) (tng)contentPane.setLayout(new BorderLayout(0, 5));
(tng) (tng)contentPane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
(tng) (tng)f.getContentPane().add(p, BorderLayout.CENTER);
(tng) (tng)f.getContentPane().add(tf, BorderLayout.NORTH);
(tng) (tng)f.pack();
(tng) (tng)f.setLocationRelativeTo(null);
(tng) (tng)f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
(tng) (tng)f.setVisible(true);
(tng)}
}
4、QҎ(gu)q算
(tng)import java.math.BigDecimal;
/**
* ׃Java的简单类型不能够_的对点数进行运,q个工具cL供精
* 的点数运,包括加减乘除和四舍五入?br />*/
public class Arith {
(tng)//默认除法q算_ֺ
(tng)private static final int DEF_DIV_SCALE = 10;
(tng)//q个cM能实例化
(tng)private Arith() {
(tng)}
(tng)/**
(tng) * 提供_的加法运?br /> (tng) * @param v1 被加?br /> (tng) * @param v2 加数
(tng) * @return 两个参数的和
(tng) */
(tng)public static float add(float v1, float v2) {
(tng) BigDecimal b1 = new BigDecimal(Float.toString(v1));
(tng) BigDecimal b2 = new BigDecimal(Float.toString(v2));
(tng) return b1.add(b2).floatValue();
(tng)}
(tng)/**
(tng) * 提供_的减法运?br /> (tng) * @param v1 被减?br /> (tng) * @param v2 减数
(tng) * @return 两个参数的差
(tng) */
(tng)public static float sub(float v1, float v2) {
(tng) BigDecimal b1 = new BigDecimal(Float.toString(v1));
(tng) BigDecimal b2 = new BigDecimal(Float.toString(v2));
(tng) return b1.subtract(b2).floatValue();
(tng)}
(tng)/**
(tng) * 提供_的乘法运?br /> (tng) * @param v1 被乘?br /> (tng) * @param v2 乘数
(tng) * @return 两个参数的积
(tng) */
(tng)public static float mul(float v1, float v2) {
(tng) BigDecimal b1 = new BigDecimal(Float.toString(v1));
(tng) BigDecimal b2 = new BigDecimal(Float.toString(v2));
(tng) return b1.multiply(b2).floatValue();
(tng)}
(tng)/**
(tng) * 提供Q相对)(j)_的除法运,当发生除不尽的情冉|Q精到
(tng) * 数点以?0位,以后的数字四舍五入?br /> (tng) * @param v1 被除?br /> (tng) * @param v2 除数
(tng) * @return 两个参数的商
(tng) */
(tng)public static float div(float v1, float v2) {
(tng) return div(v1, v2, DEF_DIV_SCALE);
(tng)}
(tng)/**
(tng) * 提供Q相对)(j)_的除法运。当发生除不的情况Ӟ由scale参数?br /> (tng) * 定精度,以后的数字四舍五入?br /> (tng) * @param v1 被除?br /> (tng) * @param v2 除数
(tng) * @param scale 表示表示需要精到数点以后几位?br /> (tng) * @return 两个参数的商
(tng) */
(tng)public static float div(float v1, float v2, int scale) {
(tng) if (scale < 0) {
(tng) (tng) throw new IllegalArgumentException("The scale must be a positive integer or zero");
(tng) }
(tng) BigDecimal b1 = new BigDecimal(Float.toString(v1));
(tng) BigDecimal b2 = new BigDecimal(Float.toString(v2));
(tng) return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).floatValue();
(tng)}
(tng)/**
(tng) * 提供_的小C四舍五入处理?br /> (tng) * @param v 需要四舍五入的数字
(tng) * @param scale 数点后保留几位
(tng) * @return 四舍五入后的l果
(tng) */
(tng)public static float round(float v, int scale) {
(tng) if (scale < 0) {
(tng) (tng) throw new IllegalArgumentException("The scale must be a positive integer or zero");
(tng) }
(tng) BigDecimal b = new BigDecimal(Float.toString(v));
(tng) BigDecimal one = new BigDecimal("1");
(tng) return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).floatValue();
(tng)}
};
5、applet获得焦点
(tng) (tng)this.addComponentListener(new ComponentListener(){
(tng) (tng) (tng)public void componentHidden(ComponentEvent e) {
(tng) (tng) (tng) (tng)// TODO 自动生成Ҏ(gu)存根
(tng) (tng) (tng) (tng)
(tng) (tng) (tng)}
(tng) (tng) (tng)public void componentMoved(ComponentEvent e) {
(tng) (tng) (tng) (tng)// TODO 自动生成Ҏ(gu)存根
(tng) (tng) (tng) (tng)
(tng) (tng) (tng)}
(tng) (tng) (tng)public void componentResized(ComponentEvent e) {
(tng) (tng) (tng) (tng)// TODO 自动生成Ҏ(gu)存根
(tng) (tng) (tng) (tng)
(tng) (tng) (tng)}
(tng) (tng) (tng)public void componentShown(ComponentEvent e) {
(tng) (tng) (tng) (tng)// TODO 自动生成Ҏ(gu)存根
(tng) (tng) (tng) (tng)startButton.requestFocusInWindow();
(tng) (tng) (tng)}
(tng) (tng) (tng)
(tng) (tng)});
(tng)JFrame 获得焦点
(tng)this.addWindowListener(new WindowAdapter()
{
(tng) (tng) (tng) (tng) (tng) (tng) (tng) public void windowActivated(WindowEvent e)
(tng) (tng) (tng) (tng) (tng) (tng) (tng) {
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) jinput.requestFocus();
(tng) (tng) (tng) (tng) (tng) (tng) (tng) }
});
6、设定JSpinner格式
((JSpinner.DefaultEditor) j.getEditor()).getTextField()
(tng) (tng) (tng) (tng).setFormatterFactory(
(tng) (tng) (tng) (tng) (tng) (tng)new DefaultFormatterFactory(new NumberFormatter(
(tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)new DecimalFormat("#,#"))));
7、字?/font>
FontMetrics fm = label.getFontMetrics(font); // fontZ所使用的字?br />int strWidth = fm.stringWidth("字符?); // q样可以得到字符串的长度(像素),字符串的高度一般是字体的大?br />int width = 200; // 矩Ş的长?br />int high = 50; // 矩Ş的高
drawString("字符?, (width - strWidth) / 2, (high - font.getSize()) / 2 + font.getSize());
8、translate(800,600)
(tng) (tng) (tng)系l坐标逻辑Ud(800,600)以后再画囑փ׃q个逻辑原点为参照点Q用完以后要translate(-800,-600)回去
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>
负荷预测pȝ1
</title>
</head>
<body>
<p (tng) align= "center">
(tng)<!--<script language="JavaScript" src="temp.js"> -->
(tng)
(tng)<script language="JavaScript">
(tng)document.write('<object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" (tng) width="100%" (tng) height="100%" name="DFApplet">\n');
(tng) (tng) (tng) document.write('<param (tng) name="code" (tng) value="applet.NewJApplet">\n');
(tng) (tng) (tng) document.write('<param (tng) name="archive" (tng) value=".">\n');
(tng) (tng) (tng) document.write('<param (tng) name="codebase" (tng) value=".">\n');
(tng) (tng) (tng) document.write('<param (tng) name="applet" (tng) value="applet.NewJApplet">\n');
(tng) (tng) (tng) document.write('</object>\n');
(tng)</script>
</body>
</html>
用了(jin)2个层Q第一个层Qid为loadingQ可以写上一些提C消息。而第2个层(id为myapplet)在一开始是不可见的。当applet下蝲好了(jin)Q马上把W?个层昄出来Qƈ把第一个层设ؓ(f)不可见。因此,只要q?个层大小Q位|必d全一致。就可以实现我们的目标?/p>
现在我们只差最后一个问题需要解冻I(x)如何知道applet已经完全下蝲?jin)呢Q在IE和netscape中都有提供document.allq个属性,当应面的全部内容(包括applets,囄Q声音等Q已l下载后该属性ؓ(f)真。好Q这P我们只需监测document.all是否为真Q如果是Q那可以把消息所在的层设Z可见Q而applet所在的层设为可见,q刷新applet的显C(因ؓ(f)先前applet的显C隐藏?jin)?j)Q否则则相反处理?/p>