<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      201871010107-公海瑜《面向對象程序設計(java)》第十五周學習總結

         201871010107-公海瑜《面向對象程序設計(java)》第十五周學習總結

                  項目                            內容
        這個作業屬于哪個課程       http://www.rzrgm.cn/nwnu-daizh/
        這個作業的要求在哪里    http://www.rzrgm.cn/nwnu-daizh/p/11995615.html   
        作業學習目標  

         (1) 掌握菜單組件用途及常用API;

         (2) 掌握對話框組件用途及常用API;

         (3) 學習設計簡單應用程序的GUI。

       第一部分:總結菜單、對話框兩類組件用途及常用API

      1.菜單

       菜單是GUI編程中經常用到的一種組件。位于窗口頂部的菜單欄(menu bar)中包括下拉菜單的名字。點擊一個名字就可以打開包含菜單項(menu items)和子菜單(submenus)的菜單。

      分為JMenuBar/JMenu/JMenuItem,當選擇菜單項時會觸發一個動作事件,需要注冊監聽器監聽。

      菜單的創建

        首先創建一個菜單欄菜單欄是一個可以添加到容器組件任何位置的組件。通常放置在框架的頂部。

        JMenuBar menuBar=new JMenuBar();

       調用框架的setJMenuBar方法可將一個菜單欄對象添加到框架上

        frame.setJMenuBar(menuBar);
       
       創建菜單對象,并將菜單對象添加到菜單欄中

        JMenu editMenu=new Jmenu("Edit");
        menuBar.add(editMenu);
       
       加速器可以在不打開菜單的情況下選中菜單項的快捷鍵。 例如,很多應用程序把CTRL + O和CTRL + S關聯到菜單中的Open和Save項。

      2.對話框

      對話框是一種大小不能變化、不能有菜單的容器窗口;

      對話框不能作為一個應用程序的主框架,而必須包含在其他的容器中。

      對話框分為模式對話框和無模對話框,模式對話框就是未處理此對話框之前不允許與其他窗口交互。 

       JOptionPane提供的對話框是模式對話框。當模式對話框顯示時,它不允許用戶輸入到程序的其他的窗口。使用JOptionPane,可以創建和自定義問題、信息、警告和錯誤等幾種類型的對話框。

      創建對話框,要想實現一個對角框,需要從JDialog派生一個類。這與應用程序窗口派生與JFrame的過程完全一樣。具體過程如下:

      (1)JOptionPane 

      提供了四個用靜態方法(showxxxx)顯示的對話框: 

      構造對話框的步驟:

      1)選擇對話框類型(消息、確認、選擇、輸入) 

      2)選擇消息類型(String/Icon/Component/Object[]/任何其他對象) 

      3)選擇圖標(ERROR_MESSAGE/INFORMATION_MESSAGE/WARNING_MESSAGE/QUESTION_MESSAGE/PLAIN_MESSAGE) 

      4)對于確認對話框,選擇按鈕類型(DEFAULT_OPTION/YES_NO_OPTION/YES_NO_CANCEL_OPTION/OK_CANCEL_OPTION) 

      5)對于選項對話框,選擇選項(String/Icon/Component) 

      6)對于輸入對話框,選擇文本框或組合框 

      確認對話框和選擇對話框調用后會返回按鈕值或被選的選項的索引值 

      (2)JDialog類 

      可以自己創建對話框,需調用超類JDialog類的構造器

      public aboutD extends JDialog
      {
      public aboutD(JFrame owner)
      {
      super(owner,"About Text",true);
      ....
      }
      }
      構造JDialog類后需要setVisible才能時窗口可見

      if(dialog == null)
      dialog = new JDialog();
      dialog.setVisible(true);

      (3)文件對話框(JFileChooser類)   

               專門用于對文件(或目錄)進行瀏覽和選擇的對話框,常用的構造方法:

               JFileChooser():根據用戶的缺省目錄創建文件對話框

               JFileChooser(File currentDirectory):根據File型參數currentDirectory指定的目錄創建文件對話框

               JFileChooser(String currentDirectoryPath):根據String型參數currentDirector

      (4)顏色對話框(JColorChooser類) 

                Swing提供了JColorChooser來選取顏色。與JFileChooser一樣,顏色選擇器也是一個組件,而不是一個對話框,但是它包含了用于創建包含顏色的選擇器組件的對話框方法。

      第二部分:實驗部分

      實驗1: 導入第12章示例程序,測試程序并進行組內討論。

      測試程序1

      elipse IDE中調試運行教材512頁程序12-8,結合運行結果理解程序;

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

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

      程序代碼:

      package menu;
      
      import java.awt.*;
      import javax.swing.*;
      
      /**
       * @version 1.25 2018-04-10
       * @author Cay Horstmann
       */
      public class MenuTest
      {
         public static void main(String[] args)
         {
            EventQueue.invokeLater(() -> {
               var frame = new MenuFrame();
               frame.setTitle("MenuTest");
               frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
               frame.setVisible(true);
            });
         }
      }
      package menu;
      
      import java.awt.event.*;
      import javax.swing.*;
      
      /**
          *   一個帶有示例菜單欄的框架。
       */
      public class MenuFrame extends JFrame
      {
         private static final int DEFAULT_WIDTH = 300;
         private static final int DEFAULT_HEIGHT = 200;
         private Action saveAction;
         private Action saveAsAction;
         private JCheckBoxMenuItem readonlyItem;
         private JPopupMenu popup;
      
         /**
                      * 將動作名稱打印到Studio.OUT的示例動作。
          */
         class TestAction extends AbstractAction
         {
            public TestAction(String name)
            {
               super(name);
            }
      
            public void actionPerformed(ActionEvent event)
            {
               System.out.println(getValue(Action.NAME) + " selected.");
            }
         }
      
         public MenuFrame()
         {
            setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
      
            var fileMenu = new JMenu("File");
            fileMenu.add(new TestAction("New"));
      
            // 演示加速器
      
            var openItem = fileMenu.add(new TestAction("Open"));
            openItem.setAccelerator(KeyStroke.getKeyStroke("ctrl O"));
      
            fileMenu.addSeparator();
      
            saveAction = new TestAction("Save");
            JMenuItem saveItem = fileMenu.add(saveAction);
            saveItem.setAccelerator(KeyStroke.getKeyStroke("ctrl S"));
      
            saveAsAction = new TestAction("Save As");
            fileMenu.add(saveAsAction);
            fileMenu.addSeparator();
      
            fileMenu.add(new AbstractAction("Exit")
               {
                  public void actionPerformed(ActionEvent event)
                  {
                     System.exit(0);
                  }
               });
      
            // 演示復選框和單選按鈕菜單
      
            readonlyItem = new JCheckBoxMenuItem("Read-only");
            readonlyItem.addActionListener(new ActionListener()
               {
                  public void actionPerformed(ActionEvent event)
                  {
                     boolean saveOk = !readonlyItem.isSelected();
                     saveAction.setEnabled(saveOk);
                     saveAsAction.setEnabled(saveOk);
                  }
               });
      
            var group = new ButtonGroup();
      
            var insertItem = new JRadioButtonMenuItem("Insert");
            insertItem.setSelected(true);
            var overtypeItem = new JRadioButtonMenuItem("Overtype");
      
            group.add(insertItem);
            group.add(overtypeItem);
      
            // 演示圖標
      
            var cutAction = new TestAction("Cut");
            cutAction.putValue(Action.SMALL_ICON, new ImageIcon("cut.gif"));
            var copyAction = new TestAction("Copy");
            copyAction.putValue(Action.SMALL_ICON, new ImageIcon("copy.gif"));
            var pasteAction = new TestAction("Paste");
            pasteAction.putValue(Action.SMALL_ICON, new ImageIcon("paste.gif"));
      
            var editMenu = new JMenu("Edit");
            editMenu.add(cutAction);
            editMenu.add(copyAction);
            editMenu.add(pasteAction);
      
            // 演示嵌套菜單
      
            var optionMenu = new JMenu("Options");
      
            optionMenu.add(readonlyItem);
            optionMenu.addSeparator();
            optionMenu.add(insertItem);
            optionMenu.add(overtypeItem);
      
            editMenu.addSeparator();
            editMenu.add(optionMenu);
      
            // 助記符演示
      
            var helpMenu = new JMenu("Help");
            helpMenu.setMnemonic('H');
      
            var indexItem = new JMenuItem("Index");
            indexItem.setMnemonic('I');
            helpMenu.add(indexItem);
      
            // 還可以將助記鍵添加到動作中。
            var aboutAction = new TestAction("About");
            aboutAction.putValue(Action.MNEMONIC_KEY, new Integer('A'));
            helpMenu.add(aboutAction);
            
            // 將所有頂級菜單添加到菜單欄
      
            var menuBar = new JMenuBar();
            setJMenuBar(menuBar);
      
            menuBar.add(fileMenu);
            menuBar.add(editMenu);
            menuBar.add(helpMenu);
      
            // 演示彈出窗口
      
            popup = new JPopupMenu();
            popup.add(cutAction);
            popup.add(copyAction);
            popup.add(pasteAction);
      
            var panel = new JPanel();
            panel.setComponentPopupMenu(popup);
            add(panel);
         }
      }

      運行結果:

       

      測試程序2

      elipse IDE中調試運行教材517頁程序12-9,結合運行結果理解程序;

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

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

       程序代碼:

      package toolBar;
      
      import java.awt.*;
      import javax.swing.*;
      
      /**
       * @version 1.15 2018-04-10
       * @author Cay Horstmann
       */
      public class ToolBarTest
      {
         public static void main(String[] args)
         {
            EventQueue.invokeLater(() -> {
               var frame = new ToolBarFrame();
               frame.setTitle("ToolBarTest");
               frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
               frame.setVisible(true);
            });
         }
      }
      package toolBar;
      
      import java.awt.*;
      import java.awt.event.*;
      import javax.swing.*;
      
      /**
       * A frame with a toolbar and menu for color changes.
       */
      public class ToolBarFrame extends JFrame
      {  //定義兩個私有屬性
         private static final int DEFAULT_WIDTH = 300;
         private static final int DEFAULT_HEIGHT = 200;
         private JPanel panel;
      
         public ToolBarFrame()    //定義工具提示類
         {
            setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
      
            // add a panel for color change
      
            panel = new JPanel();  //創建新的JPanel
            add(panel, BorderLayout.CENTER);
      
            //建立動作
      
            var blueAction = new ColorAction("Blue", new ImageIcon("blue-ball.gif"), Color.BLUE);
            var yellowAction = new ColorAction("Yellow", new ImageIcon("yellow-ball.gif"),
                  Color.YELLOW);
            var redAction = new ColorAction("Red", new ImageIcon("red-ball.gif"), Color.RED);
      
            var exitAction = new AbstractAction("Exit", new ImageIcon("exit.gif"))
               {
                  public void actionPerformed(ActionEvent event)
                  {
                     System.exit(0);
                  }
               };
            exitAction.putValue(Action.SHORT_DESCRIPTION, "Exit");
      
            // populate toolbar
      
            var bar = new JToolBar();
            bar.add(blueAction);    //用Action對象填充工具欄
            bar.add(yellowAction);
            bar.add(redAction);
            bar.addSeparator();     //用分隔符將按鈕分組
            bar.add(exitAction);
            add(bar, BorderLayout.NORTH);
      
            // populate menu
      
            var menu = new JMenu("Color");   //顯示顏色的菜單
            menu.add(yellowAction);  //在菜單添加顏色動作
            menu.add(blueAction);
            menu.add(redAction);
            menu.add(exitAction);
            var menuBar = new JMenuBar();
            menuBar.add(menu);
            setJMenuBar(menuBar);
         }
      
         /**
          * The color action sets the background of the frame to a given color.
          */
         class ColorAction extends AbstractAction
         {
            public ColorAction(String name, Icon icon, Color c)
            {
               putValue(Action.NAME, name);     //動作名稱,顯示在按鈕和菜單
               putValue(Action.SMALL_ICON, icon);   //存儲小圖標的地方;顯示在按鈕、菜單項或工具欄中
               putValue(Action.SHORT_DESCRIPTION, name + " background");
               putValue("Color", c);
            }
      
            public void actionPerformed(ActionEvent event)
            {
               Color c = (Color) getValue("Color");
               panel.setBackground(c);
            }
         }
      }

       運行結果:

       

      測試程序3

      elipse IDE中調試運行教材544頁程序12-1512-16,結合運行結果理解程序;

      掌握選項對話框的用法。

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

      程序代碼:

      package optionDialog;
      
      import java.awt.*;
      import javax.swing.*;
      
      /**
       * @version 1.35 2018-04-10
       * @author Cay Horstmann
       */
      public class OptionDialogTest
      {
         public static void main(String[] args)
         {
            EventQueue.invokeLater(() -> {
               var frame = new OptionDialogFrame();
               frame.setTitle("OptionDialogTest");
               frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
               frame.setVisible(true);
            });
         }
      }
      package optionDialog;
      
      import javax.swing.*;
      
      /**
       * A panel with radio buttons inside a titled border.
       */
      public class ButtonPanel extends JPanel
      {
         private ButtonGroup group;
      
         /**
          * Constructs a button panel.
          * @param title the title shown in the border
          * @param options an array of radio button labels
          */
         public ButtonPanel(String title, String... options)
         {
            setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), title));
            setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
            group = new ButtonGroup();
      
            // make one radio button for each option
            for (String option : options)
            {
               var button = new JRadioButton(option);
               button.setActionCommand(option);
               add(button);
               group.add(button);
               button.setSelected(option == options[0]);
            }
         }
      
         /**
          * Gets the currently selected option.
          * @return the label of the currently selected radio button.
          */
         public String getSelection()
         {
            return group.getSelection().getActionCommand();
         }
      }
      package optionDialog;
      
      import java.awt.*;
      import java.awt.event.*;
      import java.awt.geom.*;
      import java.util.*;
      import javax.swing.*;
      
      /**
       * A frame that contains settings for selecting various option dialogs.
       */
      public class OptionDialogFrame extends JFrame
      {  //定義屬性
         private ButtonPanel typePanel;
         private ButtonPanel messagePanel;
         private ButtonPanel messageTypePanel;
         private ButtonPanel optionTypePanel;
         private ButtonPanel optionsPanel;
         private ButtonPanel inputPanel;
         private String messageString = "Message";
         private Icon messageIcon = new ImageIcon("blue-ball.gif");
         private Object messageObject = new Date();
         private Component messageComponent = new SampleComponent();
      
         public OptionDialogFrame()
         {
            var gridPanel = new JPanel();
            gridPanel.setLayout(new GridLayout(2, 3));
      
            typePanel = new ButtonPanel("Type", "Message", "Confirm", "Option", "Input");
            messageTypePanel = new ButtonPanel("Message Type", "ERROR_MESSAGE", "INFORMATION_MESSAGE",
                  "WARNING_MESSAGE", "QUESTION_MESSAGE", "PLAIN_MESSAGE");
            messagePanel = new ButtonPanel("Message", "String", "Icon", "Component", "Other", 
                  "Object[]");
            optionTypePanel = new ButtonPanel("Confirm", "DEFAULT_OPTION", "YES_NO_OPTION",
                  "YES_NO_CANCEL_OPTION", "OK_CANCEL_OPTION");
            optionsPanel = new ButtonPanel("Option", "String[]", "Icon[]", "Object[]");
            inputPanel = new ButtonPanel("Input", "Text field", "Combo box");
      
            gridPanel.add(typePanel);
            gridPanel.add(messageTypePanel);
            gridPanel.add(messagePanel);
            gridPanel.add(optionTypePanel);
            gridPanel.add(optionsPanel);
            gridPanel.add(inputPanel);
      
            // add a panel with a Show button
      
            var showPanel = new JPanel();
            var showButton = new JButton("Show");
            showButton.addActionListener(new ShowAction());
            showPanel.add(showButton);
      
            add(gridPanel, BorderLayout.CENTER);
            add(showPanel, BorderLayout.SOUTH);
            pack();
         }
      
         /**
          * Gets the currently selected message.
          * @return a string, icon, component, or object array, depending on the Message panel selection
          */
         public Object getMessage()
         {
            String s = messagePanel.getSelection();
            if (s.equals("String")) return messageString;
            else if (s.equals("Icon")) return messageIcon;
            else if (s.equals("Component")) return messageComponent;
            else if (s.equals("Object[]")) return new Object[] { messageString, messageIcon,
                  messageComponent, messageObject };
            else if (s.equals("Other")) return messageObject;
            else return null;
         }
      
         /**
          * Gets the currently selected options.
          * @return an array of strings, icons, or objects, depending on the Option panel selection
          */
         public Object[] getOptions()
         {
            String s = optionsPanel.getSelection();
            if (s.equals("String[]")) return new String[] { "Yellow", "Blue", "Red" };
            else if (s.equals("Icon[]")) return new Icon[] { new ImageIcon("yellow-ball.gif"),
                  new ImageIcon("blue-ball.gif"), new ImageIcon("red-ball.gif") };
            else if (s.equals("Object[]")) return new Object[] { messageString, messageIcon,
                  messageComponent, messageObject };
            else return null;
         }
      
         /**
          * Gets the selected message or option type
          * @param panel the Message Type or Confirm panel
          * @return the selected XXX_MESSAGE or XXX_OPTION constant from the JOptionPane class
          */
         public int getType(ButtonPanel panel)
         {
            String s = panel.getSelection();
            try
            {
               return JOptionPane.class.getField(s).getInt(null);
            }
            catch (Exception e)
            {
               return -1;
            }
         }
      
         /**
          * The action listener for the Show button shows a Confirm, Input, Message, or Option dialog
          * depending on the Type panel selection.
          */
         private class ShowAction implements ActionListener
         {
            public void actionPerformed(ActionEvent event)
            {
               if (typePanel.getSelection().equals("Confirm")) JOptionPane.showConfirmDialog(
                     OptionDialogFrame.this, getMessage(), "Title", getType(optionTypePanel),
                     getType(messageTypePanel));
               else if (typePanel.getSelection().equals("Input"))
               {
                  if (inputPanel.getSelection().equals("Text field")) JOptionPane.showInputDialog(
                        OptionDialogFrame.this, getMessage(), "Title", getType(messageTypePanel));
                  else JOptionPane.showInputDialog(OptionDialogFrame.this, getMessage(), "Title",
                        getType(messageTypePanel), null, new String[] { "Yellow", "Blue", "Red" },
                        "Blue");
               }
               else if (typePanel.getSelection().equals("Message")) JOptionPane.showMessageDialog(
                     OptionDialogFrame.this, getMessage(), "Title", getType(messageTypePanel));
               else if (typePanel.getSelection().equals("Option")) JOptionPane.showOptionDialog(
                     OptionDialogFrame.this, getMessage(), "Title", getType(optionTypePanel),
                     getType(messageTypePanel), null, getOptions(), getOptions()[0]);
            }
         }
      }
      
      /**
       * A component with a painted surface
       */
      
      class SampleComponent extends JComponent
      {
         public void paintComponent(Graphics g)
         {
            var g2 = (Graphics2D) g;
            var rect = new Rectangle2D.Double(0, 0, getWidth() - 1, getHeight() - 1);
            g2.setPaint(Color.YELLOW);
            g2.fill(rect);
            g2.setPaint(Color.BLUE);
            g2.draw(rect);
         }
      
         public Dimension getPreferredSize()
         {
            return new Dimension(10, 10);
         }
      }

      運行截圖:

      測試程序4

      elipse IDE中調試運行教材552頁程序12-1712-18,結合運行結果理解程序;

      掌握對話框的創建方法;

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

       程序代碼:

      package dialog;
      
      import java.awt.*;
      import javax.swing.*;
      
      /**
       * @version 1.35 2018-04-10
       * @author Cay Horstmann
       */
      public class DialogTest
      {
         public static void main(String[] args)
         {
            EventQueue.invokeLater(() -> {
               var frame = new DialogFrame();
               frame.setTitle("DialogTest");
               frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
               frame.setVisible(true);
            });
         }
      }
      package dialog;
      
      import javax.swing.JFrame;
      import javax.swing.JMenu;
      import javax.swing.JMenuBar;
      import javax.swing.JMenuItem;
      
      /**
       * A frame with a menu whose File->About action shows a dialog.
       */
      public class DialogFrame extends JFrame
      {
         private static final int DEFAULT_WIDTH = 300;
         private static final int DEFAULT_HEIGHT = 200;
         private AboutDialog dialog;
      
         public DialogFrame()
         {
            setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
      
            // construct a File menu
      
            var menuBar = new JMenuBar();
            setJMenuBar(menuBar);
            var fileMenu = new JMenu("File");
            menuBar.add(fileMenu);
      
            // add About and Exit menu items
      
            // the About item shows the About dialog
      
            var aboutItem = new JMenuItem("About");
            aboutItem.addActionListener(event -> {
               if (dialog == null) // first time
                  dialog = new AboutDialog(DialogFrame.this);
               dialog.setVisible(true); // pop up dialog
            });
            fileMenu.add(aboutItem);
      
            // the Exit item exits the program
      
            var exitItem = new JMenuItem("Exit");
            exitItem.addActionListener(event -> System.exit(0));
            fileMenu.add(exitItem);
         }
      }
      package dialog;
      
      import java.awt.BorderLayout;
      
      import javax.swing.JButton;
      import javax.swing.JDialog;
      import javax.swing.JFrame;
      import javax.swing.JLabel;
      import javax.swing.JPanel;
      
      /**
       * A sample modal dialog that displays a message and waits for the user to click
       * the OK button.
       */
      public class AboutDialog extends JDialog
      {
         public AboutDialog(JFrame owner)
         {
            super(owner, "About DialogTest", true);
      
            // add HTML label to center
      
            add(
               new JLabel(
                  "<html><h1><i>Core Java</i></h1><hr>By Cay Horstmann</html>"),
               BorderLayout.CENTER);
      
            // OK button closes the dialog
      
            var ok = new JButton("OK");
            ok.addActionListener(event -> setVisible(false));
      
            // add OK button to southern border
      
            var panel = new JPanel();
            panel.add(ok);
            add(panel, BorderLayout.SOUTH);
      
            pack();
         }
      }

      運行結果:

             

       

      測試程序5

      elipse IDE中調試運行教材556頁程序12-1912-20,結合運行結果理解程序;

      掌握對話框的數據交換用法;

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

      程序代碼:

      package dataExchange;
      
      import java.awt.*;
      import javax.swing.*;
      
      /**
       * @version 1.35 2018-04-10
       * @author Cay Horstmann
       */
      public class DataExchangeTest
      {
         public static void main(String[] args)
         {
            EventQueue.invokeLater(() -> {
               var frame = new DataExchangeFrame();
               frame.setTitle("DataExchangeTest");
               frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
               frame.setVisible(true);
            });
         }
      }
      package dataExchange;
      
      import java.awt.*;
      import java.awt.event.*;
      import javax.swing.*;
      
      /**
       * A frame with a menu whose File->Connect action shows a password dialog.
       */
      public class DataExchangeFrame extends JFrame
      {
         public static final int TEXT_ROWS = 20;
         public static final int TEXT_COLUMNS = 40;
         private PasswordChooser dialog = null;
         private JTextArea textArea;
      
         public DataExchangeFrame()
         {
            // construct a File menu
      
            var mbar = new JMenuBar();
            setJMenuBar(mbar);
            var fileMenu = new JMenu("File");
            mbar.add(fileMenu);
      
            // add Connect and Exit menu items
      
            var connectItem = new JMenuItem("Connect");
            connectItem.addActionListener(new ConnectAction());
            fileMenu.add(connectItem);
      
            // the Exit item exits the program
      
            var exitItem = new JMenuItem("Exit");
            exitItem.addActionListener(event -> System.exit(0));
            fileMenu.add(exitItem);
      
            textArea = new JTextArea(TEXT_ROWS, TEXT_COLUMNS);
            add(new JScrollPane(textArea), BorderLayout.CENTER);
            pack();
         }
      
         /**
          * The Connect action pops up the password dialog.
          */
         private class ConnectAction implements ActionListener
         {
            public void actionPerformed(ActionEvent event)
            {
               // if first time, construct dialog
      
               if (dialog == null) dialog = new PasswordChooser();
      
               // set default values
               dialog.setUser(new User("yourname", null));
      
               // pop up dialog
               if (dialog.showDialog(DataExchangeFrame.this, "Connect"))
               {
                  // if accepted, retrieve user input
                  User u = dialog.getUser();
                  textArea.append("user name = " + u.getName() + ", password = "
                     + (new String(u.getPassword())) + "\n");
               }
            }
         }
      }
      package dataExchange;
      
      import java.awt.BorderLayout;
      import java.awt.Component;
      import java.awt.Frame;
      import java.awt.GridLayout;
      
      import javax.swing.JButton;
      import javax.swing.JDialog;
      import javax.swing.JLabel;
      import javax.swing.JPanel;
      import javax.swing.JPasswordField;
      import javax.swing.JTextField;
      import javax.swing.SwingUtilities;
      
      /**
       * A password chooser that is shown inside a dialog.
       */
      public class PasswordChooser extends JPanel
      {
         private JTextField username;
         private JPasswordField password;
         private JButton okButton;
         private boolean ok;
         private JDialog dialog;
      
         public PasswordChooser()
         {
            setLayout(new BorderLayout());
      
            // construct a panel with user name and password fields
      
            var panel = new JPanel();
            panel.setLayout(new GridLayout(2, 2));
            panel.add(new JLabel("User name:"));
            panel.add(username = new JTextField(""));
            panel.add(new JLabel("Password:"));
            panel.add(password = new JPasswordField(""));
            add(panel, BorderLayout.CENTER);
      
            // create Ok and Cancel buttons that terminate the dialog
      
            okButton = new JButton("Ok");
            okButton.addActionListener(event -> {
               ok = true;
               dialog.setVisible(false);
            });
      
            var cancelButton = new JButton("Cancel");
            cancelButton.addActionListener(event -> dialog.setVisible(false));
      
            // add buttons to southern border
      
            var buttonPanel = new JPanel();
            buttonPanel.add(okButton);
            buttonPanel.add(cancelButton);
            add(buttonPanel, BorderLayout.SOUTH);
         }
      
         /**
          * Sets the dialog defaults.
          * @param u the default user information
          */
         public void setUser(User u)
         {
            username.setText(u.getName());
         }
      
         /**
          * Gets the dialog entries.
          * @return a User object whose state represents the dialog entries
          */
         public User getUser()
         {
            return new User(username.getText(), password.getPassword());
         }
      
         /**
          * Show the chooser panel in a dialog.
          * @param parent a component in the owner frame or null
          * @param title the dialog window title
          */
         public boolean showDialog(Component parent, String title)
         {
            ok = false;
      
            // locate the owner frame
      
            Frame owner = null;
            if (parent instanceof Frame)
               owner = (Frame) parent;
            else
               owner = (Frame) SwingUtilities.getAncestorOfClass(Frame.class, parent);
      
            // if first time, or if owner has changed, make new dialog
      
            if (dialog == null || dialog.getOwner() != owner)
            {
               dialog = new JDialog(owner, true);
               dialog.add(this);
               dialog.getRootPane().setDefaultButton(okButton);
               dialog.pack();
            }
      
            // set title and show dialog
      
            dialog.setTitle(title);
            dialog.setVisible(true);
            return ok;
         }
      }
      package dataExchange;
      
      /**
       * A user has a name and password. For security reasons, the password is stored as a char[], not a
       * String.
       */
      public class User
      {
         private String name;
         private char[] password;
      
         public User(String aName, char[] aPassword)
         {
            name = aName;
            password = aPassword;
         }
      
         public String getName()
         {
            return name;
         }
      
         public char[] getPassword()
         {
            return password;
         }
      
         public void setName(String aName)
         {
            name = aName;
         }
      
         public void setPassword(char[] aPassword)
         {
            password = aPassword;
         }
      }

      運行結果:

       

      測試程序6

      elipse IDE中調試運行教材556頁程序12-21、12-22、12-23,結合程序運行結果理解程序;

      掌握文件對話框的用法;

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

       程序代碼:

      package fileChooser;
      
      import java.awt.*;
      import javax.swing.*;
      
      /**
       * @version 1.26 2018-04-10
       * @author Cay Horstmann
       */
      public class FileChooserTest
      {
         public static void main(String[] args)
         {
            EventQueue.invokeLater(() -> {
               var frame = new ImageViewerFrame();
               frame.setTitle("FileChooserTest");
               frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
               frame.setVisible(true);
            });
         }
      }
      package fileChooser;
      
      import java.io.*;
      import javax.swing.*;
      import javax.swing.filechooser.*;
      import javax.swing.filechooser.FileFilter;
      
      /**
       * A file view that displays an icon for all files that match a file filter.
       */
      public class FileIconView extends FileView
      {
         private FileFilter filter;
         private Icon icon;
      
         /**
          * Constructs a FileIconView.
          * @param aFilter a file filter--all files that this filter accepts will be shown 
          * with the icon.
          * @param anIcon--the icon shown with all accepted files.
          */
         public FileIconView(FileFilter aFilter, Icon anIcon)
         {
            filter = aFilter;
            icon = anIcon;
         }
      
         public Icon getIcon(File f)
         {
            if (!f.isDirectory() && filter.accept(f)) return icon;
            else return null;
         }
      }
      package fileChooser;
      
      import java.awt.*;
      import java.io.*;
      
      import javax.swing.*;
      
      /**
       * A file chooser accessory that previews images.
       */
      public class ImagePreviewer extends JLabel
      {
         /**
          * Constructs an ImagePreviewer.
          * @param chooser the file chooser whose property changes trigger an image
          *        change in this previewer
          */
         public ImagePreviewer(JFileChooser chooser)
         {
            setPreferredSize(new Dimension(100, 100));
            setBorder(BorderFactory.createEtchedBorder());
      
            chooser.addPropertyChangeListener(event -> {
               if (event.getPropertyName() == JFileChooser.SELECTED_FILE_CHANGED_PROPERTY)
               {
                  // the user has selected a new file
                  File f = (File) event.getNewValue();
                  if (f == null)
                  {
                     setIcon(null);
                     return;
                  }
      
                  // read the image into an icon
                  var icon = new ImageIcon(f.getPath());
      
                  // if the icon is too large to fit, scale it
                  if (icon.getIconWidth() > getWidth())
                     icon = new ImageIcon(icon.getImage().getScaledInstance(
                           getWidth(), -1, Image.SCALE_DEFAULT));
      
                  setIcon(icon);
               }
            });
         }
      }
      package fileChooser;
      
      import java.io.*;
      
      import javax.swing.*;
      import javax.swing.filechooser.*;
      import javax.swing.filechooser.FileFilter;
      
      /**
       * A frame that has a menu for loading an image and a display area for the
       * loaded image.
       */
      public class ImageViewerFrame extends JFrame
      {
         private static final int DEFAULT_WIDTH = 300;
         private static final int DEFAULT_HEIGHT = 400;
         private JLabel label;
         private JFileChooser chooser;
      
         public ImageViewerFrame()
         {
            setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
      
            // set up menu bar
            var menuBar = new JMenuBar();
            setJMenuBar(menuBar);
      
            var menu = new JMenu("File");
            menuBar.add(menu);
      
            var openItem = new JMenuItem("Open");
            menu.add(openItem);
            openItem.addActionListener(event -> {
               chooser.setCurrentDirectory(new File("."));
      
               // show file chooser dialog
                  int result = chooser.showOpenDialog(ImageViewerFrame.this);
      
                  // if image file accepted, set it as icon of the label
                  if (result == JFileChooser.APPROVE_OPTION)
                  {
                     String name = chooser.getSelectedFile().getPath();
                     label.setIcon(new ImageIcon(name));
                     pack();
                  }
               });
      
            var exitItem = new JMenuItem("Exit");
            menu.add(exitItem);
            exitItem.addActionListener(event -> System.exit(0));
      
            // use a label to display the images
            label = new JLabel();
            add(label);
      
            // set up file chooser
            chooser = new JFileChooser();
      
            // accept all image files ending with .jpg, .jpeg, .gif
            var filter = new FileNameExtensionFilter(
                  "Image files", "jpg", "jpeg", "gif");
            chooser.setFileFilter(filter);
      
            chooser.setAccessory(new ImagePreviewer(chooser));
      
            chooser.setFileView(new FileIconView(filter, new ImageIcon("palette.gif")));
         }
      }

      運行結果:

       

       

       

      測試程序7

      elipse IDE中調試運行教材570頁程序12-24,結合運行結果理解程序;

      了解顏色選擇器的用法。

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

      程序代碼:

      package colorChooser;
      
      import java.awt.Color;
      import java.awt.Frame;
      import java.awt.event.ActionEvent;
      import java.awt.event.ActionListener;
      
      import javax.swing.JButton;
      import javax.swing.JColorChooser;
      import javax.swing.JDialog;
      import javax.swing.JPanel;
      
      /**
      * A panel with buttons to pop up three types of color choosers
      */
      public class ColorChooserPanel extends JPanel
      {
      public ColorChooserPanel()//構建一個初始顏色的顏色選擇器
      {
      JButton modalButton = new JButton("Modal");
      modalButton.addActionListener(new ModalListener());
      add(modalButton);
      
      JButton modelessButton = new JButton("Modeless");
      modelessButton.addActionListener(new ModelessListener());
      add(modelessButton);
      
      JButton immediateButton = new JButton("Immediate");
      immediateButton.addActionListener(new ImmediateListener());
      add(immediateButton);
      }
      
      /**
      * This listener pops up a modal color chooser
      */
      private class ModalListener implements ActionListener
      {
      public void actionPerformed(ActionEvent event)
      {
      Color defaultColor = getBackground();
      Color selected = JColorChooser.showDialog(ColorChooserPanel.this, "Set background",
      defaultColor);
      if (selected != null) setBackground(selected);
      }
      }
      
      /**
      * This listener pops up a modeless color chooser. The panel color is changed when the user
      * clicks the OK button.
      */
      private class ModelessListener implements ActionListener
      {
      private JDialog dialog;
      private JColorChooser chooser;
      
      public ModelessListener()
      {
      chooser = new JColorChooser();
      dialog = JColorChooser.createDialog(ColorChooserPanel.this, "Background Color",
      false /* not modal */, chooser, 
      event -> setBackground(chooser.getColor()), 
      null /* no Cancel button listener */);
      }
      
      public void actionPerformed(ActionEvent event)
      {
      chooser.setColor(getBackground());
      dialog.setVisible(true);
      }
      }
      
      /**
      * This listener pops up a modeless color chooser. The panel color is changed immediately when
      * the user picks a new color.
      */
      private class ImmediateListener implements ActionListener
      {
      private JDialog dialog;
      private JColorChooser chooser;
      
      public ImmediateListener()
      {
      chooser = new JColorChooser();
      chooser.getSelectionModel().addChangeListener(
         event -> setBackground(chooser.getColor()));
      
      dialog = new JDialog((Frame) null, false /* not modal */);
      dialog.add(chooser);
      dialog.pack();
      }
      
      public void actionPerformed(ActionEvent event)
      {
      chooser.setColor(getBackground());
      dialog.setVisible(true);
      }
      }
      }
      package colorChooser;
      
      import javax.swing.*;
      
      /**
      * A frame with a color chooser panel
      */
      public class ColorChooserFrame extends JFrame
      {//設置兩個私有屬性
      private static final int DEFAULT_WIDTH = 300;
      private static final int DEFAULT_HEIGHT = 200;
      
      public ColorChooserFrame()//顏色選擇器
      { 
      setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
      
      // add color chooser panel to frame
      
      ColorChooserPanel panel = new ColorChooserPanel();
      add(panel);
      }
      }
      package colorChooser;
      
      import java.awt.*;
      import javax.swing.*;
      
      /**
      * @version 1.04 2015-06-12
      * @author Cay Horstmann
      */
      public class ColorChooserTest
      {
      public static void main(String[] args)
      {
      EventQueue.invokeLater(() -> {
      JFrame frame = new ColorChooserFrame();//生成ColorChooserFrame類
      frame.setTitle("ColorChooserTest");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//關閉界面操作
      frame.setVisible(true);
      });
      }
      }

      運行結果:

      實驗總結:

              上周繼續學習了有關Swing用戶界面組件的相關知識,對菜單、對話框等的運用有了一定的了解以及一些常用的API。課后通過實驗實例更深入地了解了相關知識,做到了理論知識和實際應用相結合,但總體上來說有些方面還是不太懂,需要自己下去好好下功夫。

      posted @ 2019-12-09 19:49  公海瑜-201871010107  閱讀(249)  評論(1)    收藏  舉報
      主站蜘蛛池模板: 国产蜜臀视频一区二区三区| 久久夜色精品国产亚洲a| 中文字日产幕码三区国产| 国产真实乱人偷精品人妻| 天天摸天天做天天爽水多| 最新精品露脸国产在线| 日韩精品一区二区在线视| 午夜福利在线观看成人| 少妇人妻真实偷人精品| 亚洲熟妇丰满多毛xxxx| 久久精品国产99国产精品澳门| 亚洲高潮喷水无码AV电影| 国产福利在线观看免费第一福利| 久久精品国产一区二区三| 中文字幕网红自拍偷拍视频| 日韩av一区二区三区精品| 婷婷六月天在线| 91麻豆亚洲国产成人久久| 国产成人精品无人区一区| 欧美成人猛片aaaaaaa| 无码一区二区三区视频| 国产精品亚洲二区在线播放| 丹巴县| 日韩无矿砖一线二线卡乱| 不卡一区二区国产精品| 99精品久久久久久久婷婷| 亚洲精品有码在线观看| 野外做受三级视频| 国产成人亚洲综合图区| 亚洲熟妇色自偷自拍另类| 国产系列丝袜熟女精品视频| 中文字幕在线视频不卡一区二区| 亚洲精品沙发午睡系列| 一区二区三区午夜无码视频| 深夜福利资源在线观看| 玩弄放荡人妻少妇系列 | 亚洲一区二区偷拍精品| 蜜臀av久久国产午夜| 自拍偷拍第一区二区三区| 久久香蕉欧美精品| 边吃奶边添下面好爽|