教学与实践目的:学会Java图形界面的设计及标准输入输出方法。
一、程序设计第一步:在指定的区域录入信息,到指定的区域显示该信息。
图形界面如图1所示。
知识点:基于界面的Java字符串读写技术。
图1 用户界面
程序技术:
用一个Java窗体类来实现,并完成上述的任务。
制作过程:
(1) 启动NetBeans平台,新建一个项目,选“JVAVA应用程序”,并命名该项目,如JavaApp,并完成项目创建所需的其它工作。然后在项目名下新建一个java包,如basicIO,在该包名目下新建一个JFrame窗体程序,命名为IOJFrame;
(2) 在IOJFrame的设计界面上分别选右边“组件面板”中的“标签”“文本区域”“文本字段”“按钮”拖放到IOJFrame的设计界面上,并按图1命名各组件。
先试运行IOJFrame.java程序,成功后进行下面的工作。若出现“没有主类”等不能运行的信息,则删除原有项目,重新创建新项目,创建过程中,除了命名和位置信息外,不要改动其他的默认配置信息。
(3) 鼠标右击“发送”按钮,如图2,进入源程序代码设计区,设置事件响应动作。
图2 右击按钮添加动作代码
按钮动作响应代码:
String msg = jTextField1.getText();//从信息录入区中取出字符串
jTextField1.setText(null); //信息录入区置空
jTextArea1.append("echo:"+msg +"\n"); //将获取的字符串显示在信息显示区。
说明:其中‘\n’为换行显示字符。在运行中若出现响应动作不如期望的,观察组件的变量名(如jTextField1)是否一致。
(4) 在“退出”按钮中,添加程序结束运行代码:
System.exit(0);
(5) 让字段录入框jTextField1支持回车键和ALT键。
在界面设计模式下,选中jTextField1框,右击鼠标选中事件下的Action,进入代码设计区,调用发送按钮的功能:
this.jButton1ActionPerformed(evt);
在界面设计模式下,选中jTextField1框,右击鼠标选中事件下的Key进入代码设计区,调用发送按钮的功能:
if(evt.isAltDown())//在evt事件类中判断Alt按键事件。
this.jButton1ActionPerformed(null);
对特殊按键事件的响应是界面程序设计中重要的技术,尤其是游戏程序设计技术,能举一反三,多练习几个按键的动作设计。
我的实践:
代码:
package basicIO;
import java.util.Date;
/**
*
* @author
*/
public class IOJFrame extends javax.swing.JFrame {
/**
* Creates new form IOJFrame
*/
FileWrite fw = new FileWrite();
public IOJFrame() {
initComponents();
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
jScrollPane1 = new javax.swing.JScrollPane();
jTextArea1 = new javax.swing.JTextArea();
jTextField1 = new javax.swing.JTextField();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jLabel1.setText("信息显示区");
jLabel2.setText("信息读取区");
jTextArea1.setColumns(20);
jTextArea1.setRows(5);
jScrollPane1.setViewportView(jTextArea1);
jTextField1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jTextField1ActionPerformed(evt);
}
});
jTextField1.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
jTextField1KeyPressed(evt);
}
});
jButton1.setText("发送");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jButton2.setText("退出");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
.addGroup(layout.createSequentialGroup()
.addGap(97, 97, 97)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addGroup(layout.createSequentialGroup()
.addComponent(jButton1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jButton2))
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 251, Short.MAX_VALUE)
.addComponent(jTextField1))))
.addContainerGap(52, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(1, 1, 1)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(4, 4, 4)
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 88, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 14, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton1)
.addComponent(jButton2))
.addContainerGap())
);
pack();
}// </editor-fold>
private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {
this.jButton1ActionPerformed(evt); // TODO add your handling code here:
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
String msg = jTextField1.getText();//从信息录入区中取出字符串
jTextField1.setText(null); //信息录入区置空
jTextArea1.append(msg +"\n"); //将获取的字符串显示在信息显示区。
fw.append(new Date()+msg);//保存聊天信息到磁盘文件.
// TODO add your handling code here:
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
System.exit(0); // TODO add your handling code here:
fw.close();
}
private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) {
if(evt.isAltDown())//在evt事件类中判断Alt按键事件。
this.jButton1ActionPerformed(null);
// TODO add your handling code here:
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(IOJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(IOJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(IOJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(IOJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new IOJFrame().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTextArea jTextArea1;
private javax.swing.JTextField jTextField1;
// End of variables declaration
}