java介面編程(5),java介面編程
本文是自己學習所做筆記,歡迎轉載,但請註明出處:http://blog.csdn.net/jesson20121020
瞭解了布局管理器和Swing事件模型,那麼剩下的就是Swing 的各個組件了,下面就開始逐個學習Swing的各個組件的用法及功能,本節先來看最常用的按鈕和按鈕組。
1. 按鈕
Swing提供了許多類型的按鈕,有普通的按鈕,複選框,單選等按鈕,甚至功能表項目,所有的這些按鈕都是從AbstractButton繼承而來。如的繼承關係:
可以看出,JButton,JMenuItem,JToggleButton都是AbstractButton的子類,我們再繼續往下看它們的子類:
這裡就列出了所有的按鈕,下面就示範各個按鈕的用法,這裡不再實現監聽器,可以根據需要自己添加。
public class Buttons extends JFrame {private JButton jb = new JButton("按鈕");private BasicArrowButton up = new BasicArrowButton(BasicArrowButton.NORTH),down = new BasicArrowButton(BasicArrowButton.SOUTH),right = new BasicArrowButton(BasicArrowButton.EAST),center = new BasicArrowButton(BasicArrowButton.CENTER),left = new BasicArrowButton(BasicArrowButton.WEST);public Buttons() {// TODO Auto-generated constructor stubsetVisible(true);setSize(500,300);setLayout(new FlowLayout());add(jb);add(new JToggleButton("JToggleButton"));add(new JCheckBox("JCheckBox"));add(new JRadioButton("JRadioButton"));JPanel jp = new JPanel();jp.setBorder(new TitledBorder("BasicArrowButton"));jp.add(up);jp.add(down);jp.add(left);jp.add(right);jp.add(center);add(jp);JPanel jp1 = new JPanel();jp1.setBorder(new TitledBorder("JCheckBoxMenuItem"));jp1.add(new JCheckBoxMenuItem("JCheckBoxMenuItem1"));jp1.add(new JCheckBoxMenuItem("JCheckBoxMenuItem2"));add(jp1);JPanel jp2 = new JPanel();jp2.setBorder(new TitledBorder("JRadioButtonMenuItem"));jp2.add(new JRadioButtonMenuItem("JRadioButtonMenuItem1"));jp2.add(new JRadioButtonMenuItem("JRadioButtonMenuItem2"));add(jp2);JPanel jp3 = new JPanel();jp3.setBorder(new TitledBorder("JMenu"));jp3.add(new JMenu("JMenu1"));jp3.add(new JMenu("JMenu2"));add(jp3);}/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubnew Buttons();}} 運行,如效果:
這裡僅僅是將這些按鈕顯示在表單上,並沒有給各個組件添加事件監聽器。
2.按鈕組
要想讓選項按鈕表現出某種"排他"行為,必須把它們加入到一個"按鈕組(ButtonGroup)"中,其實,任何AbstarctButton對象都可以加入到按鈕組中。
為了避免重複的代碼,下面的例子使用反射功能來產生幾組不同的類型的按鈕。
public class ButtonGroups extends JFrame {private static String[] ids = {"Mon","Tue","Wed","Thu","Fri","Sat","Sun"};private JPanel makePanel(Class<? extends AbstractButton> kind,String[] ids){ButtonGroup bg = new ButtonGroup();JPanel jp = new JPanel();String title = kind.getName();title = title.substring(title.lastIndexOf('.')+1);jp.setBorder(new TitledBorder(title));for(String id : ids){AbstractButton ab = new JButton("failed");try {Constructor ctor = kind.getConstructor(String.class);ab = (AbstractButton)ctor.newInstance(id);} catch (Exception e) {System.out.println("cat't create "+kind);}bg.add(ab);jp.add(ab);}return jp;}public ButtonGroups() {// TODO Auto-generated constructor stubsetLayout(new FlowLayout());setSize(500,300);setVisible(true);add(makePanel(JButton.class, ids));add(makePanel(JToggleButton.class,ids));add(makePanel(JCheckBox.class,ids));add(makePanel(JRadioButton.class,ids));}/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubnew ButtonGroups();}} 其中,makePanel()方法,是用來建立一個按鈕組和一個JPanel,此方法的第二個參數是一個字串資料,針對其中每個字串,將建立一個由第一個參數所代表的按鈕執行個體,然後將此按鈕加入到JPanel中。
運行程式,效果如下:
邊框的標題是從類的名稱中得到的,並且去掉了其中的首碼,直接取出類名。getConstructor()方法產生一個Constructor對象,這個構造器接受“傳遞給getConstructor()”的Class列表裡面指定的類型“所組成的數組作為碼數,然後,只需要調用newInstance(),並且把包含實際參數列表傳遞給它,在本執行個體中即ids資料的字串。
要想通過按鈕得到“排他”行為,就得先建立一個按鈕組,然後把你希望具有的“排他”行為的按鈕加入到這個按鈕組中。運行程式,可以發現除了JButton以外,其他按鈕都具有這種“排他”的行為。