程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java Swing用戶界面設計:序

Java Swing用戶界面設計:序

編輯:關於JAVA

Swing是什麼

Swing屬於JFC(Java Foundation Classes)的一部分。JFC包含了AWT,Swing,輔助功能API,Java2D,拖放。Swing的出現是為了解決AWT(Abastract Window Toolkit)的移植性和提供更多的企業級應用程序所需要的功能。Swing建立在核心AWT庫上,JDK1.2以及更高的版本已經包含了Swing庫。

Swing內部采用了MVC體系結構(modle-view-controller)。modle負責存放Swing組件的狀態(數據),controller負責處理事件,view負責繪制圖形。Swing使用了簡化的MVC變體,controller和vIEw合並稱為UI代理。這種設計使得一個modle可以對應多個UI代理,因此非常靈活。

第一個簡單的Swing組件

我的這個Swing組件非常簡單,只是一個toolbar。參考下面的實現代碼:

  1. package test1;
  2. import Java.awt.*;
  3. import Java.awt.event.*;
  4. import Javax.swing.*;
  5. /**
  6. *
  7. * @author root
  8. */
  9. public class ToolbarFrame extends Frame{
  10. /** Creates a new instance of ToolbarFrame */
  11. public ToolbarFrame() {
  12. super("My Toolbar(Swing)");//通過調用基類Frame的構造函數初始化標題欄文字
  13. setSize(450,250);
  14. addWindowListener(new WindowAdapter()
  15. {
  16. public void windowClosing(WindowEvent e)
  17. {
  18. System.exit(0);
  19. }
  20. });
  21. }
  22. }

注意紅色代碼是創建了一個內部類,該類是WindowAdapter的子類,並且重寫了虛函數windowClosing。然後將該類的引用交由TollbarFrame管理,通過方法addWindowListener。

如果沒有這步,我們的toolbar可以顯示,但是用不會被關閉。

現在創建調用代碼:

  1. package test1;
  2. /**
  3. *
  4. * @author root
  5. */
  6. public class Main {
  7. /** Creates a new instance of Main */
  8. public Main() {
  9. }
  10. /**
  11. * @param args the command line arguments
  12. */
  13. public static void main(String[] args) {
  14. ToolbarFrame toolbar=new ToolbarFrame();
  15. toolbar.setVisible(true);
  16. }
  17. }

調用代碼只有兩行,非常簡單。現在我們來看看運行的效果,見下圖:

由於沒有設置窗口的起始位置,所以默認停留在屏幕左上方。

既然我們使用Net Beans來開發程序,Net Beans向導也可以為我做同樣的事情。通過使用newJFrame Form來創建一個ToolbarFrame2類。我們獲得下面的代碼:

  1. package test1;
  2. /**
  3. *
  4. * @authorroot
  5. */
  6. public class ToolbarFrame2 extends Javax.swing.JFrame {
  7. /** Creates new form ToolbarFrame2 */
  8. public ToolbarFrame2() {
  9. initComponents();
  10. }
  11. /** This method is called from within the constructor to
  12. * initialize the form.
  13. * WARNING: Do NOT modify this code. The content of this method is
  14. * always regenerated by the Form Editor.
  15. */
  16. // <editor-fold defaultstate="collapsed" desc=" Generated Code ">
  17. private void initComponents() {
  18. setDefaultCloSEOperation(Javax.swing.WindowConstants.EXIT_ON_CLOSE);
  19. Javax.swing.GroupLayout layout = new Javax.swing.GroupLayout(getContentPane());
  20. getContentPane().setLayout(layout);
  21. layout.setHorizontalGroup(
  22. layout.createParallelGroup(Javax.swing.GroupLayout.Alignment.LEADING)
  23. .addGap(0, 400, Short.MAX_VALUE)
  24. );
  25. layout.setVerticalGroup(
  26. layout.createParallelGroup(Javax.swing.GroupLayout.Alignment.LEADING)
  27. .addGap(0, 300, Short.MAX_VALUE)
  28. );
  29. pack();
  30. }// </editor-fold>
  31. /**
  32. * @param args the command line arguments
  33. */
  34. public static void main(String args[]) {
  35. Java.awt.EventQueue.invokeLater(new Runnable() {
  36. public void run() {
  37. new ToolbarFrame2().setVisible(true);
  38. }
  39. });
  40. }

我們獲得了沒有標題的ToolbarFrame2,並且已經可以響應關閉按鈕。

注意,我們的ToolbarFrame2類從JFrame派生,而不是Frame。Frame是AWT的類,而JFrame是Swing提供的類。我們應該盡量使用Swing類。

private void initComponents() 方法的實現涉及到 GroupLayout類等細節,後面會逐漸介紹。關於JFrame類的文檔請參考下面的鏈接

http://Java.sun.com/docs/books/tutorial/uiswing/components/frame.Html

setDefaultCloSEOperation(Javax.swing.WindowConstants.EXIT_ON_CLOSE)中,使用了類WindowConstants的公有靜態整形常量,這些常量分別代表窗口關閉時的行為,具體可以參考

http://Java.sun.com/docs/books/tutorial/uiswing/components/frame.Html#windowevents

我們可以通過調用JFrame的成員函數setTitle來設置標題。

添加控件

在Net Beans IDE中,我們可以使用編輯器進行可視化編輯(通過Design視圖),比如添加一個JButton。向導將為我們定義如下變量:

  1. // Variables declaration - do not modify
  2. private Javax.swing.JButton jButton1;
  3. // End of variables declaration

並且在private void initComponents() 方法中增加下面一行:

  1. jButton1 = new Javax.swing.JButton();

事件處理

所有的Swing類以及派生類都擁有方法public void addActionListener(ActionListener 。l)

該方法可以添加事件的監聽者,當有事件發生,Swing組件就會調用這些監聽者的public void actionPerformed(Java.awt.event.ActionEvent evt)方法。形成事件回調。我們可以利用Net Beans為我們創建這些注冊的代碼。右鍵點擊JButton,然後選擇events->action->actionPerformed,Net Beans將創建私有方法actionPerformed,然後在initComponents方法中增加下面的代碼:

  1. jButton1.addActionListener(new Java.awt.event.ActionListener() {
  2. public void actionPerformed(Java.awt.event.ActionEvent evt) {
  3. jButton1ActionPerformed(evt);
  4. }
  5. });

我們只需要將 我們的處理邏輯寫到jButton1ActionPerformed私有方法中就可以響應事件了。

如果我們有兩個JButton控件,Net Beans將為我們創建兩個私有方法,並且創建兩個繼承自ActionListener的內部類,確保不會互相干擾。請看下面的實例代碼:

  1. private void initComponents() {
  2. jButton1 = new Javax.swing.JButton();
  3. jButton2 = new Javax.swing.JButton();
  4. setDefaultCloSEOperation(Javax.swing.WindowConstants.EXIT_ON_CLOSE);
  5. jButton1.setText("Button1");
  6. jButton1.addActionListener(new Java.awt.event.ActionListener() {
  7. public void actionPerformed(Java.awt.event.ActionEvent evt) {
  8. jButton1ActionPerformed(evt);
  9. }
  10. });
  11. jButton2.setText("Button2");
  12. jButton2.addActionListener(new Java.awt.event.ActionListener() {
  13. public void actionPerformed(Java.awt.event.ActionEvent evt) {
  14. jButton2ActionPerformed(evt);
  15. }
  16. });

ActionEvent對象能夠提供很多的信息,請參考文檔:http://java.sun.com/javase/6/docs/api/Java/awt/event/ActionEvent.Html

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved