1. 程式人生 > >Java基礎 實驗八 圖形使用者介面(文末送彩蛋)

Java基礎 實驗八 圖形使用者介面(文末送彩蛋)

  一、實驗內容

  1)程式設計:建立有一個文字框和三個按鈕的小程式。當按下每個按鈕時,使不同的文字顯示在文字框中。
  2)程式設計:建立一使用者登入介面,接受使用者輸入的帳號和密碼,給三次輸入機會。
  3)程式設計:編寫成人標準身高和體重互查的程式。身高和體生在兩個不同的文字框中輸入,要求輸入一個。輸入身高則輸出體重,輸入體重則輸出身高。用一個按鈕啟動互查。互查的公式為: 體重=身高-100。
  4)程式設計:建立三個JSlider滾動條和一個JLabel標籤物件,滾動條用來調整紅、綠、藍三色的比例,每個滾動條加標題邊界、設定刻度  自定)和標註。當拖動滑塊修改三色比例時,變化標籤的背景色。
  5)程式設計:建立一個文字框、三個單選按鈕、一個標籤和一個按鈕,文字框用來輸入自然數N,根據選擇單選按鈕的不同,分別計算:1+2+…N或1*2*…N或1+1/2+1/3+…1/N,計算結果在標籤中顯示。

二、實驗程式碼

1、OneQuestion.java

package exceptioneight;
import java.awt.Container;
import java.awt.FlowLayout;
import static java.awt.FlowLayout.CENTER;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
/**
 *
 * @author 31621
 */
public class OneQuestion extends JFrame{
    private JPanel panel = new JPanel();
    private JPanel pane = new JPanel();
    private JTextArea textArea = new JTextArea(5, 30);//指定初始文字和寬度
    private JButton textOne = new JButton("文字一");
    private JButton textTwo = new JButton("文字二");
    private JButton textThree = new JButton("文字三");
    public OneQuestion() {
        super("顯示不同文字");
        //setBounds(600, 400, 500, 200);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);//關閉視窗,不結束程式
        BoxLayout box = new BoxLayout(this.getContentPane(), BoxLayout.Y_AXIS);
        setLayout(box);//容器佈局為:方框垂直佈局
        
        //控制元件屬性
        panel.setLayout(new FlowLayout(CENTER));
        pane.setLayout(new FlowLayout(CENTER));
        textArea.setEditable(false);//文字框不可編輯
        textArea.setLineWrap(true);
        textArea.setText("                                                                                                                                                           Hello world!");
        
        
        
        //事件
        textOne.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                textArea.setText("文字一111111111111");
            }
        });
        textTwo.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                textArea.setText("文字二2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222");
            }
        });
        textThree.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                textArea.setText("文字三33333333333333");
            }
        });
        
        //佈局
        panel.add(textArea);
        pane.add(textOne);
        pane.add(textTwo);
        pane.add(textThree);
        add(panel);
        add(pane);
        pack();
        setLocation(720, 260);
        setVisible(true);       
    }
}

2、TwoQuestion.java

package exceptioneight;

import java.awt.FlowLayout;
import static java.awt.FlowLayout.CENTER;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

 /**問題二:
  * 建立一使用者登入介面,接受使用者輸入的帳號和密碼,給三次輸入機會。
  */
public class TwoQuestion extends JFrame{
    private int count = 3;//記錄登入的次數
    private JLabel jl1 = new JLabel("使用者名稱:");
    private JLabel jl2 = new JLabel(" 密碼   :");
    private JTextField jtf1 = new JTextField(16);
    private JPasswordField jpf1 = new JPasswordField(16);
    private JButton jb1 = new JButton("登入");
    private JPanel jp1 = new JPanel();
    private JPanel jp2 = new JPanel();
    private FlowLayout fl1 = new FlowLayout(CENTER);
    private BoxLayout bl1 = new BoxLayout(this.getContentPane(), BoxLayout.Y_AXIS);
    public TwoQuestion() {
        super("登入");
        setLayout(bl1);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);//關閉視窗,不結束程式
        jp1.setLayout(fl1);
        jp2.setLayout(fl1);
        //控制元件屬性
        
        //事件
        jb1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                String acc = "yudong";
                String pass = "yudong";
                String account = jtf1.getText();
                char[] password = jpf1.getPassword();
                String newPass = new String(password);
                if(count > 0) {
                    if(account.equals(acc) && pass.equals(newPass)) {
                        JOptionPane.showMessageDialog(null, "登入成功");
                    } else {
                        count--;
                        JOptionPane.showMessageDialog(null, "登入失敗!還剩"+count+"次機會登入!");
                    } 
//                    if(count == 0) {//可以關閉按鈕
//                        jb1.setEnabled(false);
//                    }
                } else {
                    JOptionPane.showMessageDialog(null, "拒絕登入!您超過3次登入失敗!");
                }
            }

        });
        
        //佈局
        jp1.add(jl1);
        jp1.add(jtf1);
        jp2.add(jl2);
        jp2.add(jpf1);
        add(jp1);
        add(jp2);
        add(jb1);
        pack();
        setLocation(720, 260);
        setVisible(true);
    }
    
}

 3、ThreeQuestion.java

package exceptioneight;

import java.awt.FlowLayout;
import static java.awt.FlowLayout.CENTER;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

/**程式設計三:
 * 編寫成人標準身高和體重互查的程式。
 * 身高和體生在兩個不同的文字框中輸入,要求輸入一個。
 * 輸入身高則輸出體重,輸入體重則輸出身高。
 * 用一個按鈕啟動互查。互查的公式為: 體重=身高-100。
 */
public class ThreeQuestion extends JFrame{

    private JLabel jl1 = new JLabel("身高:");
    private JLabel jl2 = new JLabel("體重:");
    private JTextField jtf1 = new JTextField(16);
    private JTextField jtf2 = new JTextField(16);
    private JButton jb1 = new JButton("開始轉換");
    private JPanel jp1 = new JPanel();
    private JPanel jp2 = new JPanel();
    private JPanel jp3 = new JPanel();
    private FlowLayout fl1 = new FlowLayout(CENTER);
    private BoxLayout bl1 = new BoxLayout(this.getContentPane(), BoxLayout.Y_AXIS);
    public ThreeQuestion() {
        super();
        setLayout(bl1);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);//關閉視窗,不結束程式
        jp1.setLayout(fl1);
        jp2.setLayout(fl1);
        jp3.setLayout(fl1);
        //控制元件屬性
        
        //事件
        jb1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                String height = jtf1.getText();
                String weight = jtf2.getText();
                if(!height.equals("")) {
                    int h = Integer.parseInt(height);
                    jtf2.setText(String.valueOf((h - 100)));
                } else {
                    int w = Integer.parseInt(weight);
                    jtf1.setText(String.valueOf((w + 100)));
                }
            }
        });
        
        //佈局
        jp1.add(jl1);
        jp1.add(jtf1);
        jp2.add(jl2);
        jp2.add(jtf2);
        jp3.add(jb1);
        add(jp1);
        add(jp2);
        add(jp3);
        pack();
        setLocation(720, 260);
        setVisible(true);
    }
}

4、NewFourQuestion.java

package exceptioneight;

import java.awt.Color;
import java.awt.FlowLayout;
import static java.awt.FlowLayout.CENTER;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.logging.Level;
import java.util.logging.Logger;
//import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

/**程式設計四:
 * 建立三個JSlider滾動條和一個JLabel標籤物件,
 * 滾動條用來調整紅、綠、藍三色的比例,每個滾動條加標題邊界、設定刻度(自定)和標註。
 * 當拖動滑塊修改三色比例時,變化標籤的背景色。
 */
public class NewFourQuestion extends JFrame{
    JLabel jl0 = new JLabel("                                       ");
    JLabel jl1 = new JLabel("紅:");
    JLabel jl2 = new JLabel("綠:");
    JLabel jl3 = new JLabel("藍:");
    JSlider js1 = new JSlider(0, 255);//設定最小值和最大值
    JSlider js2 = new JSlider(0, 255);
    JSlider js3 = new JSlider(0, 255);
    JPanel jp0 = new JPanel();
    JPanel jp1 = new JPanel();
    JPanel jp2 = new JPanel();
    JPanel jp3 = new JPanel();
    FlowLayout fl  = new FlowLayout(CENTER);
    
    public NewFourQuestion() {
        super("RGB");
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);//關閉視窗,不結束程式
        BoxLayout box = new BoxLayout(this.getContentPane(), BoxLayout.Y_AXIS);
        setLayout(box);//容器佈局為:方框垂直佈局
        //屬性:
        jp0.setLayout(fl);//面板佈局
        jp1.setLayout(fl);
        jp2.setLayout(fl);
        jp3.setLayout(fl);
        js1.setMajorTickSpacing(50);//設定滾動條
        js1.setMinorTickSpacing(10);
        js1.setPaintTicks(true);
        js1.setPaintLabels(true);
        js2.setMajorTickSpacing(50);
        js2.setMinorTickSpacing(20);
        js2.setPaintTicks(true);
        js2.setPaintLabels(true);
        js3.setMajorTickSpacing(50);
        js3.setMinorTickSpacing(30);
        js3.setPaintTicks(true);
        js3.setPaintLabels(true);
        jl0.setOpaque(true);//不透明
        jl0.setBackground(new Color(150, 150, 150));
        js1.addChangeListener(new ChangeListener() {
            public void stateChanged(ChangeEvent e) {
                int r = js1.getValue();
                int g = js2.getValue();
                int b = js3.getValue();
                jl0.setBackground(new Color(r, g, b));
            }
        });
        js2.addChangeListener(new ChangeListener() {
            public void stateChanged(ChangeEvent e) {
                int r = js1.getValue();
                int g = js2.getValue();
                int b = js3.getValue();
                jl0.setBackground(new Color(r, g, b));
            }
        });
        js3.addChangeListener(new ChangeListener() {
            public void stateChanged(ChangeEvent e) {
                int r = js1.getValue();
                int g = js2.getValue();
                int b = js3.getValue();
                jl0.setBackground(new Color(r, g, b));
            }
        });

        
        //佈局
        jp0.add(jl0);
        jp1.add(jl1);
        jp1.add(js1);
        jp2.add(jl2);
        jp2.add(js2);
        jp3.add(jl3);
        jp3.add(js3);
        add(jp0);
        add(jp1);
        add(jp2);
        add(jp3);
        pack();
        setLocation(720, 260);
        setVisible(true);
    }
}

