1. 程式人生 > >達拉草201771010105《面向物件程式設計(java)》第十四周學習總結

達拉草201771010105《面向物件程式設計(java)》第十四周學習總結

達拉草201771010105《面向物件程式設計(java)》第十四周學習總結

第一部分:理論知識

佈局管理器:

佈局管理器是一組類。 實現java.awt.LayoutManager介面 ,決定容器中元件的位置和大小 。

Java.awt包中定義了5種佈局管理類,每一種布 局管理類對應一種佈局策略。 每個容器都有與之相關的預設佈局管理器。 當一個容器選定一種佈局策略時,它應該建立該 策略對應的佈局管理器物件,並將此物件設定為 自己的佈局管理器。

五種佈局管理器:

(1)FlowLayout:流佈局(Applet和Panel的預設 佈局管理器)

(2)BorderLayout:邊框佈局(Window、Frame和 Dialog的預設佈局管理器)

(3)GridLayout:網格佈局

(4)GridBagLayout:網格組佈局

(5)CardLayout:卡片佈局

每個容器物件在沒有設定新的佈局前,在容器中 新增元件都按照該容器的預設佈局排列。

通過setLayout()方法為容器設定新的佈局。 格式: 容器元件名.setLayout(佈局類物件名) 例如: pane1.setLayout(newGridLayout(4,4);

1.FlowLayout(流佈局管理器):

用於對元件逐行地定位,每完成一行,一個新行便又開 始。與其他佈局管理器不同的是,流佈局管理器不限制 它所管理元件的大小,允許它們有自己的最佳大小。

建構函式有:

–FlowLayout():生成一個預設的流式佈局物件

–FlowLayout(intalign):設定每一行元件的對齊方式 (FlowLayout.LEFT,FlowLayout.CENTER,FlowLayout.RIGHT)

–FlowLayout(intalign,inthgap,intvgap):可以設定元件間的 水平和垂直距離(預設時元件之間沒有空隙)

2.BorderLayout(邊框佈局管理器):

邊框佈局管理器是每個JFrame的內容窗格的預設 佈局管理器 。

BorderLayout的使用方法:

設定容器的佈局管理器為BorderLayout;

向容器中加入元件時,若使用兩個引數的add() 方法,第二個引數必須說明加入元件在容器中的 放置位置;

位置引數是BorderLayout類的常量:CENTER、 NORTH、SOUTH、EAST、WEST 例如: frame.add(component,BorderLayout.SOUTH);

3.GridLayout(網格佈局管理器):

網格佈局按行列排列所有的元件;

在網格佈局物件的構造器中,需要指定行數和列數: panel.setLayout(newGridLayout(6,10));

放置元件的每個單元具有相同的尺寸。

新增元件,從第一行和第一列開始,然後是第一行 的第二列。以此類推。 panel.add(newJButton("1")); panel.add(newJButton("2"));

GridLayout的使用方法:

GridLayout的建構函式如下: (1)GridLayout():生成一個單行單列的網格佈局 (2)GridLayout(introws,intcols):生成一個設定行數 和列數的網格佈局 (3)GridLayout(introws,intcolumns,inthgap,intvgap): 可以設定元件之間的水平和垂直間隔

由於網格中所有單元的寬度、高度是相同的,所 以Grid佈局管理器總是忽略元件的最佳大小。

將元件新增到網格中的命令次序決定元件佔有 的單元。單元的列數是從左到右填充,而行是從 上到下由行填充。 

實驗十四  Swing圖形介面元件

實驗時間 20178-11-29

1、實驗目的與要求

(1) 掌握GUI佈局管理器用法;

(2) 掌握各類Java Swing元件用途及常用API;

2、實驗內容和步驟

實驗1: 匯入第12章示例程式,測試程式並進行組內討論。

測試程式1

在elipse IDE中執行教材479頁程式12-1,結合執行結果理解程式;

掌握各種佈局管理器的用法;

理解GUI介面中事件處理技術的用途。

在佈局管理應用程式碼處添加註釋;

  1 package calculator;
  2 
  3 import java.awt.*;
  4 import java.awt.event.*;
  5 import javax.swing.*;
  6 
  7 /**
  8  * A panel with calculator buttons and a result display.
  9  */
 10 public class CalculatorPanel extends JPanel
 11 {
 12    private JButton display;
 13    private JPanel panel;
 14    private double result;
 15    private String lastCommand;
 16    private boolean start;
 17 
 18    public CalculatorPanel()
 19    {
 20       setLayout(new BorderLayout());
 21 
 22       result = 0;
 23       lastCommand = "=";
 24       start = true;
 25 
 26       // add the display
 27 
 28       display = new JButton("0");
 29       display.setEnabled(false);//始能屬性不起作用
 30       add(display, BorderLayout.NORTH);
 31 
 32       ActionListener insert = new InsertAction();//數字按鈕用insert物件
 33       ActionListener command = new CommandAction();
 34 
 35       // add the buttons in a 4 x 4 grid
 36 
 37       panel = new JPanel();//容器元件
 38       panel.setLayout(new GridLayout(4, 4));//定義容器的佈局管理器為4行4列的網格佈局管理器
 39 
 40       addButton("7", insert);
 41       addButton("8", insert);
 42       addButton("9", insert);
 43       addButton("/", command);
 44 
 45       addButton("4", insert);
 46       addButton("5", insert);
 47       addButton("6", insert);
 48       addButton("*", command);
 49 
 50       addButton("1", insert);
 51       addButton("2", insert);
 52       addButton("3", insert);
 53       addButton("-", command);
 54 
 55       addButton("0", insert);
 56       addButton(".", insert);
 57       addButton("=", command);
 58       addButton("+", command);
 59 
 60       add(panel, BorderLayout.CENTER);
 61    }
 62 
 63    /**
 64     * Adds a button to the center panel.
 65     * @param label the button label
 66     * @param listener the button listener
 67     */
 68    private void addButton(String label, ActionListener listener)
 69    {
 70       JButton button = new JButton(label);
 71       button.addActionListener(listener);
 72       panel.add(button);
 73    }
 74 
 75    /**
 76     * This action inserts the button action string to the end of the display text.
 77     */
 78    private class InsertAction implements ActionListener
 79    {
 80       public void actionPerformed(ActionEvent event)
 81       {
 82          String input = event.getActionCommand();//command儲存發出動作的按鈕的標籤
 83          if (start)
 84          {
 85             display.setText("");
 86             start = false;
 87          }
 88          display.setText(display.getText() + input);
 89       }
 90    }
 91 
 92    /**
 93     * This action executes the command that the button action string denotes.
 94     */
 95    private class CommandAction implements ActionListener
 96    {
 97       public void actionPerformed(ActionEvent event)
 98       {
 99          String command = event.getActionCommand();
100 
101          if (start)
102          {
103             if (command.equals("-"))
104             {
105                display.setText(command);
106                start = false;
107             }
108             else lastCommand = command;
109          }
110          else
111          {
112             calculate(Double.parseDouble(display.getText()));//calculate呼叫Double型別資料
113             lastCommand = command;
114             start = true;
115          }
116       }
117    }
118 
119    /**
120     * Carries out the pending calculation.
121     * @param x the value to be accumulated with the prior result.
122     */
123    public void calculate(double x)
124    {
125       if (lastCommand.equals("+")) result += x;
126       else if (lastCommand.equals("-")) result -= x;
127       else if (lastCommand.equals("*")) result *= x;
128       else if (lastCommand.equals("/")) result /= x;
129       else if (lastCommand.equals("=")) result = x;
130       display.setText("" + result);//將result的計算結果更改為數字字串
131    }
132 }
 1 package calculator;
 2 
 3 import java.awt.*;
 4 import javax.swing.*;
 5 
 6 /**
 7  * @version 1.34 2015-06-12
 8  * @author Cay Horstmann
 9  */
10 public class Calculator
11 {
12    public static void main(String[] args)
13    {
14       EventQueue.invokeLater(() -> {
15          CalculatorFrame frame = new CalculatorFrame();
16          frame.setTitle("Calculator");
17          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
18          frame.setVisible(true);
19       });
20    }
21 }
 1 package calculator;
 2 
 3 import javax.swing.*;
 4 
 5 /**
 6  * A frame with a calculator panel.
 7  */
 8 public class CalculatorFrame extends JFrame
 9 {
10    public CalculatorFrame()
11    {
12       add(new CalculatorPanel());
13       pack();
14    }
15 }

執行結果如下:

測試程式2

在elipse IDE中除錯執行教材486頁程式12-2,結合執行結果理解程式;

掌握各種文字元件的用法;

記錄示例程式碼閱讀理解中存在的問題與疑惑。

執行結果如下:

 

測試程式3

在elipse IDE中除錯執行教材489頁程式12-3,結合執行結果理解程式;

掌握複選框元件的用法;

記錄示例程式碼閱讀理解中存在的問題與疑惑。

執行結果如下:

 

測試程式4

在elipse IDE中除錯執行教材491頁程式12-4,執行結果理解程式;

掌握單選按鈕元件的用法;

記錄示例程式碼閱讀理解中存在的問題與疑惑。

執行結果如下:

      

      

測試程式5

在elipse IDE中除錯執行教材494頁程式12-5,結合執行結果理解程式;

掌握邊框的用法;

記錄示例程式碼閱讀理解中存在的問題與疑惑。

執行結果如下:

 

測試程式6

在elipse IDE中除錯執行教材498頁程式12-6,結合執行結果理解程式;

掌握組合框元件的用法;

記錄示例程式碼閱讀理解中存在的問題與疑惑。

 執行結果如下:

測試程式7

在elipse IDE中除錯執行教材501頁程式12-7,結合執行結果理解程式;

掌握滑動條元件的用法;

記錄示例程式碼閱讀理解中存在的問題與疑惑。

 1 package slider;
 2 
 3 import java.awt.*;
 4 import javax.swing.*;
 5 
 6 /**
 7  * @version 1.15 2015-06-12
 8  * @author Cay Horstmann
 9  */
10 public class SliderTest
11 {
12    public static void main(String[] args)
13    {
14       EventQueue.invokeLater(() -> {
15          SliderFrame frame = new SliderFrame();//生成類物件
16          frame.setTitle("SliderTest");//將此窗體的標題設定為指定的字串
17          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//設定使用者在此窗體上發起 "close" 時預設執行的操作
18          frame.setVisible(true);//根據引數 b 的值顯示或隱藏此 Window
19       });
20    }
21 }
  1 package slider;
  2 
  3 import java.awt.*;
  4 import java.util.*;
  5 import javax.swing.*;
  6 import javax.swing.event.*;
  7 
  8 /**
  9  * A frame with many sliders and a text field to show slider values.
 10  */
 11 public class SliderFrame extends JFrame//類的繼承
 12 {
 13    private JPanel sliderPanel;
 14    private JTextField textField;
 15    private ChangeListener listener;
 16 
 17    public SliderFrame()
 18    {
 19       sliderPanel = new JPanel();//生成類物件
 20       sliderPanel.setLayout(new GridBagLayout());//設定此容器的佈局管理器為網格包佈局管理器。 
 21 
 22       // 為所有 sliders註冊監聽器
 23       listener = event -> {
 24          //當滑動slider的時候 更新文字域的值
 25          JSlider source = (JSlider) event.getSource();//生成一個讓使用者以圖形方式在有界區間內通過移動滑塊來選擇值的元件類物件。 
 26          textField.setText("" + source.getValue());//將此 TextComponent 文字設定為指定文字
 27       };
 28 
 29  
 30 
 31       JSlider slider = new JSlider();//建立一個水平滑塊。
 32       addSlider(slider, "Plain");
 33 
 34 
 35       slider = new JSlider();
 36       slider.setPaintTicks(true);//在滑塊上繪製刻度標記
 37       slider.setMajorTickSpacing(20);//設定主刻度標記的間隔
 38       slider.setMinorTickSpacing(5);
 39       addSlider(slider, "Ticks");
 40 
 41       slider = new JSlider();
 42       slider.setPaintTicks(true);
 43       slider.setSnapToTicks(true);
 44       slider.setMajorTickSpacing(20);
 45       slider.setMinorTickSpacing(5);
 46       addSlider(slider, "Snap to ticks");
 47 
 48       // 新增沒有軌跡的平滑快
 49 
 50       slider = new JSlider();
 51       slider.setPaintTicks(true);
 52       slider.setMajorTickSpacing(20);
 53       slider.setMinorTickSpacing(5);
 54       slider.setPaintTrack(false);
 55       addSlider(slider, "No track");
 56 
 57       //新增倒置的平滑快
 58 
 59       slider = new JSlider();
 60       slider.setPaintTicks(true);
 61       slider.setMajorTickSpacing(20);
 62       slider.setMinorTickSpacing(5);
 63       slider.setInverted(true);
 64       addSlider(slider, "Inverted");
 65 
 66       // 新增一個數字標籤的平滑快
 67 
 68       slider = new JSlider();
 69       slider.setPaintTicks(true);
 70       slider.setPaintLabels(true);//在滑塊上繪製標籤。
 71       slider.setMajorTickSpacing(20);
 72       slider.setMinorTickSpacing(5);
 73       addSlider(slider, "Labels");
 74 
 75       // 新增一個字母標籤的平滑快
 76 
 77       slider = new JSlider();
 78       slider.setPaintLabels(true);
 79       slider.setPaintTicks(true);//在滑塊上繪製刻度標記
 80       slider.setMajorTickSpacing(20);
 81       slider.setMinorTickSpacing(5);
 82 
 83       Dictionary<Integer, Component> labelTable = new Hashtable<>();
 84       labelTable.put(0, new JLabel("A"));//建立 JLabel 例項。
 85       labelTable.put(20, new JLabel("B"));
 86       labelTable.put(40, new JLabel("C"));
 87       labelTable.put(60, new JLabel("D"));
 88       labelTable.put(80, new JLabel("E"));
 89       labelTable.put(100, new JLabel("F"));
 90 
 91       slider.setLabelTable(labelTable);//在給定值處繪製標籤
 92       addSlider(slider, "Custom labels");
 93 
 94 
 95       slider = new JSlider();
 96       slider.setPaintTicks(true);
 97       slider.setPaintLabels(true);
 98       slider.setSnapToTicks(true);
 99       slider.setMajorTickSpacing(20);
100       slider.setMinorTickSpacing(20);
101 
102       labelTable = new Hashtable<Integer, Component>();//構造一個新的空雜湊表。 
103 
104       // 新增影象
105 
106       labelTable.put(0, new JLabel(new ImageIcon("nine.gif")));
107       labelTable.put(20, new JLabel(new ImageIcon("ten.gif")));
108       labelTable.put(40, new JLabel(new ImageIcon("jack.gif")));
109       labelTable.put(60, new JLabel(new ImageIcon("queen.gif")));
110       labelTable.put(80, new JLabel(new ImageIcon("king.gif")));
111       labelTable.put(100, new JLabel(new ImageIcon("ace.gif")));
112 
113       slider.setLabelTable(labelTable);//用於指定將在給定值處繪製標籤
114       addSlider(slider, "Icon labels");
115 
116       // 新增文字域
117 
118       textField = new JTextField();
119       add(sliderPanel, BorderLayout.CENTER);
120       add(textField, BorderLayout.SOUTH);
121       pack();//調整此視窗的大小,以適合其子元件的首選大小和佈局。
122    }
123 
124    /**
125     * Adds a slider to the slider panel and hooks up the listener
126     * @param s the slider
127     * @param description the slider description
128     */
129    public void addSlider(JSlider s, String description)//一個讓使用者以圖形方式在有界區間內通過移動滑塊來選擇值的元件。 
130    {
131       s.addChangeListener(listener);
132       JPanel panel = new JPanel();
133       panel.add(s);
134       panel.add(new JLabel(description));
135       panel.setAlignmentX(Component.LEFT_ALIGNMENT);//設定垂直對齊方式。 
136       GridBagConstraints gbc = new GridBagConstraints();//設定元件間的約束關係
137       gbc.gridy = sliderPanel.getComponentCount();
138       gbc.anchor = GridBagConstraints.WEST;
139       sliderPanel.add(panel, gbc);
140    }
141 }

執行結果如下:

負責程式:12-7 

程式GUI設計中應用的相關元件:滑動條(JSlider) 

滑動條(JSlider );

滑動條可以讓使用者從一組離散值中進行選擇 ,並且它還允許進行連續值得選擇。

滑動條的構造:

JSlider slider = new JSlider(min,max,initialValue); JSlider slider = new JSlider(SwingConstants.VERTICAL,min,max,initialValue);

滑動條的修飾:

可通過顯示標尺(tricks)對滑動條進行修飾。 slider.setMajorTickSpacing(20); 大標尺標記 slider.setMinorTickSpacing(5); 小標尺標記 要想顯示以上標記,還需呼叫: slider.setPaintTicks(true);

可以呼叫下列方法為大標尺新增標尺標籤: slider.setPaintLabels(true); 會根據構建標尺時的min,max,和大標尺的間距自動 新增 還可以提供其他形式的標尺標記: Hashtable<Integer,Component> labelTable = new Hashtable<Integer,Component>(); 構造一個鍵為Integer型別且值為Component型別 的散列表。

用put(大標尺標記處,JLabel物件)新增標籤 labelTable.put(0,new JLabel("A")); labelTable.put(20,new JLabel("B")); ..... labelTable.put(100,new JLabel("F")); 再呼叫setLabelTable方法,元件就會放置在標尺 標記處: slider.setLabelTable(labelTable);
要想隱藏滑動條的移動軌跡可以呼叫 slider.setPaintTrack(false); 逆向滑動條 slider.setInverted(true); "對齊標尺" slider.setSnapToTicks(true); 只要使用者完成拖放滑動條的操作,滑動條就會立 即自動得移到最接近標尺處。

測試程式8

在elipse IDE中除錯執行教材512頁程式12-8,結合執行結果理解程式;

掌握選單的建立、選單事件監聽器、複選框和單選按鈕選單項、彈出選單以及快捷鍵和加速器的用法。

記錄示例程式碼閱讀理解中存在的問題與疑惑。

執行結果如下:

測試程式9

在elipse IDE中除錯執行教材517頁程式12-9,結合執行結果理解程式;

掌握工具欄和工具提示的用法;

記錄示例程式碼閱讀理解中存在的問題與疑惑。

執行結果如下:

測試程式10

在elipse IDE中除錯執行教材524頁程式12-10、12-11,結合執行結果理解程式,瞭解GridbagLayout的用法。

在elipse IDE中除錯執行教材533頁程式12-12,結合程式執行結果理解程式,瞭解GroupLayout的用法。

記錄示例程式碼閱讀理解中存在的問題與疑惑。

執行結果如下:

GridbagLayout:

        

GroupLayout:

     

測試程式11

在elipse IDE中除錯執行教材539頁程式12-13、12-14,結合執行結果理解程式;

掌握定製佈局管理器的用法。

記錄示例程式碼閱讀理解中存在的問題與疑惑。

執行結果如下:

測試程式12

在elipse IDE中除錯執行教材544頁程式12-15、12-16,結合執行結果理解程式;

掌握選項對話方塊的用法。

記錄示例程式碼閱讀理解中存在的問題與疑惑。

執行結果如下:

測試程式13

在elipse IDE中除錯執行教材552頁程式12-17、12-18,結合執行結果理解程式;

掌握對話方塊的建立方法;

記錄示例程式碼閱讀理解中存在的問題與疑惑。

執行結果如下:

     

測試程式14

在elipse IDE中除錯執行教材556頁程式12-19、12-20,結合執行結果理解程式;

掌握對話方塊的資料交換用法;

記錄示例程式碼閱讀理解中存在的問題與疑惑。

 執行結果如下:

      

測試程式15

在elipse IDE中除錯執行教材556頁程式12-21、12-2212-23,結合程式執行結果理解程式;

掌握檔案對話方塊的用法;

記錄示例程式碼閱讀理解中存在的問題與疑惑。

執行結果如下:

   

測試程式16

在elipse IDE中除錯執行教材570頁程式12-24,結合執行結果理解程式;

瞭解顏色選擇器的用法。

記錄示例程式碼閱讀理解中存在的問題與疑惑。

執行結果如下:

       

實驗2:組內討論反思本組負責程式,理解程式總體結構,梳理程式GUI設計中應用的相關元件,整理相關元件的API,對程式中元件應用的相關程式碼添加註釋。

實驗3:組間協同學習:在本班課程QQ群內,各位同學對實驗1中存在的問題進行提問,提問時註明實驗1中的測試程式編號,負責對應程式的小組需及時對群內提問進行回答。

總結:

1.

文字輸入:

文字域(JTextField): 用於獲取單行文字輸入。 

文字區(JTextArea)元件可讓使用者輸入多行文 本。生成JTextArea元件物件時,可以指定文字 區的行數和列數: textArea = new JTextArea(8, 40);

文字區與文字域的異同相同之處: 文字域和文字區元件都可用於獲取文字輸入。

不同之處:文字域只能接受單行文字的輸入; 文字區能夠接受多行文字的輸入。

文字區JTextArea的常用API:Java.swing. JTextArea 1.2 – JTextArea(int rows, int cols)

構造一個rows行cols列的文字區物件 – JTextArea(String text,int rows, int cols)

用初始文字構造一個文字區物件 – void setRows(int rows)

設定文字域使用的行數 – void append(String newText)

將給定文字附加到文字區中已有文字的後面 – void setLineWrap(boolean wrap)

開啟或關閉換行

標籤元件:標籤是容納文字的元件。它們沒有任何修飾(如沒有邊界 ),也不響應使用者輸入。

標籤的常用用途之一就是標識元件,例如標識文字域。

2.標籤元件(JLabel)

標籤是容納文字的元件。它們沒有任何修飾(如沒有邊界 ),也不響應使用者輸入。

標籤的常用用途之一就是標識元件,例如標識文字域。其 使用步驟如下:

1. 建立一個JLabel元件 例: JLabellabel = new JLabel(“hours”, SwingConstants.RIGHT); 或者 JLabellabel = new JLabel(“hours”, JLabel.RIGHT);以上程式碼建立了一個label,並指定label的對齊方式為右對齊。

2. 將標籤元件放置在距離被標識元件足夠近的地方。

3.密碼域(JPasswordField)

密碼域是一種特殊型別的文字域。每個輸入的字 符都用回顯字元實現,典型的回顯字元為*。

常用API(教材485頁) –JPassWordField(String text, int columns) 構造一個密碼域物件。 void setEchoChar(char  echo) 為密碼域設定指定回顯字元。 char[] getPassword() 返回密碼域中的文字。

4.滾動窗格(JScrollPane)

Swing中文字區沒有滾動條,若需要滾動條。將文 本區放入一個滾動窗格中即可。

常用API—Java.swing. JScrollPane。 –JScrollPane(Component c) 在元件c上新增滾動條,返回新增後的元件

5.選擇元件

複選框  單選按鈕  邊框  組合框  滑動條

(1)複選框構造器 1.bold = new JCheckBox("Bold"); 複選框自動地帶有表示標籤。 JCheckBox(String label,Icon icon); 構造帶有標籤與圖示的複選框,預設初始未被選擇。JCheckBox(String label,boolean state); 用指定的標籤和初始化選擇狀態構造一個複選框單選按鈕的構造器(教材492頁) 1.JRadioButton(String label,Icon icon); 建立一個帶標籤和圖示的單選按鈕RadioButton(String label,boolean state); 用指定的標籤和初始化狀態構造單選按鈕按鈕組:為單選按鈕組構造一個ButtonGroup的物件。 然後,再將JRadioButton型別的物件新增到按鈕 組中。按鈕組負責在新按鈕被按下的時,取消前一 個按鈕的選擇狀態。如果在一個視窗中 有多組複選框或單選按 鈕,就需要視覺化的形 式指明哪些按鈕屬於同 一組。Swing提供了一 組很有用的邊框)如果有多個選擇項,使用單選按鈕佔據的螢幕空 間太大時,就可以選擇組合框。組合框的事件監聽:為了判斷組合框的哪個選項被選擇,可通過 事件引數呼叫getSource方法來得到傳送事件的組 合框引用,接著呼叫getSelectdeItem方法獲取當 前選擇的選項。滑動條:滑動條可以讓使用者從一組離散值中進行選擇 ,並且它還允許進行連續值得選擇。

