Swing 經常使用的9種組件

 1.標籤 (JLabel)php

  標籤 (JLabel)一般是用來標識另一個組件的含義。以在標籤上顯示文字、圖象或是文字圖象的組合。html

  JLabel labText=new JLabel(「文本標籤」);java

  labText.setText("文本標籤");設計模式

  2.密碼框 (JPasswordField)數組

  密碼框其實是一種特殊類型的文本框,用戶能夠向其中輸入文本並加以編輯。和文本框不一樣的是,向密碼框中輸入文本時,顯示的不是實際輸入的文本,而是特殊的回顯字符(一般是'*')。可使用setEchoChar(char c)方法來改變缺省的回顯字符。app

  須要注意的是,取得文本框中的文本時,使用方法getText(),該方法返回的是一個String類型的對象;而要取得密碼框中的文本,使用方法getPassword(),該方法返回的是一個char數組。框架

  例如,建立了一個密碼框:ide

  JPasswordField txtPwd=new JPasswrodField(20);函數

  設定該密碼框的回顯字符爲'#':工具

  txtPwd.setEchoChar('#');

  取得密碼框中的內容:

  char []pwd=txtPwd.getPassword();

  也能夠方便地將char數組轉化爲String類型的對象:

  String pwdStr=new String(txtP.getPassword());

  3.菜單

  (1)菜單也是一種經常使用的GUI組件,菜單採用的是一種層次結構,最頂層是菜單欄(JMenuBar);在菜單欄中能夠添加若干個菜單(JMenu),每一個菜單中又能夠添加若干個菜單選項(JMenuItem)、分隔線(Separator)或是菜單(稱之爲子菜單)。

  (2)構建應用程序的菜單時,先建立一個菜單欄:

  JMemuBar menuBar=new JMenuBar();

  一般使用框架的setJMenuBar(JMenuBar aMenuBar)方法將菜單欄置於框架中:

  frame.setJMenuBar(menuBar);

  隨後,建立所須要的各菜單並逐個添加到菜單欄中,例如:

  JMenu menuDBAccount=new JMenu("電錶出賬(C)");

  ...

  menuBar.add(menuDBAccount);

  最後,向各個菜單中添加菜單選項、分隔線或是子菜單,如圖所示的系統設置菜單爲例:

  //建立菜單選項或是子菜單

  JMenuItem sysConfigItem=new JMenuItem("參數設置(S)...");

  JMenu viewMenu=new JMenu("外觀設置");

  JRadioButtonMenuItem metalItem=new JRadioButtonMenuItem("金屬外觀");

  JRadioButtonMenuItem classicItem=new JRadioButtonMenuItem("傳統外觀");

  JRadioButtonMenuItem modernItem=new JRadioButtonMenuItem("現代外觀");

  JMenuItem cascadeItem=new JMenuItem("層疊窗口(C)");

  JMenuItem iconifyItem=new JMenuItem("排列圖標(I)");

  //將三個單選按鈕添加到一個按鈕組

  ButtonGroup group=new ButtonGroup();

  group.add(metalItem);

  group.add(classicItem);

  group.add(modernItem);

  //構建子菜單

  viewMenu.add(metalItem);

  viewMenu.add(classicItem);

  viewMenu.add(modernItem);

  //添加到系統設置菜單

  menuSysConfig.add(sysConfigItem); //添加菜單選項

  menuSysConfig.add(viewMenu); //添加子菜單

  menuSysConfig.add(cascadeItem); //添加菜單選項

  menuSysConfig.addSeaparator(); //添加分隔線

  menuSysConfig.add(iconifyItem); //添加菜單選項

  (3)一般的菜單選項是JMenuItem,也可使用複選框或是單選按鈕類型的菜單選項,分別是JCheckBoxMenuItem和JRadioButtonMenuItem。和JRadioButton同樣,使用JRadioButtonMenuItem時,須要將它們添加到同一個按鈕組中。

  (4)當點擊一個菜單選項時,會生成一個動做事件(ActionEvent) 。爲菜單選項添加事件偵聽器就能夠偵聽其動做事件,例如:sysConfigItem.addActionListener(aListener);

  (5)爲一個菜單或是菜單選項設置快捷鍵:

  menuSysConfig.setMnemonic('X');

  sysConfigItem.setMnemonic('S');

  4.工具條

  (1)有些菜單選項的使用頻率較高,每次使用都要打開菜單,效率較低。爲此,能夠在工具條(JToolBar)中提供與這些菜單選項相對應快捷按鈕,以提升用戶的效率。工具條中一般是一些帶有圖標的按鈕,固然也能夠是其它類型的GUI組件,例如組合框等等。

  (2)一般,工具條所提供的操做是菜單所能提供操做的一個子集,目的是可以快速訪問那些使用頻率高的操做。

  (3)工具條一般被置於佈局爲BorderLayout的容器中。工具條被置於佈局爲BorderLayout的一個面板中。工具條還有一個特色:能夠被拖動到所在容器其它邊界,甚至脫離其所在的容器。

  (4)生成一個工具條對象,可使用語句:

  JToolBar toolbar=new JToolBar();

  (5)還能夠在生成工具條時,指明工具條的標題。這樣,當工具條脫離所在容器時,能夠在本身的標題欄顯示標題:

  JToolBar toolbar=new JToolBar("顏色工具條");

  (6)向工具條中添加組件,使用add方法:

  toolbar.add(btnBlue);

  toolbar.add(btnYellow);

  (7)缺省狀況下,組件是按照水平方式逐個添加入工具條的,也能夠在生成工具條時指明以垂直方式來添加組件:

  JToolBar toolbar=new JToolBar(SwingConstants.VERTICAL);

  (8)若是但願工具條不能移動,可使用setFloatable方法來設置:

  toolbar.setFloatable(false);

  (9)當工具條中的按鈕上只顯示圖標時,用戶可能不能確切知道各個按鈕的具體含義。可使用工具提示解決這個問題:

  btnYellow.setToolTipText("面板置爲黃色");

  5.對話框

  (1)對話框是用戶和應用程序進行交互(對話)的一個橋樑:對話框能夠用於收集用戶的輸入數據傳遞給應用程序,或是顯示應用程序的運行信息給用戶。

  (2)對話框分爲模式(modal)和非模式兩種。模式對話框處於可見狀態時,用戶將不能與應用程序的其它窗口進行交互,而非模式對話框則沒有此限制。

  (3)Java中提供了一個類JOptionPane用於建立簡單的模式對話框,若是但願建立非模式對話框或是自定義對話框可使用JDialog。

  (4)JOptionPane類中提供了4種靜態方法,用以顯示4種經常使用的對話框:

  showMessageDialog 消息對話框

  showInputDialog 輸入對話框

  showConfirmDialog 確認對話框

  showOptionDialog 選項對話框

  (5)JOptionPane 對話框主要由以下幾個部分構成:圖標、消息以及按鈕。

  (6)類JOptionPane中定義了以下五個常量:

  JOptionPane.QUESTION_MESSAGE

  JOptionPane.INFORMATION_MESSAGE

  JOptionPane.WARNING_MESSAGE

  JOptionPane.ERROR_MESSAGE

  JOptionPane.PLAIN_MESSAGE   //不使用圖標

  前四個常量對應着四個圖標,第五個常量表示不使用圖標。開發人員可使用這些常量來指定對話框中顯示的圖標。固然,對話框也提供了方法使得開發人員可使用本身的圖標。

  (7)JOptionPane對話框不只僅能夠顯示字符串類型的消息,還能夠顯示其它類型的消息。例如,能夠是一副圖片、還能夠是一個GUI組件。更普遍地說,這裏的消息能夠是任何類型的對象或是對象數組。在書上的例子中,你能夠看到不一樣類型消息的應用。

  (8)JOptionPane對話框底部的按鈕取決於對話框類型和選項類型。例如,對於確認對話框,可使用以下的四種選項類型之一:

  DEFAULT_ OPTION

  YES_NO_OPTION

  YES_NO_CANCEL_OPTION

  OK_CANCEL_OPTION

  6.表格

  (1)表格(JTable)也是一種經常使用的GUI組件,經常使用來顯示大量的數據。

  (2)表格是模型-視圖-控制器設計模式的一個典型應用。表格自己並不存儲所顯示的數據,數據其實是存儲在表模型中的,表格只是表模型的一種視圖.

  (3)JTable提供了以下兩種構建器,能夠方便地建立簡單表格:

  JTable(Object[][] data, Object[] columnNames)

  JTable(Vector data, Vector columnNames)

  (4)採用上述方法能夠發現存在很多缺點:例如,每一列的寬度都是同樣的;未能正確顯示日期;數值未能按照咱們的但願保留到小數點後面兩位,並靠右顯示;表格中的數據必須預先存放在一個數組中或是向量(Vector)中等等。在一個真正的應用程序中,使用這樣的表格是不能知足實際應用的要求的。

  (5)在缺省狀況下,表格中每列是等寬的,而且調整某列的寬度時,其它列的寬度也會相應自動調整。可使用下面的語句關閉列寬自動調整特性:

  table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

  以後,要設定某列的寬度,首先依據該列的列名取得列對象,以設定第一列寬度爲例:

  TableColumn col=table.getColumn(columnNames[0]);

  而後調用setPreferredWidth方法設定該列寬度:

  col.setPreferredWidth(200);

  (6)前面已經提到,表格有一個對應的表模型,數據是存儲在表模型中,表格是表模型的視圖。表格在創建視圖時總須要自動調用表模型中的一些方法,這些方法的返回值決定了最終的視圖。部分常須要用到的方法的名稱和含義以下:

  public int getRowCount();//取得行數

  public int getColumnCount();//取得列數

  public Object getValueAt(int row, int column); //取得指定單元格的數據

  //指定單元格是否容許編輯

  public boolean isCellEditable(int row, int column);

  public String getColumnName(int column); //取得指定列的列名

  public Class getColumnClass(int column);

  缺省表模型DefaultTableModel提供了上述方法的缺省實現。例如,DefaultTableModel中的isCellEditable方法老是返回true,表示全部的單元格都容許編輯; getColumnClass方法老是返回Object.class.

  (7)可使用DefaultTableModel建立一個表模型對象,而後再使用表模型建立表格,例如:

  DefaultTableModel model=new DefaultTableModel(0,5);//0行5列的表模型

  JTable table=new JTable(model);

  而後,可使用model的addRow、removeRow方法向表模型中添加或是刪除數據,對錶模型增刪數據的結果會自動反映到表格視圖上來。

  可是,一般狀況下,咱們並不直接使用DefaultTableModel。更多的情形是繼承DefaultTableModel類,並覆蓋其中部分方法以達到特殊的要求.

  7.JScrollbar 滾動條

  (1)構造函數

  mySlider = new JScrollbar(JScrollbar.HORIZONTAL ,

  0 , 1 , 0 , Integer.MAX_VALUE);

  滾動條方向

  滑塊初始位置

  滑塊尺寸

  滾動槽最小值

  滾動槽最大值

  (2)方法

  int getValue()   返回滑塊當前位置

  setUnitIncrement(1); 設置單位增量(點按兩端箭頭)

  setBlockIncrement(50); 設置塊增量(點按滾動槽)