5、NewFiveQuestion.java

package exceptioneight;

import java.awt.Color;
import java.awt.FlowLayout;
import static java.awt.FlowLayout.CENTER;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;

/**程式設計五:
 *建立一個文字框、三個單選按鈕、一個標籤和一個按鈕,
 * 文字框用來輸入自然數N,根據選擇單選按鈕的不同,
 * 分別計算:1+2+…N或1*2*…N或1+1/2+1/3+…1/N,
 * 計算結果在標籤中顯示。
 */
public class NewFiveQuestion extends JFrame {
    private JTextField jTextField1 = new JTextField(16);
    private JLabel jLabel1 = new JLabel("請輸入自然數N:");
    private JLabel jLabel2 = new JLabel("計算結果為:  ");
    private JPanel jpane0 = new JPanel();
    private JPanel jpane1 = new JPanel();
    private JPanel jpane2 = new JPanel();
    private JPanel jpane3 = new JPanel();
    private ButtonGroup buttonGroup = new ButtonGroup();//單選按鈕組
    private JRadioButton jRadioButton1 = new JRadioButton("1+2+…N");
    private JRadioButton jRadioButton2 = new JRadioButton("1*2*…N");
    private JRadioButton jRadioButton3 = new JRadioButton("1+1/2+1/3+…1/N");
    private FlowLayout fl  = new FlowLayout(CENTER);
    private BoxLayout box = new BoxLayout(this.getContentPane(), BoxLayout.Y_AXIS);
    private String nStr;
    private int nInt;
    
    public NewFiveQuestion() {
        super();
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);//關閉視窗,不結束程式
        setLayout(box);//容器佈局為:方框垂直佈局
        
        //屬性
        jpane1.setLayout(fl);
        jpane2.setLayout(fl);
        jpane3.setLayout(fl);
        buttonGroup.add(jRadioButton1);
        buttonGroup.add(jRadioButton2);
        buttonGroup.add(jRadioButton3);
        
        //事件
        jRadioButton1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent evt) {
                nStr = jTextField1.getText();
                if(!nStr.equals("") ) {
                    nInt = Integer.parseInt(nStr);
                } else {
                    nInt = -1;
                }
                jLabel2.setText("計算結果為:" + String.valueOf(One(nInt)));
            }
        });
        jRadioButton2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                nStr = jTextField1.getText();
                if(!nStr.equals("") ) {
                    nInt = Integer.parseInt(nStr);
                } else {
                    nInt = -1;
                }
                jLabel2.setText("計算結果為:" + String.valueOf(Two(nInt)));
            }
        });
        jRadioButton3.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                nStr = jTextField1.getText();
                if(!nStr.equals("") ) {
                    nInt = Integer.parseInt(nStr);
                } else {
                    nInt = -1;
                }
                jLabel2.setText("計算結果為:" + String.valueOf(Three(nInt)));
            }
        });
        //佈局
        jpane0.add(jLabel1);
        jpane1.add(jTextField1);
        jpane2.add(jRadioButton1);
        jpane2.add(jRadioButton2);
        jpane2.add(jRadioButton3);
        jpane3.add(jLabel2);
        add(jpane0);
        add(jpane1);
        add(jpane2);
        add(jpane3);
        pack();
        setLocation(720, 260);
        setVisible(true);
    }
    /**
     * 1+2+…N
     */
    public int One(int n) {
        if(n < 1) return 0;
        int sum = 0;
        for(int i = 1; i <= n; i++){
            sum += i;
        }
        return sum;
    }
    /**
     * 1*2*…N
     */
    public int Two(int n) {
        if(n < 1) return 0;
        int sum = 1;
        for(int i = 1; i <= n; i++){
            sum *= i;
        }
        return sum;
    }
    /**
     * 1+1/2+1/3+…1/N
     */
    public double Three(int n) {
        if(n < 1) return 0;
        double sum = 0;
        for(int i = 1; i <= n; i++){
            sum += 1.0/i;
        }
        return sum;
    }
}

