深刻java事宜注冊的運用剖析。本站提示廣大學習愛好者:(深刻java事宜注冊的運用剖析)文章只能為提供參考,不一定能成為您想要的結果。以下是深刻java事宜注冊的運用剖析正文
對前次的三個成績的小我懂得:
1) 法式起首是從main函數開端履行的,假定main 函數不是 static ,就要先實例化這個類,然後挪用 main 辦法,這仿佛是不實際的. 其次 用 static 潤飾的 main 辦法是存儲在靜態的存貯區傍邊的,也就是說在創立一個類以後,main 函數就曾經存在了,去失落 static 潤飾以後,編譯可以經由過程,然則不克不及履行。
2)查 API以後才發明BufferedRead 對象的 readLine()方讀到的數據是,讀到有換行的處所為一行,直接用 readLine 斷定的時刻曾經讀入一行了,在輸入數據時就會隔行輸入。
FileReader file=new FileReader("C:\\123.txt");
BufferedReader br1=new BufferedReader(file);
//斷定的時刻曾經讀入一行
while((br1.readLine())!=null)
{ //輸入的是第二行的內容
System.out.println(br1.readLine());
}
所以用一個暫時的字符串變量來存儲讀到的數據,法式改改如許便可以了:
FileReader file=new FileReader("C:\\123.txt");
BufferedReader br1=new BufferedReader(file);
String cd;
while((cd=br1.readLine())!=null)
{
System.out.println(cd);
}
3)假如將客戶端、輸出流、輸入流的初始化全體放進 Send 按鈕的事宜傍邊時,法式會到達我想要的後果,點擊銜接以後就會有客戶端銜接上去,但總認為如許會有其他的平安隱患,總有一天它會暴漏的。
明天要記載在這裡的是先生隨堂安排的一個小法式,完成一個盤算器的雛形,外面只要加減運算,對個中的按鈕注冊有了一點新的熟悉,照樣將代碼貼出來先。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class ComboBoxTest extends JFrame{
private JButton done =new JButton(" Done ");
private JButton clear=new JButton(" Clear ");
private JLabel label = new JLabel("Please choose serverID:0(+)and1(-)");
public ComboBoxTest(){
//添加一個組合框並設置兩個選項
final JComboBox c = new JComboBox();
int [] array = {0,1};
c.addItem(array[0]);
c.addItem(array[1]);
final JTextField operand1=new JTextField(10); //添加第一個操作數為輸出文本框,占8列
final JLabel t=new JLabel("+"); //初始化中央的操作符為“+”號
final JTextField operand2=new JTextField(10); //第二個操作符
final JTextField result=new JTextField(4); //成果的文本域 ,初始化占4列
//給組合框c注冊一個事宜,當組合框選項產生變更的時刻,觸發的響應事宜
c.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(c.getSelectedIndex()==0) //選項為“0”的時刻 令中央的操作符顯示“+”號
t.setText(" + ");
else t.setText(" - ");
}
});
//給按鈕Done注冊一個事宜,傍邊間的操作符分歧時停止分歧的操作
done.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
if(c.getSelectedIndex()==0)
{
//傍邊間的操作符為“+”號時,停止兩個操作數的加法 ,文本域的get()辦法前往的是字符串,停止強迫轉換
int a=Integer.parseInt(operand1.getText())+Integer.parseInt(operand2.getText());
result.setText("="+" "+a+" "); //設置成果顯示響應的成果
}
else {
//傍邊間的操作符為“-”號的時刻,停止兩個操作數的減法
int a=Integer.parseInt(operand1.getText())-Integer.parseInt(operand2.getText());
result.setText("="+" "+a+" ");
}
}
});
// 給按鈕clear注冊一個事宜,清空兩個操作數和成果的內容
clear.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
operand1.setText(""); //清空操作數1
operand2.setText(""); //清空操作數2
result.setText(""); //清空成果框
}
});
setLayout(new FlowLayout());
add(label);
add(c);
add(operand1);
add(t);
add(operand2);
add(result);
add(done);
add(clear);
setSize(350,140);
setVisible(true);
}
public static void main(String[] args) {
new ComboBoxTest();
}
}
下面的代碼中給選項框、“done”、"clear"按鈕注冊事宜的時刻所用的都是匿名類,這個類的創立就是為了給響應的組件添加事宜,還可以如許寫,用外面的“clear”這個按鈕來做個例子。
完成 ActionListener 籠統類傍邊的獨一的一個接口函數,為此界說一個 ButtonListener 監聽器的對象
class ButtonListener implements ActionListener{
public void actionPerformed(ActionEvent e){
operand1.setText(""); //清空操作數1
operand2.setText(""); //清空操作數2
result.setText(""); //清空成果框
}
}
類屬性傍邊須要界說一個 ButtonListener 的對象屬性:
private ButtonListener clearaction = new ButtonListener();
最初一個步調就是將這個按鈕監聽器的事宜對象注冊給按鈕:
clear.addActionListener(clearaction);
小我總結:
這一種注冊事宜的方法年夜致進程是如許的 ButtonListener =》 ActionListener => 注冊給按鈕,和匿名類比擬,缺陷是代碼量有點多,但假定你有N個盤算具有這類
功效的按鈕而且事宜完成的辦法比擬龐雜時,便可以完成一個 ActionListener 的對象,同時界說N個 ButtonListener 監聽器對象,將雷同的事宜完成注冊給按鈕便可以了,比擬之下匿名類在這類情況上面會有很年夜的任務量,代碼量會激增。
還可以經由過程事宜 e.getSource()辦法將一切的事宜處置放進一個函數傍邊,如許仿佛保護起來要更便利一點,在類的聲明傍邊要強調完成接口中的籠統函數。
public class ComboBoxTest extends JFrame implements ActionListener
詳細的完成進程以下:
public void actionPerformed(ActionEvent e){
if(e.getSource()==c){
if(c.getSelectedIndex()==0) //選項為“0”的時刻 令中央的操作符顯示“+”號
t.setText(" + ");
else t.setText(" - ");
}
if(e.getSource()==done){
if(c.getSelectedIndex()==0)
{
//傍邊間的操作符為“+”號時,停止兩個操作數的加法 ,文本域的get()辦法前往的是字符串,停止強迫轉換
int a=Integer.parseInt(operand1.getText())+Integer.parseInt(operand2.getText());
result.setText("="+" "+a+" "); //設置成果顯示響應的成果
}
else {
//傍邊間的操作符為“-”號的時刻,停止兩個操作數的減法
int a=Integer.parseInt(operand1.getText())-Integer.parseInt(operand2.getText());
result.setText("="+" "+a+" ");
}
}
if(e.getSource()==clear){
operand1.setText(""); //清空操作數1
operand2.setText(""); //清空操作數2
result.setText(""); //清空成果框
}