6.選單

選單建立  選單項中的圖示  複選框和單選按鈕選單項  彈出選單  快捷鍵和加速器  啟用和禁用選單項  工具欄  工具提示

網格組佈局 (GridBagLayout):GridBagLayout與GridLayout有點相似,它也是 將元件排在格子裡,但是GridBagLayout在網格 的基礎上提供更復雜的佈局。

GridBagLayout允許單個元件在一個單元中不填 滿整個單元,而只是佔用最佳大小,也允許單個 元件擴充套件成不止一個單元,並且可以用任意順序 加入元件。

定製佈局管理器: 程式設計師可通過自己設計LayoutManager類來實現 特殊的佈局方式。定製佈局管理器需要實現LayoutManager介面, 並覆蓋以下方法。

7.對話方塊:

對話方塊是一種大小不能變化、不能有選單的容器視窗;對話方塊不能作為一個應用程式的主框架,而必須包含在其他的容器中。

Java提供多種對話方塊類來支援多種形式的對話方塊。

對話方塊依賴於框架。當框架撤銷時,依賴該框架的對話方塊 也撤銷。當框架圖示化時,依賴它的對話方塊也從螢幕上消 失。當框架視窗恢復時,依賴框架的對話方塊又返回螢幕。 

選項對話方塊:JOptionPane提供的對話方塊是模式對話方塊。當模 式對話方塊顯示時,它不允許使用者輸入到程式的 其他的視窗。使用JOptionPane,可以建立和自 定義問題、資訊、警告和錯誤等幾種型別的對 話框。

資料交換:輸入對話方塊含有供使用者輸入文字的文字框、一個確認和取 消按鈕,是有模式對話方塊。當輸入對話方塊可見時,要求使用者 輸入一個字串。

檔案對話方塊:專門用於對檔案(或目錄)進行瀏覽和選擇的對 話框,常用的構造方法: – JFileChooser():根據使用者的預設目錄建立檔案對話方塊 – JFileChooser(File currentDirectory):根據File型引數 currentDirectory指定的目錄建立檔案對話方塊

顏色對話方塊: javax.swing包中的JColorChooser類的靜態方 法: public static Color showDialog(Component component, String title, Color initialColor)建立一個顏色對話方塊

引數component指定對話方塊所依賴的元件,title 指定對話方塊的標題;initialColor 指定對話方塊返回 的初始顏色,即對話方塊消失後,返回的預設值。 顏色對話方塊可根據使用者在顏色對話方塊中選擇的顏 色返回一個顏色物件.

實驗總結:

       這周的實驗我們採用了小組協作學習模式,自己存在的問題和學習感悟記錄下來,之後在小組學習時討論解決。通過這周的實驗我們交流了各自學習中遇到的問題,在學習過程中我發現對於之前學過的知識掌握還不夠好。