6、ExceptionEight.java

package exceptioneight;

import java.awt.FlowLayout;
import static java.awt.FlowLayout.CENTER;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;

/**
 *實驗八 主程式
 */
public class ExceptionEight extends JFrame{
    private JTextArea textArea = new JTextArea(13, 50);//指定初始文字和寬度
    private JButton jButton1 = new JButton("程式設計一");
    private JButton jButton2 = new JButton("程式設計二");
    private JButton jButton3 = new JButton("程式設計三");
    private JButton jButton4 = new JButton("程式設計四");
    private JButton jButton5 = new JButton("程式設計五");
    private JPanel jPanel1 =new JPanel();
    private JPanel jPanel2 =new JPanel();
    private FlowLayout fl  = new FlowLayout(CENTER);
    private BoxLayout box = new BoxLayout(this.getContentPane(), BoxLayout.Y_AXIS);
    public ExceptionEight() {
        super();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//關閉視窗,就結束程式
        setLayout(box);//容器佈局為:方框垂直佈局
        
        //控制元件屬性
        jPanel1.setLayout(fl);
        jPanel2.setLayout(fl);
        textArea.setEditable(false);//文字框不可編輯
        textArea.setLineWrap(true);//自動換行
        textArea.setText("            實驗八\n          (1)程式設計:建立有一個文字框和三個按鈕的小程式。當按下每個按鈕時,使不同的文字顯示在文字框中。\n" +
"          (2)程式設計:建立一使用者登入介面,接受使用者輸入的帳號和密碼,給三次輸入機會。\n" +
"          (3)程式設計:編寫成人標準身高和體重互查的程式。身高和體生在兩個不同的文字框中輸入,要求輸入一個。輸入身高則輸出體重,輸入體重則輸出身高。用一個按鈕啟動互查。互查的公式為: 體重=身高-100。\n" +
"          (4)程式設計:建立三個JSlider滾動條和一個JLabel標籤物件,滾動條用來調整紅、綠、藍三色的比例,每個滾動條加標題邊界、設定刻度(自定)和標註。當拖動滑塊修改三色比例時,變化標籤的背景色。\n" +
"          (5)程式設計:建立一個文字框、三個單選按鈕、一個標籤和一個按鈕,文字框用來輸入自然數N,根據選擇單選按鈕的不同,分別計算:1+2+…N或1*2*…N或1+1/2+1/3+…1/N,計算結果在標籤中顯示。");
        //事件
        jButton1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                /**程式設計一:
                * 建立有一個文字框和三個按鈕的小程式。
                * 當按下每個按鈕時,使不同的文字顯示在文字框中。
                 */
                new OneQuestion();
            }
        });
        jButton2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                /**程式設計二:
                * 建立一使用者登入介面,接受使用者輸入的帳號和密碼,給三次輸入機會。
                 */
                new TwoQuestion();   
            }
        });
        jButton3.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                /**程式設計三:
                * 編寫成人標準身高和體重互查的程式。
                * 身高和體生在兩個不同的文字框中輸入,要求輸入一個。
                * 輸入身高則輸出體重,輸入體重則輸出身高。
               * 用一個按鈕啟動互查。互查的公式為: 體重=身高-100。
               */
              new ThreeQuestion();
            }
        });        
        jButton4.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                /**程式設計四
                * 建立三個JSlider滾動條和一個JLabel標籤物件,
                * 滾動條用來調整紅、綠、藍三色的比例,每個滾動條加標題邊界、設定刻度(自定)和標註。
                * 當拖動滑塊修改三色比例時,變化標籤的背景色。
                */
                new NewFourQuestion();
            }
        }); 
        jButton5.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                /**程式設計五
                 * 建立一個文字框、三個單選按鈕、一個標籤和一個按鈕,
                 * 文字框用來輸入自然數N,根據選擇單選按鈕的不同,
                 * 分別計算:1+2+…N或1*2*…N或1+1/2+1/3+…1/N,
                 * 計算結果在標籤中顯示。
                 */
                new NewFiveQuestion();
            }
        });
        //佈局
        jPanel1.add(textArea);
        jPanel2.add(jButton1);
        jPanel2.add(jButton2);
        jPanel2.add(jButton3);
        jPanel2.add(jButton4);
        jPanel2.add(jButton5);
        add(jPanel1);
        add(jPanel2);
        pack();
        setLocation(420, 220);
        setVisible(true);
    }
    public static void main(String[] args) {
      new ExceptionEight();
    }   
}

三、執行結果

送你一份Java基礎課程PPT,老師講的超好,網盤連結:https://pan.baidu.com/s/1FnWr404NxwyzqBPAog74Ng

(若連結失效可發郵件到[email protected])