用Java編寫一個(gè)最簡單的桌面程序(用java編寫一個(gè)最簡單的桌面程序)
使用Java的優(yōu)勢在于網(wǎng)絡(luò)應(yīng)用方面,但Java也提供了強(qiáng)大的用于開發(fā)桌面程序的API,它們包含在javax.swing包中.使用這個(gè)包可以編寫簡單的Java桌面應(yīng)用程序.
Java的javax.swing包提供了許多用來設(shè)計(jì)GUI的組件類,在學(xué)習(xí)GUI編程時(shí),需要掌握兩個(gè)概念:容器類(Container)和組件類(Component),以下是GUI編程中經(jīng)常提到的基本知識點(diǎn).
· Java把Component類的子類或間接子類創(chuàng)建的對象稱為一個(gè)組件.
· Java把Container的子類或間接子類創(chuàng)建的對象稱為一個(gè)容器.
· 可以向容器中添加組件.Container類提供了一個(gè)public方法add(),一個(gè)容器可以調(diào)用這個(gè)方法將組件添加到該容器中.
· 容器調(diào)用removeAll()方法可以移除掉容器中的全部組件,調(diào)用remove(Component c)方法可以移除掉容器總參數(shù)c指定的組件.
· 容器本身也是一個(gè)組件,因此可以把一個(gè)容器添加到另一個(gè)容器中實(shí)現(xiàn)容器的嵌套.
· 每當(dāng)容器添加新的組件或移除組件時(shí),應(yīng)當(dāng)讓容器調(diào)用validate方法,以保證容器中的組件能正確顯示出來.
接下來用Java編寫一個(gè)簡單的桌面程序。
一個(gè)Java的應(yīng)用程序需要使用JFrame類的實(shí)例來提供一個(gè)底層容器和操作系統(tǒng)進(jìn)行交互,當(dāng)需要一個(gè)窗口時(shí),使用JFrame或其子類創(chuàng)建一個(gè)對象。窗口也是一個(gè)容器,可以向窗口添加組件。需要注意的是,窗口默認(rèn)被系統(tǒng)添加到顯示器屏幕上,一次不允許講一個(gè)窗口添加到另一個(gè)容器中。
1_1、WindowMenu創(chuàng)建一個(gè)帶窗口的菜單
WindowMenu win = new WindowMenu(“俄羅斯方塊”,200,30,900,1000);
1_2、菜單條、菜單、菜單項(xiàng)
· 菜單條
JComponent類的子類JMenubar負(fù)責(zé)創(chuàng)建菜單條,即JMenubar的一個(gè)實(shí)例就是一個(gè)菜單條。JFrame類中有一個(gè)將菜單條放置到窗口中的方法: setJMenuBar (JMenuBar bar);
· 菜單
JComponent類的子類JMenu負(fù)責(zé)創(chuàng)建菜單項(xiàng),即JMenu的一個(gè)實(shí)例就是一個(gè)菜單。
· 菜單項(xiàng)
JComponent類的子類JMenuItem負(fù)責(zé)創(chuàng)建菜單項(xiàng),即JMenuItem的一個(gè)實(shí)例就是一個(gè)菜單項(xiàng)。
2_1、運(yùn)行效果如下所示
2_2、源代碼
Tetres_windows.java
/*
* 俄羅斯方塊的窗體
*/
//import javax.swing.*;
//import java.awt.*;
public class Tetres_windows {
public static void main(String[] args) {
WindowMenu win = new WindowMenu(“俄羅斯方塊”,200,30,900,1000);
}
}
WindowMenu.java
/*
* 俄羅斯方塊的菜單
*/
import javax.swing.*;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import javax.swing.JFrame.*;
public class WindowMenu extends JFrame {
JMenuBar menubar;
JMenu menu0,menu1,menu2,subMenu;
JMenuItem item1,item2,item3;
public WindowMenu(String s,int x,int y,int w,int h) {
init(s);
setLocation(x,y);
setSize(w,h);
setVisible(true);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
}
void init(String s) {
setTitle(s);
menubar = new JMenuBar();
menu0 = new JMenu(“游戲”); //菜單欄的第一個(gè)選項(xiàng)
item1 = new JMenuItem(“新游戲(new)”);
item2 = new JMenuItem(“重新開始”);
menu0.add(item1);
menu0.addSeparator(); //設(shè)置子菜單之間的分割線
menu0.add(item2);
menu0.addSeparator(); //設(shè)置子菜單之間的分割線
subMenu = new JMenu(“難度等級”);
menu0.add(subMenu);
subMenu.add(new JMenuItem(“初級”));
subMenu.add(new JMenuItem(“中級”));
subMenu.add(new JMenuItem(“高級”));
menu0.addSeparator();
item3 = new JMenuItem(“退出”);
menu0.add(item3);
menubar.add(menu0);
menu1 = new JMenu(“編輯”); //菜單欄的第二個(gè)選項(xiàng)
item1 = new JMenuItem(“后退一步”);
menu1.add(item1);
menu1.addSeparator(); //設(shè)置子菜單之間的分割線
item2 = new JMenuItem(“前進(jìn)一步”);
menu1.add(item2);
menubar.add(menu1);
menu2 = new JMenu(“關(guān)于”);
item1 = new JMenuItem(“作者:rwxian”);
menu2.add(item1);
menu2.addSeparator();
item2 = new JMenuItem(“版本:v1.0”);
menu2.add(item2);
menubar.add(menu2);
setJMenuBar(menubar);
}
}