學習java Swing程式設計的一個簡單Demo
阿新 • • 發佈:2019-02-13
import java.lang.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class SwingComponent
{
//建立窗體,JFrame
JFrame f = new JFrame("測試");
//定義一個按鈕,併為之指定圖示
//ImageIcon(Image image)
//根據影象物件建立一個 ImageIcon。 Icon是介面,ImageIcon實現了該介面,多型的體現
//定義一個單選按鈕,併為之指定圖示
Icon okIcon = new ImageIcon("ico/ok.png");
JButton ok = new JButton("確認",okIcon);
//定義一個單選按鈕,出事處於選中狀態
//JradioButton 實現一個單選按鈕,此按鈕項可被選擇或取消選擇,並可為使用者顯示其狀態。
//JRadioButton(String text, boolean selected)
//建立一個具有指定文字和選擇狀態的單選按鈕。
JRadioButton male = new JRadioButton("男",true);
JRadioButton female = new JRadioButton("女",false);
ButtonGroup bg = new ButtonGroup();
//定義一個複選框,出事狀態處於沒有選中狀態
JCheckBox married = new JCheckBox("是否已婚?",false);
String[] colors = new String[]{"紅色","綠色","藍色"};
//定義一個下拉選擇框
//JComboBox(Object[] items)
//建立包含指定陣列中的元素的 JComboBox。
JComboBox<String> colorChooser = new JComboBox<>(colors);
//定義一個列表選擇框??????????????
//JList(Object[] listData)
//構造一個 JList,使其顯示指定陣列中的元素。
JList<String> colorList = new JList<>(colors);
//定義一個8行20列的多行文字框
JTextArea ta = new JTextArea(8,20);
//定義一個40列的單行文字框
JTextField name = new JTextField(40);
JMenuBar mb = new JMenuBar();
JMenu file = new JMenu("檔案");
//JMenu(String s)
//構造一個新 JMenu,用提供的字串作為其文字。
JMenu edit = new JMenu("編輯");
Icon newIcon = new ImageIcon("ico/new.png");
//JMenuItem(String text, Icon icon)
//建立帶有指定文字和圖示的 JMenuItem。
JMenuItem newItem = new JMenuItem("新建",newIcon);
Icon saveIcon = new ImageIcon("ico/new.png");
JMenuItem saveItem = new JMenuItem("儲存",saveIcon);
Icon exitIcon = new ImageIcon("ico/exit.png");
JMenuItem exitItem = new JMenuItem("退出",exitIcon);
JCheckBoxMenuItem autoWrap = new JCheckBoxMenuItem("自動換行");
JMenuItem copyItem = new JMenuItem("複製",new ImageIcon("ico/copy.png"));
JMenuItem pasteItem = new JMenuItem("貼上",new ImageIcon("ico/paste.png"));
JMenu format = new JMenu("格式");
JMenuItem commentItem = new JMenuItem("註釋");
JMenuItem cancelItem = new JMenuItem("取消註釋");
//定義一個右鍵選單,用於設定程式的外觀風格
JPopupMenu pop = new JPopupMenu();
ButtonGroup flavorGroup = new ButtonGroup();
//建立5個單選按鈕,用於設定程式的外觀風格
JRadioButtonMenuItem metalItem = new JRadioButtonMenuItem("Metal風格",true);
JRadioButtonMenuItem nimbusItem = new JRadioButtonMenuItem("Nimbus風格");
JRadioButtonMenuItem windowsItem = new JRadioButtonMenuItem("windows風格");
JRadioButtonMenuItem motifyItem = new JRadioButtonMenuItem("motifyItem風格");
JRadioButtonMenuItem classicItem = new JRadioButtonMenuItem("windows經典風格");
/*------------------下面是用於執行介面初始化的init方法-------------------------*/
public void init()
{
//建立一個裝載了文字框、按鈕的JPanel
JPanel bottom = new JPanel();
bottom.add(name);
bottom.add(ok);
f.add(bottom,BorderLayout.SOUTH);//用BorderLayout佈局管理器,放在最底層
//建立一個裝載了下拉選擇框、三個JCheckBox的JPanel
JPanel checkPanel = new JPanel();
checkPanel.add(colorChooser);
////既要載入在一個ButtonGroup中,也要載入在checkPanel中
//若去掉bg.add(male);bg.add(female); 則能選兩個性別
//若去掉 checkPanel.add(male);checkPanel.add(female); 則兩個性別RadioButton消失
bg.add(male);
bg.add(female);
checkPanel.add(male);
checkPanel.add(female);
checkPanel.add(married);
//建立一個垂直排列的元件的Box,盛裝多行文字域JPanel
Box topLeft = Box.createVerticalBox();//建立一個從上到下顯示的Box
//使用JScrollPance作為普通元件的JViewPort
JScrollPane taJsp = new JScrollPane(ta);
topLeft.add(taJsp);
topLeft.add(checkPanel);
//建立一個水平排列元件的Box,盛裝topLeft、colorList
Box top = Box.createHorizontalBox();
top.add(topLeft);
top.add(colorList);
//將Top Box容器新增到視窗的中間
f.add(top);
//----------下面開始組合菜單,並未選單新增監聽器---------------------
//為newItem設定快捷鍵,設定快捷鍵時要使用大寫字母
newItem.setAccelerator(KeyStroke.getKeyStroke('N',InputEvent.CTRL_MASK));
newItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
ta.append("使用者單擊了“新建”選單\n");
}
});
//為file選單新增選單項
file.add(newItem);
file.add(saveItem);
file.add(exitItem);
//為exit選單新增選單項
edit.add(autoWrap);
//使用addSeparator方法新增選單分隔線
edit.addSeparator();
edit.add(copyItem);
edit.add(pasteItem);
//為commentItem元件新增提示資訊
commentItem.setToolTipText("將從程式程式碼註釋起來!");
//為format選單新增選單項
format.add(commentItem);
format.add(cancelItem);
//使用新增new JMenuItem(“-”)的方式不能新增選單分隔符
edit.add(new JMenuItem("-"));
//將format選單組合到eidt選單中,從而形成二級選單
edit.add(format);
//將file、edit選單新增到mb選單條中
mb.add(file);
mb.add(edit);
//為f視窗設定選單條
f.setJMenuBar(mb);
//------下面開始組合右鍵選單,並安裝右鍵選單-----------------
flavorGroup.add(metalItem);
flavorGroup.add(nimbusItem);
flavorGroup.add(windowsItem);
flavorGroup.add(classicItem);
flavorGroup.add(motifyItem);
pop.add(metalItem);
pop.add(nimbusItem);
pop.add(windowsItem);
pop.add(classicItem);
pop.add(motifyItem);
//為5個風格選單建立事件監聽器
ActionListener flavorListener = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
try{
switch(e.getActionCommand())
{
case "Metal風格":
changeFlavor(1);
break;
case "Nimbus風格":
changeFlavor(2);
break;
case "Windows風格":
changeFlavor(3);
break;
case "Windows經典風格":
changeFlavor(4);
break;
case "Motif風格":
changeFlavor(5);
break;
}
}
catch(Exception ee)
{
ee.printStackTrace();
}
}
};
//為5個風格選單項新增事件監聽器
metalItem.addActionListener(flavorListener);
nimbusItem.addActionListener(flavorListener);
windowsItem.addActionListener(flavorListener);
classicItem.addActionListener(flavorListener);
motifyItem.addActionListener(flavorListener);
//呼叫該方法即可設定右鍵選單,無須使用事件機制;
ta.setComponentPopupMenu(pop);
//設定關閉視窗時,退出程式
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setVisible(true);
//方法內部不再巢狀方法,而是呼叫語句了
}
private void changeFlavor(int flavor) throws Exception
{
switch(flavor)
{
//設定Metal風格
case 1:
UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
break;
case 2:
UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimusLoolAndFeel");
break;
case 3:
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
break;
case 4:
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel");
break;
case 5:
UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
break;
}
//更新f視窗內頂級容器以及內部所有元件的UI
SwingUtilities.updateComponentTreeUI(f.getContentPane());
//更新mb選單條以及內部所有元件的UI
SwingUtilities.updateComponentTreeUI(mb);
//更新pop右鍵選單以及內部所有元件的UI
SwingUtilities.updateComponentTreeUI(pop);
}
public static void main(String[] args)
{
new SwingComponent().init();
}
}
/*
1、JRadioButton:實現一個單選按鈕,此按鈕項可被選擇或取消選擇,並可為使用者顯示其狀態。與 ButtonGroup 物件配合使用可建立一組按鈕,一次只能選擇其中的一個按鈕。(建立一個 ButtonGroup 物件並用其 add 方法將 JRadioButton 物件包含在此組中。)
2、ButtonGroup: 此類用於為一組按鈕建立一個多斥(multiple-exclusion)作用域。使用相同的 ButtonGroup 物件建立一組按鈕意味著“開啟”其中一個按鈕時,將關閉組中的其他所有按鈕。
3、JComboBox:將按鈕或可編輯欄位與下拉列表組合的元件。使用者可以從下拉列表中選擇值,下拉列表在使用者請求時顯示。如果使組合框處於可編輯狀態,則組合框將包括使用者可在其中鍵入值的可編輯欄位。
4、JMenuBar:選單欄的實現。將 JMenu 物件新增到選單欄以構造選單。當用戶選擇 JMenu 物件時,就會顯示其關聯的 JPopupMenu,允許使用者選擇其上的某一個 JMenuItem。
5、JMenuItem:選單中的項的實現。選單項本質上是位於列表中的按鈕。當用戶選擇“按鈕”時,則執行與選單項關聯的操作。JPopupMenu 中包含的 JMenuItem 正好執行該功能。
6、JCheckBoxMenuItem:可以被選定或取消選定的選單項。如果被選定,選單項的旁邊通常會出現一個複選標記。如果未被選定或被取消選定,選單項的旁邊就沒有複選標記。像常規選單項一樣,複選框選單項可以有與之關聯的文字或圖示,或者二者兼而有之。舉例:自動換行,如果被選中,後面會出現 鉤
7、JPopupMenu:彈出選單的實現,彈出選單是一個可彈出並顯示一系列選項的小視窗。JPopupMenu 用於使用者在選單欄上選擇項時顯示的選單。它還用於當用戶選擇選單項並激活它時顯示的“右拉式 (pull-right)”選單。最後,JPopupMenu 還可以在想讓選單顯示的任何其他位置使用。例如,當用戶在指定區域中右擊時。
8、JRadioButtonMenutItem:一個單選按鈕選單項的實現。JRadioButtonMenuItem 是屬於一組選單項中的一個選單項,該組中只能選擇一個項。被選擇的項顯示其選擇狀態。選擇此項的同時,其他任何以前被選擇的項都切換到未選擇狀態。要控制一組單選按鈕選單項的選擇狀態,請使用 ButtonGroup 物件。
9、JScrollPane:提供輕量級元件的 scrollable 檢視。JScrollPane 管理視口、可選的垂直和水平滾動條以及可選的行和列標題視口。
10、JMenu被新增到JMenuBar中,形成選單,被新增在JMenu中,形成二級選單;
11、Swing選單不允許使用add(new JMenutItem(“-”))的方式來新增選單分隔符,只能使用addSeparator()方法來新增選單分隔符
*/
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class SwingComponent
{
//建立窗體,JFrame
JFrame f = new JFrame("測試");
//定義一個按鈕,併為之指定圖示
//ImageIcon(Image image)
//根據影象物件建立一個 ImageIcon。 Icon是介面,ImageIcon實現了該介面,多型的體現
//定義一個單選按鈕,併為之指定圖示
Icon okIcon = new ImageIcon("ico/ok.png");
JButton ok = new JButton("確認",okIcon);
//定義一個單選按鈕,出事處於選中狀態
//JradioButton 實現一個單選按鈕,此按鈕項可被選擇或取消選擇,並可為使用者顯示其狀態。
//JRadioButton(String text, boolean selected)
//建立一個具有指定文字和選擇狀態的單選按鈕。
JRadioButton male = new JRadioButton("男",true);
JRadioButton female = new JRadioButton("女",false);
ButtonGroup bg = new ButtonGroup();
//定義一個複選框,出事狀態處於沒有選中狀態
JCheckBox married = new JCheckBox("是否已婚?",false);
String[] colors = new String[]{"紅色","綠色","藍色"};
//定義一個下拉選擇框
//JComboBox(Object[] items)
//建立包含指定陣列中的元素的 JComboBox。
JComboBox<String> colorChooser = new JComboBox<>(colors);
//定義一個列表選擇框??????????????
//JList(Object[] listData)
//構造一個 JList,使其顯示指定陣列中的元素。
JList<String> colorList = new JList<>(colors);
//定義一個8行20列的多行文字框
JTextArea ta = new JTextArea(8,20);
//定義一個40列的單行文字框
JTextField name = new JTextField(40);
JMenuBar mb = new JMenuBar();
JMenu file = new JMenu("檔案");
//JMenu(String s)
//構造一個新 JMenu,用提供的字串作為其文字。
JMenu edit = new JMenu("編輯");
Icon newIcon = new ImageIcon("ico/new.png");
//JMenuItem(String text, Icon icon)
//建立帶有指定文字和圖示的 JMenuItem。
JMenuItem newItem = new JMenuItem("新建",newIcon);
Icon saveIcon = new ImageIcon("ico/new.png");
JMenuItem saveItem = new JMenuItem("儲存",saveIcon);
Icon exitIcon = new ImageIcon("ico/exit.png");
JMenuItem exitItem = new JMenuItem("退出",exitIcon);
JCheckBoxMenuItem autoWrap = new JCheckBoxMenuItem("自動換行");
JMenuItem copyItem = new JMenuItem("複製",new ImageIcon("ico/copy.png"));
JMenuItem pasteItem = new JMenuItem("貼上",new ImageIcon("ico/paste.png"));
JMenu format = new JMenu("格式");
JMenuItem commentItem = new JMenuItem("註釋");
JMenuItem cancelItem = new JMenuItem("取消註釋");
//定義一個右鍵選單,用於設定程式的外觀風格
JPopupMenu pop = new JPopupMenu();
ButtonGroup flavorGroup = new ButtonGroup();
//建立5個單選按鈕,用於設定程式的外觀風格
JRadioButtonMenuItem metalItem = new JRadioButtonMenuItem("Metal風格",true);
JRadioButtonMenuItem nimbusItem = new JRadioButtonMenuItem("Nimbus風格");
JRadioButtonMenuItem windowsItem = new JRadioButtonMenuItem("windows風格");
JRadioButtonMenuItem motifyItem = new JRadioButtonMenuItem("motifyItem風格");
JRadioButtonMenuItem classicItem = new JRadioButtonMenuItem("windows經典風格");
/*------------------下面是用於執行介面初始化的init方法-------------------------*/
public void init()
{
//建立一個裝載了文字框、按鈕的JPanel
JPanel bottom = new JPanel();
bottom.add(name);
bottom.add(ok);
f.add(bottom,BorderLayout.SOUTH);//用BorderLayout佈局管理器,放在最底層
//建立一個裝載了下拉選擇框、三個JCheckBox的JPanel
JPanel checkPanel = new JPanel();
checkPanel.add(colorChooser);
////既要載入在一個ButtonGroup中,也要載入在checkPanel中
//若去掉bg.add(male);bg.add(female); 則能選兩個性別
//若去掉 checkPanel.add(male);checkPanel.add(female); 則兩個性別RadioButton消失
bg.add(male);
bg.add(female);
checkPanel.add(male);
checkPanel.add(female);
checkPanel.add(married);
//建立一個垂直排列的元件的Box,盛裝多行文字域JPanel
Box topLeft = Box.createVerticalBox();//建立一個從上到下顯示的Box
//使用JScrollPance作為普通元件的JViewPort
JScrollPane taJsp = new JScrollPane(ta);
topLeft.add(taJsp);
topLeft.add(checkPanel);
//建立一個水平排列元件的Box,盛裝topLeft、colorList
Box top = Box.createHorizontalBox();
top.add(topLeft);
top.add(colorList);
//將Top Box容器新增到視窗的中間
f.add(top);
//----------下面開始組合菜單,並未選單新增監聽器---------------------
//為newItem設定快捷鍵,設定快捷鍵時要使用大寫字母
newItem.setAccelerator(KeyStroke.getKeyStroke('N',InputEvent.CTRL_MASK));
newItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
ta.append("使用者單擊了“新建”選單\n");
}
});
//為file選單新增選單項
file.add(newItem);
file.add(saveItem);
file.add(exitItem);
//為exit選單新增選單項
edit.add(autoWrap);
//使用addSeparator方法新增選單分隔線
edit.addSeparator();
edit.add(copyItem);
edit.add(pasteItem);
//為commentItem元件新增提示資訊
commentItem.setToolTipText("將從程式程式碼註釋起來!");
//為format選單新增選單項
format.add(commentItem);
format.add(cancelItem);
//使用新增new JMenuItem(“-”)的方式不能新增選單分隔符
edit.add(new JMenuItem("-"));
//將format選單組合到eidt選單中,從而形成二級選單
edit.add(format);
//將file、edit選單新增到mb選單條中
mb.add(file);
mb.add(edit);
//為f視窗設定選單條
f.setJMenuBar(mb);
//------下面開始組合右鍵選單,並安裝右鍵選單-----------------
flavorGroup.add(metalItem);
flavorGroup.add(nimbusItem);
flavorGroup.add(windowsItem);
flavorGroup.add(classicItem);
flavorGroup.add(motifyItem);
pop.add(metalItem);
pop.add(nimbusItem);
pop.add(windowsItem);
pop.add(classicItem);
pop.add(motifyItem);
//為5個風格選單建立事件監聽器
ActionListener flavorListener = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
try{
switch(e.getActionCommand())
{
case "Metal風格":
changeFlavor(1);
break;
case "Nimbus風格":
changeFlavor(2);
break;
case "Windows風格":
changeFlavor(3);
break;
case "Windows經典風格":
changeFlavor(4);
break;
case "Motif風格":
changeFlavor(5);
break;
}
}
catch(Exception ee)
{
ee.printStackTrace();
}
}
};
//為5個風格選單項新增事件監聽器
metalItem.addActionListener(flavorListener);
nimbusItem.addActionListener(flavorListener);
windowsItem.addActionListener(flavorListener);
classicItem.addActionListener(flavorListener);
motifyItem.addActionListener(flavorListener);
//呼叫該方法即可設定右鍵選單,無須使用事件機制;
ta.setComponentPopupMenu(pop);
//設定關閉視窗時,退出程式
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setVisible(true);
//方法內部不再巢狀方法,而是呼叫語句了
}
private void changeFlavor(int flavor) throws Exception
{
switch(flavor)
{
//設定Metal風格
case 1:
UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
break;
case 2:
UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimusLoolAndFeel");
break;
case 3:
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
break;
case 4:
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel");
break;
case 5:
UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
break;
}
//更新f視窗內頂級容器以及內部所有元件的UI
SwingUtilities.updateComponentTreeUI(f.getContentPane());
//更新mb選單條以及內部所有元件的UI
SwingUtilities.updateComponentTreeUI(mb);
//更新pop右鍵選單以及內部所有元件的UI
SwingUtilities.updateComponentTreeUI(pop);
}
public static void main(String[] args)
{
new SwingComponent().init();
}
}
/*
1、JRadioButton:實現一個單選按鈕,此按鈕項可被選擇或取消選擇,並可為使用者顯示其狀態。與 ButtonGroup 物件配合使用可建立一組按鈕,一次只能選擇其中的一個按鈕。(建立一個 ButtonGroup 物件並用其 add 方法將 JRadioButton 物件包含在此組中。)
2、ButtonGroup: 此類用於為一組按鈕建立一個多斥(multiple-exclusion)作用域。使用相同的 ButtonGroup 物件建立一組按鈕意味著“開啟”其中一個按鈕時,將關閉組中的其他所有按鈕。
3、JComboBox:將按鈕或可編輯欄位與下拉列表組合的元件。使用者可以從下拉列表中選擇值,下拉列表在使用者請求時顯示。如果使組合框處於可編輯狀態,則組合框將包括使用者可在其中鍵入值的可編輯欄位。
4、JMenuBar:選單欄的實現。將 JMenu 物件新增到選單欄以構造選單。當用戶選擇 JMenu 物件時,就會顯示其關聯的 JPopupMenu,允許使用者選擇其上的某一個 JMenuItem。
5、JMenuItem:選單中的項的實現。選單項本質上是位於列表中的按鈕。當用戶選擇“按鈕”時,則執行與選單項關聯的操作。JPopupMenu 中包含的 JMenuItem 正好執行該功能。
6、JCheckBoxMenuItem:可以被選定或取消選定的選單項。如果被選定,選單項的旁邊通常會出現一個複選標記。如果未被選定或被取消選定,選單項的旁邊就沒有複選標記。像常規選單項一樣,複選框選單項可以有與之關聯的文字或圖示,或者二者兼而有之。舉例:自動換行,如果被選中,後面會出現 鉤
7、JPopupMenu:彈出選單的實現,彈出選單是一個可彈出並顯示一系列選項的小視窗。JPopupMenu 用於使用者在選單欄上選擇項時顯示的選單。它還用於當用戶選擇選單項並激活它時顯示的“右拉式 (pull-right)”選單。最後,JPopupMenu 還可以在想讓選單顯示的任何其他位置使用。例如,當用戶在指定區域中右擊時。
8、JRadioButtonMenutItem:一個單選按鈕選單項的實現。JRadioButtonMenuItem 是屬於一組選單項中的一個選單項,該組中只能選擇一個項。被選擇的項顯示其選擇狀態。選擇此項的同時,其他任何以前被選擇的項都切換到未選擇狀態。要控制一組單選按鈕選單項的選擇狀態,請使用 ButtonGroup 物件。
9、JScrollPane:提供輕量級元件的 scrollable 檢視。JScrollPane 管理視口、可選的垂直和水平滾動條以及可選的行和列標題視口。
10、JMenu被新增到JMenuBar中,形成選單,被新增在JMenu中,形成二級選單;
11、Swing選單不允許使用add(new JMenutItem(“-”))的方式來新增選單分隔符,只能使用addSeparator()方法來新增選單分隔符
*/