一 一 實驗目的
加深學生對課堂講授內容的理解,從計算機語言的基本概念、程序設計的基本方法、語法規則等方面加深理解,打好程序設計、開發軟件的良好基礎。在上機實驗中,提高學生對 Java語言各部分內容的綜合使用能力,逐步掌握 Java 語言程序設計的規律與技巧。在對 Java 程序的調試過程中,提高學生分析程序中出現的錯誤與排除這些錯誤的能力。通過上機實踐,加深學生對計算機軟件運行環境,以及對操作系統與計算機語言支持系統相互關系的了解。
二、實驗要求
(1)問題描述準確、規范;
(2)程序結構合理,調試數據準確、有代表性; (3)界面布局整齊,人機交互方便; (4)輸出結果正確; (5)正確撰寫實驗報告。
三、設計內容
1 1 、計算器
計算器要有 GUI 界面,用戶可以輸入所需計算的數值,可以進行加、減、乘、除四種最基本的運算與混合運算,可以求一個數值的平方及倒數,可以進行階乘運算,要能運算小數,并且不會產生精度損失,在必要情況下,可以進行四舍五入的運算。允許正負數間的運算。要求使用 Applet 實現該計算器,當用瀏覽器運行程序時,點擊網頁中的按鈕,則計算器彈出,浮在網頁上,再次點擊按鈕時,計算器消失。
2 2 、文本編輯器
可以設置文本的字體、大小、顏色等基本參數,可以讀取計算機中 TXT 文件,可以生成一個新的 TXT 文件。其她功能參照 windows 的文本編輯器。
四 四. 實驗步驟 (1)上機實驗之前,為課程設計的內容作好充分準備。對每次上機需要完成的任務進行認真的分析,畫出程序流程圖,手工寫出符合任務要求的程序清單,準備出調試程序使用的數據,以便提高上機實驗的效率。
(2)按照實驗目的與實驗內容進行上機操作。錄入程序,編譯調試,反復修改,直到使程序正常運行,得出正確的輸出結果為止。
(3)根據實驗結果,寫出實驗報告。
五、 、 源代碼及運行結果
1. 計算器源代碼 import java、awt、*; import java、awt、event、*; import java、lang、*;
import javax、swing、*; public class jisuanqi extends WindowAdapter { //創建三個面板
Panel p1 = new Panel();
Panel p2 = new Panel();
Panel p3 = new Panel();
TextField txt;
private Button[] b = new Button[21];
private String ss[] = { "7", "8", "9", "/","清空" ,"4", "5", "6", "*","1/x", "1", "2",
"3", "-","平方",
"0", "、", "=", "+","n!" ,"關閉" };
static double
a, sum=1;
static String s,
str ;//定義變量 創建對像 //創建文本框
public static void main(String args[])
{
(new jisuanqi())、frame();
}
public void frame()
{
//設置文本框的名稱
Frame fm = new Frame("簡單計算器");
for (int i = 0; i <= 20; i++)
{
b[i] = new Button(ss[i]);
}
for (int i = 0; i <= 19; i++)
{
p2、add(b[i]); //創建按鈕 并添加到 P2
}
//按鈕 20 背景色黃色
b[20]、setBackground(Color、yellow);
txt = new TextField("");
txt、setEditable(false);//不能編輯文本框里面的內容
txt、setBackground(Color、white);
for (int i = 0; i <= 20; i++)
{
b[i]、addActionListener(new buttonlistener());//添加監聽器
} //設置關閉按鈕
b[20]、addActionListener(new close());
fm、addWindowListener(this);
p1、setLayout(new BorderLayout());//設置布局管理器
p1、add(txt, "North");//p1 面板放到區域南部
p2、setLayout(new GridLayout(4, 5,2,2));//布局:四行五列,間隔為二
p2、setBackground(Color、red);
p3、setLayout(new BorderLayout());
p3、add(b[20]);
將三個面板分別放到不同位置
fm、add(p1, "North");
fm、add(p2, "Center");
fm、add(p3, "South");
fm、pack();
fm、setVisible(true);//都就是些窗中設置 添加相關組件與監聽器
}
public void windowClosing(WindowEvent e) {
System、exit(0);//退出系統
} class buttonlistener implements ActionListener
{ //編寫監聽器事件 通過按鍵得出給果
public void actionPerformed(ActionEvent e)
{
Button btn = (Button) e、getSource();
if (btn、getLabel() == "=")
{
jisuan();
str = String、valueOf(a);
txt、setText(str);//顯示當前數字
s = "";//清零
}
else if
(btn、getLabel() == "+")
{
//設置一個方法
jisuan();
txt、setText("");
s = "+";
}
else if
(btn、getLabel() == "-")
{
jisuan();
txt、setText("");
s = "-";
} else if
(btn、getLabel() == "/")
{
jisuan();
txt、setText("");
s = "/";
} else if
(btn、getLabel() == "*")
{
jisuan();
txt、setText("");
s = "*"; } else if
(btn、getLabel()=="平方")
{
a=Double、parseDouble(txt、getText());
a*=a;
txt、setText(""+String、valueOf(a));
} else if
(btn、getLabel()=="n!")
{
a=Double、parseDouble(txt、getText());
sum=1;
for (int i=1;i<=a;i++)
sum=sum*i;
txt、setText(""+String、valueOf(sum));
} else if btn、getLabel()=="1/x")
{
a=Double、parseDouble(txt、getText());
txt、setText(""+String、valueOf(1/a));
}
else
{
txt、setText(txt、getText() + btn、getLabel());
if (btn、getLabel() == "清空")
txt、setText("");
} }
public void jisuan() {//編寫具體計算方法
if (s == "+")
a += Double、parseDouble(txt、getText());
else if (s == "-")
a -= Double、parseDouble(txt、getText());
else if (s == "*")
a *= Double、parseDouble(txt、getText());
else if (s == "/")
a /= Double、parseDouble(txt、getText());
else
a = Double、parseDouble(txt、getText());
} } } class close implements ActionListener
{ //退出
public void actionPerformed(ActionEvent e)
{
System、exit(0);
} } 、2 、 計算器 運行界面 (1 1 )
計算器主界面
(2 2 )
面板的實現
1 1 、創建三個面板分別就是顯示數字的面板、按鈕的面板與“關閉”的面板
Panel p1 = new Panel();
Panel p2 = new Panel();
Panel p3 = new Panel(); 2 2 、創建一個文本框參數
TextField txt; 3 3 、創建一群按鈕參數并給按鈕賦值
private Button[] b = new Button[21];
private String ss[] = { "7", "8", "9", "/","清空" ,"4", "5", "6", "*","1/x", "1", "2",
"3", "-","平方",
"0", "、", "=", "+","n!" ,"關閉" }; 4 4 、創建文本框
public static void main(String args[])
{
(new jisuanqi())、frame();
} 5 5 、設置文本框方法
public void frame()
{ //設置文本框的名稱
Frame fm = new Frame("簡單計算器"); 6 6 、設置按鈕
for (int i = 0; i <= 20; i++)
{
b[i] = new Button(ss[i]);
}
7 7 、設將按鈕添加到面板
for (int i = 0; i <= 19; i++)
{
p2、add(b[i]); //創建按鈕 并添加到 P2
}
8 8 、設置按鈕 0 20 背景色黃色
b[20]、setBackground(Color、yellow); 9 9 、創建文本框, , 并規定不能編輯內容與背景為白色
txt = new TextField("");
txt、setEditable(false);
txt、setBackground(Color、white); 10 、為按鈕添加監聽器
for (int i = 0; i <= 20; i++)
{
b[i]、addActionListener(new buttonlistener());//添加監聽器
} 11 、設置“關閉 ” 按鈕可以關閉界面并設置監聽器
b[20]、addActionListener(new close());
fm、addWindowListener(this);
12 、設置布局
p1、setLayout(new BorderLayout());//設置布局管理器
p1、add(txt, "North");//p1 面板放到區域南部
p2、setLayout(new GridLayout(4, 5,2,2));//布局:四行五列,間隔為二
p2、setBackground(Color、red);
p3、setLayout(new BorderLayout());
p3、add(b[20]);
13 、將三個面板分別放到不同位置
fm、add(p1, "North");
fm、add(p2, "Center");
fm、add(p3, "South");
fm、pack();
fm、setVisible(true);//都就是些窗中設置 添加相關組件與監聽器
} 14 、退出系統
public void windowClosing(WindowEvent e)
{
System、exit(0);
} (3 3 )
將按鈕添加到計算這個事件中
1 1 、 編寫監聽器事件
通過按鍵得出給果
public void actionPerformed(ActionEvent e)
{ //將按鈕賦予這個事件中
Button btn = (Button) e、getSource();
2 2 、如果點擊“= = ”這個按鈕, , 將出現當前數字
if (btn、getLabel() == "=")
{
jisuan();
str = String、valueOf(a);
txt、setText(str);//顯示當前數字
s = "";//清零
}
3 3 、如果點擊“+ + ”“- - ”“* * ”“/ / ”分別完成一個方法并將結果顯示到 文本框
else if
(btn、getLabel() == "+")
{
//設置一個方法
jisuan();
txt、setText("");
s = "+";
}
else if
(btn、getLabel() == "-")
{
jisuan();
txt、setText("");
s = "-";
} else if
(btn、getLabel() == "/")
{
jisuan();
txt、setText("");
s = "/";
} else if
(btn、getLabel() == "*")
{
jisuan();
txt、setText("");
s = "*"; } 4 4 、如果點擊“平方”則當前數字與原數字形成即完成相關方法
結果顯示最終的數字
else if
(btn、getLabel()=="平方")
{
a=Double、parseDouble(txt、getText());
a*=a;
txt、setText(""+String、valueOf(a)); //顯示 a } 5 5 、當輸入“n n !”, , 就用 r for 循環完成階乘, , 此方法屬于 c c 語言基礎方法, ,
不做相關解釋
else if
(btn、getLabel()=="n!")
{
a=Double、parseDouble(txt、getText());
sum=1;//歸一
for (int i=1;i<=a;i++)
sum=sum*i;
txt、setText(""+String、valueOf(sum)); //文本框中顯示“sum”的數值 }
6 6 、當輸入“ 1/x ”時, , 顯示 1/a 。
else if btn、getLabel()=="1/x")
{
a=Double、parseDouble(txt、getText());
txt、setText(""+String、valueOf(1/a));
}
7. 如果輸入“清空”文本框成為空文本框
else
{
txt、setText(txt、getText() + btn、getLabel());
if (btn、getLabel() == "清空")
txt、setText("");
} (4 4 )
設置“ jisuan ”方法
1 1 、編寫具體計算方法其實這些方法可以放到上面事件的實現中, , 從
” “平方”, , “n n” !”, , “ 1/x ”就 可 以 瞧 出 。
但 為 了 程 序 的 美 觀 與 高 識 別 性 , , 我 們 傳 建 一 個 方 法 來 實 現
if (s == "+")
a += Double、parseDouble(txt、getText());
else if (s == "-")
a -= Double、parseDouble(txt、getText());
else if (s == "*")
a *= Double、parseDouble(txt、getText());
else if (s == "/")
a /= Double、parseDouble(txt、getText());
else
a = Double、parseDouble(txt、getText());
3. 文本編輯器 源代碼
import java、awt、*; import javax、swing、*; import java、awt、event、*;
import javax、swing、event、*; import java、io、*; public class TextEditor {
public static void main(String args[])
{
TextFrame frame=new TextFrame();
frame、setDefaultCloseOperation(JFrame、EXIT_ON_CLOSE);
frame、show();
}
} class TextFrame extends JFrame {
//文件中的參數
= null;
static String d,k,s;
//編輯中的參數
String selected,text;
//格式中的參數
String sizeNames[] ={"5","10","15","20","25","30","35","40","45","50"};
String colorNames[] ={"黑色","紅色","藍色","綠色","白色","黃色","粉紅"};
String fontNames[]={"宋體","華文行楷","隸書","黑體","仿宋","華文彩云","楷體","方正姚體"};
String styleNames[] = { "粗體", "斜體" };
public TextFrame()
{ //設置文本框大小、名稱
setTitle("西西牌文本編輯器");
setSize(400,400);
addWindowListener(new LogoutAction());
J();//創建一個文件選擇器
//創建文本區
t1=new JTextArea(0,0);//面板與文本框無間隙
scrollPane=new JScrollPane(t1);//設置滾動條
getContentPane()、add(scrollPane);
//創建菜單欄
menuBar=new JMenuBar();
setJMenuBar(menuBar);
//文件
JMenu("文件(F)");
("F");//設置快捷鍵
newItem=new JMenuItem("新建(N)","N");
openItem=new JMenuItem("打開(O)、、、","O");
saveItem=new JMenuItem("保存(S)","S");
exitItem=new JMenuItem("退出(E)","E");
//設置監聽器
newItem、addActionListener(new ());
openItem、addActionListener(new ());
saveItem、addActionListener(new ());
exitItem、addActionListener(new ());
//設置加速器
newItem、setAccelerator(KeyStroke、getKeyStroke(KeyEvent、VK_N,InputEvent、CTRL_MASK));
openItem、setAccelerator(KeyStroke、getKeyStroke(KeyEvent、VK_O,InputEvent、CTRL_MASK)); saveItem、setAccelerator(KeyStroke、getKeyStroke(KeyEvent、VK_S,InputEvent、CTRL_MASK));
//添加按鈕到文件菜單欄
(newItem);
(openItem);
(saveItem);
(exitItem);
//編輯
edit=new JMenu("編輯(E)");
edit、setMnemonic("E");
//創建菜單項
cutItem=new JMenuItem("剪切(T)");
copyItem=new JMenuItem("復制(C)");
pasteItem=new JMenuItem("粘貼(P)");
deleteItem=new JMenuItem("刪除(L)");
selectAllItem=new JMenuItem("全選(A)");
//設置加速器
cutItem 、 setAccelerator(KeyStroke 、 getKeyStroke(KeyEvent 、 VK_X,InputEvent 、CTRL_MASK));
copyItem 、 setAccelerator(KeyStroke 、 getKeyStroke(KeyEvent 、 VK_C,InputEvent 、CTRL_MASK));
pasteItem 、 setAccelerator(KeyStroke 、 getKeyStroke(KeyEvent 、 VK_V,InputEvent 、CTRL_MASK));
deleteItem 、 setAccelerator(KeyStroke 、 getKeyStroke(KeyEvent 、 VK_L,InputEvent 、CTRL_MASK));
selectAllItem、setAccelerator(KeyStroke、getKeyStroke(KeyEvent、VK_A,InputEvent、
CTRL_MASK));
//設置監聽器
cutItem、addActionListener(new EditListener());
copyItem、addActionListener(new EditListener());
pasteItem、addActionListener(new EditListener());
deleteItem、addActionListener(new EditListener());
selectAllItem、addActionListener(new EditListener());
//添加按鈕到“編輯”菜單欄
edit、add(cutItem);
edit、add(copyItem);
edit、add(pasteItem);
edit、add(deleteItem);
edit、add(selectAllItem);
// 格式
format=new JMenu("格式(O)");
format、setMnemonic("O");
sizeItem=new JMenu("字體大小");
colorItem=new JMenu("字體顏色");
fontItem=new JMenu("字體");
styleItem=new JMenu("字體風格");
sizes = new JRadioButtonMenuItem[sizeNames、length];
colors = new JRadioButtonMenuItem[colorNames、length];
fonts = new JRadioButtonMenuItem[fontNames、length];
styles=new JCheckBoxMenuItem[styleNames、length];
styleGroup=new ButtonGroup();
fontGroup = new ButtonGroup();
colorGroup = new ButtonGroup();
sizeGroup = new ButtonGroup();
//將每種元素放進菜單項與按鈕組中
for (int i=0;i<sizes、length;i++)
{
sizes[i]=new JRadioButtonMenuItem(sizeNames[i]);
sizes[i]、addItemListener(new FormatListener());
sizeGroup、add(sizes[i]);
sizeItem、add(sizes[i]);
}
for (int i=0;i<colors、length;i++)
{
colors[i]=new JRadioButtonMenuItem(colorNames[i]);
colors[i]、addItemListener(new FormatListener());
colorGroup、add(colors[i]);
colorItem、add(colors[i]);
}
for (int i=0;i<fonts、length;i++)
{
fonts[i]=new JRadioButtonMenuItem(fontNames[i]);
fonts[i]、addItemListener(new FormatListener());
fontGroup、add(fonts[i]);
fontItem、add(fonts[i]);
}
for(int i=0;i<styles、length;i++)
{
styles[i]=new JCheckBoxMenuItem(styleNames[i]);
styles[i]、addItemListener(new FormatListener());
styleItem、add(styles[i]);
}
format、add(sizeItem);
format、add(colorItem);
format、add(fontItem);
format、add(styleItem);
//查瞧
view=new JMenu("關于我們(us)");
view、setMnemonic("U");
formItem=new JMenuItem("組成成員");
formItem、addActionListener(new ViewListener());
impressionItem=new JMenuItem("學習感言");
impressionItem、addActionListener(new ViewListener());
view、add(formItem);
view、add(impressionItem);
//將菜單添加到菜單欄中
menuBar、add(files);
menuBar、add(edit);
menuBar、add(format);
menuBar、add(view);
//彈出式菜單及其菜單項
popup=new JPopupMenu();
cutItemPop=new JMenuItem("剪切(T)");
cutItemPop、addActionListener(new EditListener());
copyItemPop=new JMenuItem("復制(C)");
copyItemPop、addActionListener(new EditListener());
pasteItemPop=new JMenuItem("粘貼(P)");
pasteItemPop、addActionListener(new EditListener());
deleteItemPop=new JMenuItem("刪除(L)");
deleteItemPop、addActionListener(new EditListener());
selectAllItemPop=new JMenuItem("全選(A)");
selectAllItemPop、addActionListener(new EditListener());
//添加
popup、add(cutItemPop);
popup、add(copyItemPop);
popup、add(pasteItemPop);
popup、add(deleteItemPop);
popup、add(selectAllItemPop);
//實現彈出式菜單的彈出觸發器
t1、addMouseListener(new MouseAdapter()
{
//釋放按鈕觸發事件
public void mouseReleased(MouseEvent e)
{
if(e、isPopupTrigger()) //指定彈出式菜單的成員以及顯示位置
popup、show(e、getComponent(),e、getX(),e、getY());
}
}
);
}
private class
implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
//"新建"
if(e、getSource()==newItem)
{
t1、setText("");
;
}
//"打開"
if(e、getSource()==openItem)
{
if()
(file);
int m=(TextFrame、this);
if( m==J)
{
();
openFile();
}
}
//"保存"
if(e、getSource()==saveItem)
{
d=t1、getText();
if() (file); //顯示保存對話框
int m=(TextFrame、this);
if(m==J)
{
();
saveFile();
}
}
//"退出"
if(e、getSource()==exitItem)
{
k=t1、getText(); //如果文本為空或已保存,直接退出,否則保存后退出
if(k、equals("")) System、exit(0);
else if(k、equals(d)) System、exit(0);
else
{
TextFrame f=new TextFrame();//新建確認型對話框
int n=JOptionPane、showConfirmDialog(
f,"就是否將文件保存到當前位置?",
"退出",JOptionPane、YES_NO_CANCEL_OPTION);
if(n==JOptionPane、YES_OPTION)//如果選擇“就是”,則保存文件
{
if() (file);
int m=(TextFrame、this);
if(m==J)
{
();
saveFile();
}
}
if(n==JOptionPane、NO_OPTION)
{
System、exit(0);
}
}
}
}
void openFile()//打開的方法
{
try
{
fr=new (file); //類用于讀取字符流
int len=(int)();
char []buffer=new char[len]; //以 file 的字符數開辟一段緩沖區
fr、read(buffer,0,len); //將 fr 從 file 中讀取的字符讀入數組 buffer中的某一部分,
fr、close(); //關閉該流
t1、setText(new String(buffer));
}
catch(Exception e)//拋出異常
{e、printStackTrace();}
}
void saveFile()//保存的方法
{
try
{
fw=new (file); //類用于寫入字符流
fw、write(t1、getText());//將 t1 里的內容寫入 file
fw、close(); //關閉該流
}
catch(Exception e)
{e、printStackTrace();}
} } private class LogoutAction extends WindowAdapter//實現點擊窗口退出事件監聽器
{
public void windowClosing(WindowEvent e)
{
s=t1、getText();
if(s、equals("")) System、exit(0);
else if(s、equals(d)) System、exit(0);
else{
TextFrame f=new TextFrame();//新建確認型對話框
int n=JOptionPane、showConfirmDialog(
f,"就是否將文件保存到當前位置?",
"退出",JOptionPane、YES_NO_OPTION);
if(n==JOptionPane、YES_OPTION)//如果選擇“就是”,則保存文件
{
if() (file);
int m=(TextFrame、this);
if(m==J)
{
();
saveFile();
}
}
if(n==JOptionPane、NO_OPTION)
{
System、exit(0);}
}
}
void saveFile()//保存的方法
{
try
{
fw=new (file); //類用于寫入字符流
fw、write(t1、getText());//將 t1 里的內容寫入 file
fw、close(); //關閉該流
}
catch(Exception e)
{e、printStackTrace();}
}
} private class EditListener implements ActionListener {
public void actionPerformed(ActionEvent e)
{
//剪切
if(e、getSource()==cutItem||e、getSource()==cutItemPop)
{
t1、cut();
}
//復制
if(e、getSource()==copyItem||e、getSource()==copyItemPop)
{
t1、copy();
}
//粘貼
if(e、getSource()==pasteItem||e、getSource()==pasteItemPop)
{
t1、paste();
}
//刪除
if(e、getSource()==deleteItem||e、getSource()==deleteItemPop)
{
text=t1、getText();
selected=t1、getSelectedText();
int id=text、indexOf(selected);
int start=id+selected、length();
int end=text、length();
String rest=text、substring(start,end);
t1、replaceRange(rest,id,end);
int a=id;
}
//全選
if(e、getSource()==selectAllItem||e、getSource()==selectAllItemPop)
{
t1、selectAll();
}
}
}
private class FormatListener implements ItemListener
//若用此類作監聽器,要用 addItemListener 方法注冊監聽器
{
public void itemStateChanged(ItemEvent e)
{
//設置字體風格(復選)
int
style=0;
if(styles[0]、isSelected())
style+=Font、BOLD;
if(styles[1]、isSelected())
style+=Font、ITALIC;
t1、setFont(new Font(t1、getFont()、getName(),style,t1、getFont()、getSize()));
//設置字體
for (int i=0;i<fonts、length;i++)
if(e、getSource()==fonts[i])
t1、setFont(new Font(fontNames[i],style,t1、getFont()、getSize()));
//設置字體大小
for(int j=0;j<sizes、length;j++)
if(e、getSource()==sizes[j])
t1、setFont(new Font(t1、getFont()、getName(),style,5*j));
//設置字體顏色
if(e、getSource()==colors[0])
t1、setForeground(Color、black);
if(e、getSource()==colors[1])
t1、setForeground(Color、red);
if(e、getSource()==colors[2])
t1、setForeground(Color、blue);
if(e、getSource()==colors[3])
t1、setForeground(Color、green);
if(e、getSource()==colors[4])
t1、setForeground(Color、white);
if(e、getSource()==colors[5])
t1、setForeground(Color、yellow);
if(e、getSource()==colors[6])
t1、setForeground(Color、pink);
}
}
private class ViewListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
//關于主題
if(e、getSource()==formItem)
{
JOptionPane、showMessageDialog(null, "閆曦
王鑫
馮爽", "成員機構",JOptionPane、INFORMATION_MESSAGE);
}
//關于本產品
if(e、getSource()==impressionItem)
{
JOptionPane、showMessageDialog(null, "經過半個多學期的學習,"+"\n"+"我們隊 java 有了一些了解,"
+"\n"+"并伴有極大的興趣"+"\n"+"也對軟件的瞧法有所改觀。"+"\n"+"感謝老師的教導,"+"\n"+
"同時也希望我們能編出一些新的"+"\n"+"軟件,為社會做出應有的貢獻",
" 學 習 感 言 ",JOptionPane 、INFORMATION_MESSAGE);
}
}
}
J ;
JTextArea t1;
JScrollPane scrollPane;
JMenuBar menuBar;//菜單欄
JPopupMenu popup;//彈出式菜單
JMenu
文件,編輯,格式,查瞧
JMenuItem newItem,openItem,saveItem,exitItem,//新建,打開,保存,打印,退出
cutItem,copyItem,pasteItem,deleteItem,selectAllItem,//剪切,復制,粘貼,刪除,全選
cutItemPop,copyItemPop,pasteItemPop,deleteItemPop,selectAllItemPop,//剪切,復制,粘貼,保存,刪除,全選
sizeItem,fontItem,styleItem,colorItem,//字體大小,字體,字體風格,顏色
formItem,impressionItem;//關于我們
private JCheckBoxMenuItem styles[];
private JRadioButtonMenuItem sizes[],colors[],fonts[];
private ButtonGroup sizeGroup,colorGroup,fontGroup,styleGroup; } 、4. 文本編輯器運行界面
(1 1 )
文件等原件放入菜單欄
(2 2 )
引入對話框 int m=(TextFrame 、 this);
(3 3 )
出現一個對話框來判斷就是否退出
//如果文本為空或已保存,直接退出,否則保存后退出 if(k、equals("")) System、exit(0);
else if(k、equals(d)) System、exit(0); else
{
TextFrame f=new TextFrame();//新建確認型對話框
int n=JOptionPane、showConfirmDialog(
f,"就是否將文件保存到當前位置?",
"退出",JOptionPane、YES_NO_CANCEL_OPTION);
if(n==JOptionPane、YES_OPTION)//如果選擇“就是”,則保存文件
{
if() (file);
int m=(TextFrame、this); if(m==J)
{
();
saveFile();
}
}
if(n==JOptionPane、NO_OPTION)
{
System、exit(0);
}
}
}
(4 4 )
JOptionPane 、 YES_NO_CANCEL_OPTION
這句話決定有幾個選項
(5 5 )
設置單選框與復選框, , 形式不太相同
// 格式
format=new JMenu("格式(O)");
format、setMnemonic("O");
sizeItem=new JMenu("字體大小");
colorItem=new JMenu("字體顏色");
fontItem=new JMenu("字體");
styleItem=new JMenu("字體風格");
sizes = new JRadioButtonMenuItem[sizeNames、length];
colors = new JRadioButtonMenuItem[colorNames、length];
fonts = new JRadioButtonMenuItem[fontNames、length];
styles=new JCheckBoxMenuItem[styleNames、length];
styleGroup=new ButtonGroup();
fontGroup = new ButtonGroup();
colorGroup = new ButtonGroup();
sizeGroup = new ButtonGroup();
(6 6 )
不 存 在 判 斷 , , 息 只 就 是 需 要 確 認 信 息 e JOptionPane 、INFORMATION_MESSAGE
//查瞧
view=new JMenu("關于我們(us)");
view、setMnemonic("U");
formItem=new JMenuItem("組成成員");
formItem、addActionListener(new ViewListener());
impressionItem=new JMenuItem("學習感言");
impressionItem、addActionListener(new ViewListener());
view、add(formItem);
view、add(impressionItem); //關于主題
if(e、getSource()==formItem)
{
JOptionPane、showMessageDialog(null, "閆曦
王鑫
馮爽", "成員機構",JOptionPane、INFORMATION_MESSAGE);
}
//關于本產品
if(e、getSource()==impressionItem)
{
JOptionPane、showMessageDialog(null, "經過半個多學期的學習,"+"\n"+"我們隊 java 有了一些了解,"
+"\n"+"并伴有極大的興趣"+"\n"+"也對軟件的瞧法有所改觀。"+"\n"+"感謝老師的教導,"+"\n"+
"同時也希望我們能編出一些新的"+"\n"+"軟件,為社會做出應有的貢獻", "學習感言",JOptionPane、INFORMATION_MESSAGE);
}
(7 7 )
編輯框的實現
//編輯
edit=new JMenu("編輯(E)");
edit、setMnemonic("E");
//創建菜單項
cutItem=new JMenuItem("剪切(T)");
copyItem=new JMenuItem("復制(C)");
pasteItem=new JMenuItem("粘貼(P)");
deleteItem=new JMenuItem("刪除(L)");
selectAllItem=new JMenuItem("全選(A)");
//加速器
cutItem、setAccelerator(KeyStroke、getKeyStroke(KeyEvent、VK_X,InputEvent、CTRL_MASK));
copyItem、setAccelerator(KeyStroke、getKeyStroke(KeyEvent、VK_C,InputEvent、CTRL_MASK));
pasteItem、setAccelerator(KeyStroke、getKeyStroke(KeyEvent、VK_V,InputEvent、CTRL_MASK));
deleteItem、setAccelerator(KeyStroke、getKeyStroke(KeyEvent、VK_L,InputEvent、CTRL_MASK));
selectAllItem、setAccelerator(KeyStroke、getKeyStroke(KeyEvent、VK_A,InputEvent、CTRL_MASK));
//監聽器
cutItem、addActionListener(new EditListener());
copyItem、addActionListener(new EditListener());
pasteItem、addActionListener(new EditListener());
deleteItem、addActionListener(new EditListener());
selectAllItem、addActionListener(new EditListener());
//添加
edit、add(cutItem);
edit、add(copyItem);
edit、add(pasteItem);
edit、add(deleteItem);
edit、add(selectAllItem);
(8)
彈出式菜單的實現
//彈出式菜單及其菜單項
popup=new JPopupMenu();
cutItemPop=new JMenuItem("剪切(T)");
cutItemPop、addActionListener(new EditListener());
copyItemPop=new JMenuItem("復制(C)");
copyItemPop、addActionListener(new EditListener());
pasteItemPop=new JMenuItem("粘貼(P)");
pasteItemPop、addActionListener(new EditListener());
deleteItemPop=new JMenuItem("刪除(L)");
deleteItemPop、addActionListener(new EditListener());
selectAllItemPop=new JMenuItem("全選(A)");
selectAllItemPop、addActionListener(new EditListener());
//添加
popup、add(cutItemPop);
popup、add(copyItemPop);
popup、add(pasteItemPop);
popup、add(deleteItemPop);
popup、add(selectAllItemPop);
//實現彈出式菜單的彈出觸發器
t1、addMouseListener(new MouseAdapter()
{
public void mouseReleased(MouseEvent e)
{
if(e、isPopupTrigger())
popup、show(e、getComponent(),e、getX(),e、getY());//指定彈出式菜單的成員以及顯示位置
}
}
六、 、 程序流程圖 ? 計算器
? 文本編輯器
七、 、 心得體會 轉眼間半個學期的java課程都學完了,從起初對Java的一無所知,到如今可以編寫很多Java 程序,整個過程中對 Java 頗有感受。在前十周中我們學習了有關 Java 的一些簡單知識,但就是感覺一頭霧水,不知其然,當然也更不知其所以然,本次就是我第一次使用 JAVA 來編寫我認為使用的程序,感覺很就是不一樣,雖然不能說精通,但可以自豪的說:我們知其然。這也使得我萌生一個想法:如果java考試能在課程設計與java實驗之后考,我想我的成績會更好一些。這三周的上機也我們有了更多的實地操作經驗。
在這次實驗中,我意識到無論多么復雜的程序都就是要用許多簡單的程序組合而成,不要小瞧一個面板的設置,面板也可以分為很多種,就比如 TextPanel、ButtonPanel 等等都有不同的用處,而且還要排版,這就是我們就需要從課外學習一些新的知識來使面板的布局更加美觀、更加人性化。沒有一個程序就是在我們沒有思考就能做出來的,當然沒有一道題就是在我們思考就是討論之后還做不出來的。當然這也要結合我們的實際情況。我們組雖然做的不如有的人好,界面不就是足夠美觀,功能不就是足夠強大,但就是我們在這之前就確定一個中心思想:充分運用書本知識。所以在我們的程序中絕大多數代碼都可以在書中找到。不過有些方法就是我們力所不能及的,比如 GridLayout 的布局,從外面流入一個對話框等等。當然我們的方法并不高級,以至于不就是很美觀,但就是卻就是我們積極的從課外書中找到的。
在這三周的學習中我們從一開始的各自做各自的到后來的積極討論,積極向老師同學請教。平心而論,這確實就是一個好方法,正所謂“聽君一席話,勝讀十年書”,這要比自己從書中苦苦尋求答案要快得多,也記的更牢。我們在做完自己的作品后也會去瞧瞧別人的代碼,瞧瞧與自己有什么不同,或者自己有什么地方比別人繁瑣,有一個地方我印象很深刻,就就是剪切復制等方法的實現只需要設置 cut()、copy()等,而不需要再寫關于選定區域的方法: // 剪切
if(e 、 getSource()==cutItem||e 、 getSource()==cutItemPop)
{
text=t1 、 getText();
selected=t1 、 getSelectedText();
a=text 、 indexOf(selected); ;
t1 、 cut();
f=1;
} }
當然像這樣的大大小小的改動就是必須的,我們也樂此不疲。一次次的為自己的一個收獲而歡呼雀躍。
通過這次實驗課程,我也添加了不少自信。最開始學這本書的時候,很多朋友跟我說:“數學不好就是學不好這些的!”我聽了相當恐懼,因為文化課中我最差勁的科目就就是數學。但就是當我堅持到現在,我想我可以完全否定這句話,沒有人可以給自己下定論,沒有人可以說自己學不好或做不好什么,只要下了功夫,只要勤加練習,總會成功的。所以今后的課程,我會抱著更大的自信與更謹慎的態度去學習。
Java 這本書,對我來說,就是走進編程世界的第一個起點,它對我至關重要,從中我了解了編程人員的辛苦,同時也建立的不少的信心,我希望在未來的學習過程中,一直用學習這本書時候的態度作為一個衡量的尺度,還就是那句老話“勤能補拙”。就像在第一題中,我們就針對面板采取了很多方案,有時候都想過要偷懶,就比如 BorderLayout 這個布局管理器的按鈕大小就是根據按鈕里面內容的多少而確定的,并不能實現充分利用文本域。我們就在想可不可以將每個按鈕中的內容都填成個位數或者就是兩位數,這樣就可以投機取巧用一個簡單的代碼完成復雜的程序,但問題出現啦,當文本框拉長之后就走型了,于就是我們又在想把文本框的大小固定了老師就瞧不出來啦。雖然這方法很好,但終究不就是一個長遠之計。最終我餓美女還就是用了 GridLayout 來規定幾行幾列,這樣就無懈可擊啦!這個代碼的發現也讓我們信心增進不少,讓那個我們感覺到其實 java 的代碼并不深奧,只要我們愿意去尋找與發現它們,就不困難。
而第二個實驗較之第一個實驗而言難度有所增加,但絕非我們力所不能及的,完全沒有必要抄襲別人的方法,實驗課也極度的使我的自信心膨脹,讓我感覺到 java 并不就是可望而不可即的,我們完全有能力駕馭它。相信之后我能自己編出更多有用的程序來充實自己。
我還有很多東西要學,越就是學習我越就是覺得自己懂的東西太少。不過,好在我已經意識到了,接下來就就是努力,努力再努力!最后也祝各位合肥工業大學的輔導老師們身體健康,工作順利!
推薦訪問: 課程設計 實驗 報告
上一篇:約瑟夫環問題實驗報告
下一篇:安全生產自查報告
同志們:今天這個大會,是市委全面落實黨要管黨、從嚴治黨要求的一項重大舉措,也是對縣市區委書記履行基層黨建工作第一責任人情況的一次集中檢閱,同時是對全市基層黨建工作的一次再部署、再落實的會議。前面,**
***年,我認真履行領班子、帶隊伍、抓黨員、保穩定的基層黨建工作思路,以學習貫徹習近平新時代中國特色社會主義思想和黨的十九大歷次全會精神為主線,以市局基層黨建工作考核細則為落腳點,落實全面從嚴治黨主體
根據會議安排,現將2022年履行抓基層黨建工作職責情況報告如下:一、履職工作特色和亮點1 突出政治建設,著力在思想認識上提高。牢固樹立抓黨建就是抓政績的理念,以“黨建工作抓引領、社區治理求突破,為民服
2022年以來,在**黨委的正確領導下,堅持以習近平新時代中國特色社會主義思想為指導,深入學習宣傳貫徹黨的二十大精神,以黨建工作為統領,扎實開展夯實“三個基本”活動,以“四化四力”行動為抓手,聚力創建
各位領導,同志們:根據會議安排,現就2022年度抓基層黨建工作情況匯報如下:一、主要做法及成效(一)強化政治引領。一是不斷強化理論武裝。堅持通過黨組會、中心組學習會和“三會一課”,第一時間、第一議題學
2022年度抓基層黨建工作述職報告按照黨委工作部署,現將本人2022年度抓基層黨建工作情況報告如下:一、2022年度抓基層黨建工作情況(一)旗幟鮮明講政治將旗幟鮮明講政治放在全局發展首要位置,積極開展
2022年,是我在數計系黨總支書記這個新崗位上度過的第一個完整的工作年度。回首一年來在校黨委的正確領導下,與數計系領導班子和全體師生共同走過的日子,艱辛歷歷在目,收獲溫潤心田。作為黨總支書記,我始終牢
按照考核要求,現將本人一年來,作為統戰部長履行職責、廉潔自律等方面情況報告如下:一、著眼增強政治素質,不斷深化理論學習堅持把旗幟鮮明講政治作為履職從政的第一位要求,帶領統戰系統干部堅決擁護“兩個確立”
**年,緊緊圍繞黨工委、管委會的決策部署,全體人員團結協作、凝心聚力,緊扣黨工委“**”基本工作思路,全力開拓進取,認真履職盡責,圓滿完成各項工作任務。一、個人思想政治狀況檸檬文苑www bgzjy
按照縣委關于開展抓基層黨建述職評議會議的有關要求,經請示縣委組織部同意,今天,我們在此召開2022年度基層黨組織書記抓基層黨建述職評議會議。1 首先,請**黨委書記,**同志述職。**黨委能夠主動研究