數組的應用范圍非常廣泛,靈活運用可以提高程序的開發效率,減少重復代碼。例如,本實例通過按鈕數組來管理界面中的所有按鈕控件,從而使用最少的代碼實現了模擬的計算器界面。實例運行效果如圖
本實例的關鍵點在于GridLayout布局管理器的應用,通過它可以自動完成控件的布局與大小控制;否則,還要單獨創建控制每個控件位置與大小的代碼,其代碼復雜度可想而知。通過GridLayout布局管理器,只需要指定布局的行列數量即可。下面介紹GUI如何使用GridLayout布局管理器。
q 創建指定行列數量的布局管理器
可以在GridLayout類的構造方法中傳遞兩個int類型的參數,分別指定布局的行數與列數,其方法聲明如下:
public GridLayout(int rows, int cols)
參數說明
? rows:布局的行數。
cols:布局的列數。
q 設置容器的布局管理器
創建容器布局管理器后,可以把它添加到某個容器的layout屬性中,這需要調用容器的設置布局管理器的方法來實現,其語法聲明如下:
public void setLayout(LayoutManager mgr)
參數說明
mgr:布局管理器對象。
在項目中創建ButtonArrayExample窗體類。在窗體中添加一個文本框控件用于模擬計算器的液晶屏,然后在構造方法中設置窗體標題、布局管理器,并創建JButton控件的二維數組,其中每個數組元素都初始化為一個按鈕控件,同時再聲明一個按鈕名稱的字符串數組,這兩個數組共同初始化界面中的所有按鈕控件。代碼如下:
import java.awt.Container;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.JTextField;
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.SwingConstants;
public class ButtonArrayExample extends JFrame { // 繼承窗體類JFrame
/**
*
*/
PRivate static final long serialVersionUID = 6626440733001287873L;
private JTextField textField;
public static void main(String args[]) {
try {
UIManager
.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
} catch (Throwable e) {
e.printStackTrace();
}
ButtonArrayExample frame = new ButtonArrayExample();
frame.setVisible(true); // 設置窗體可見,默認為不可見
}
public ButtonArrayExample() {
super(); // 繼承父類的構造方法
BorderLayout borderLayout = (BorderLayout) getContentPane().getLayout();
borderLayout.setHgap(20);
borderLayout.setVgap(10);
setTitle("按鈕數組實現計算器界面 "); //設置窗體的標題
setBounds(100, 100, 290, 282); // 設置窗體的顯示位置及大小
setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE); // 設置窗體關閉按鈕的動作為退出
textField = new JTextField();
textField.setHorizontalAlignment(SwingConstants.TRAILING);
textField.setPreferredSize(new Dimension(12, 50));
getContentPane().add(textField, BorderLayout.NORTH);
textField.setColumns(10);
final GridLayout gridLayout = new GridLayout(4, 0); // 創建網格布局管理器對象
gridLayout.setHgap(5); // 設置組件的水平間距
gridLayout.setVgap(5); // 設置組件的垂直間距
JPanel panel = new JPanel(); // 獲得容器對象
panel.setLayout(gridLayout); // 設置容器采用網格布局管理器
getContentPane().add(panel, BorderLayout.CENTER);
String[][] names = { { "1", "2", "3", "+" }, { "4", "5", "6", "-" },
{ "7", "8", "9", "×" }, { ".", "0", "=", "÷" } };
JButton[][] buttons = new JButton[4][4];
for (int row = 0; row < names.length; row++) {
for (int col = 0; col < names.length; col++) {
buttons[row][col] = new JButton(names[row][col]); // 創建按鈕對象
panel.add(buttons[row][col]); // 將按鈕添加到面板中
}
}
}
}
心法領悟:用數組管理重復類型的數據。
像本實例的界面設計一樣,程序開發中有很多重復類型的數據,在界面設計器中可以清晰地看出重復性的按鈕控件。
新聞熱點
疑難解答