java 實驗5 圖形用戶界面設計試驗


 

 

常用布局

1)、流布局:

  FlowLayout 從左到右,自上而下方式在容器中排列,控件的大小不會隨容器大小變化.

       容器.setLayout(new FlowLayout(FlowLayout.LEFT));

2)、網格布局:

  GridLayout 按照指定行數與列數,將容器分成大小相等的單元格每個單元格放置一個控件. 不能將控件放在指定單元格

     容器.setLayout(new GridLayout(3,4,10,15));

3)、邊界布局:

  BorderLayout 將容器分成東、西、南、北、中五個部分

     容器.setLayout(new BorderLayout());

  窗口的內容面板默認布局就是邊界布局。

  容器.add(控件,BorderLayout.NORTH);

4)、混合布局:

  使用JPanel,將多個布局組合在一起使用

5)、絕對布局 null:

  以坐標定位

    容器.setLayout(null);

    每個控件在放置在容器之前,必須設置其邊界 setBounds(x,y,width,height);

  btn.setBounds(10,100,30,60);

常用事件

1)、事件源 EventSource:能夠觸發事件控件 如:JButton,JTextField,JFrame,JComboBox,....

2)、事件 Event:ActionEvent,KeyEvent,WindowEvent,TextEvent,...

3)、事件偵聽者Listener(接口)  ActionListener,WindowListener,...

      class A implements ActionListener{

        public void actionPerformed(ActionEvent e){

         ....

        }

      }

      A lis=new A();

4)、事件處理函數

      public void actionPerformed(ActionEvent e){

         ....

      }

  事件流程:事件源觸發事件-->事件源偵聽者接收事件-->自動調用相應事件處理函數.

實踐編程

1.在應用程序窗體中安排1個文本框,一個標簽。在文本框輸入一個數字(0-9),按回車鍵,在標簽處顯示對應的英文單詞。 0---zero,1---one,....

窗體類:

package 簡單數字對應窗體;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Numcompare extends JFrame{
    JTextField text;
    JLabel label;
    Numcompare(){
        setTitle("Number change");
        //限制輸入一個數字
        text=new JTextField(10);
        label=new JLabel();
        label.setText("請輸入0-9的數字");
        text.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            String getstr=text.getText();    
            String showstr=null;
            switch (getstr) {
                case "0":
                    showstr="zero";
                    break;
                case "1":
                    showstr="one";
                    break;
                case "2":
                    showstr="two";
                    break;
                case "3":
                    showstr="three";
                    break;
                case "4":
                    showstr="four";
                    break;
                case "5":
                    showstr="five";
                    break;
                case "6":
                    showstr="six";
                    break;
                case "7":
                    showstr="seven";
                    break;
                case "8":
                    showstr="eight";
                    break;
                case "9":
                    showstr="nine";
                    break;
                default:
                    showstr=("請輸入0-9的數字");
                    break;
                }
            label.setText(showstr);
            text.setText(null);
            }
        });
        setLayout(new FlowLayout());
        add(text);
        add(label);
        setBounds(100,100,460,190);
        setVisible(true);
        validate();
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);;    
    }
}

 實現類(注:以下省略實現類--實例化自定義窗體)

package 簡單數字對應窗體;
public class test {
public static void main(String[] args) {
   new Numcompare();
}
}

 

結果:

2.在應用程序窗體中安排兩個文本框分別用來輸入兩個整數,兩個按鈕分別為 “+”,“*”,一個結果標簽。點擊按紐“+”將兩文本框的數據做加法運算;點擊按鈕“*”做乘法運算,將結果顯示在標簽中。

 

窗體類:

package 簡單計算窗體;
import java.awt.event.*;
import java.math.BigInteger;
import java.awt.*;
import javax.swing.*;
public class Caculate extends JFrame{
    JTextArea text1,text2;
    JButton jb1,jb2;
    JLabel label;
    Caculate(){
        text1=new JTextArea(2,4);
        text2=new JTextArea(2,4);
        jb1=new JButton("+");
        jb2=new JButton("*");
        label=new JLabel();
        JSplitPane p1;
        JPanel p2=new JPanel();
        jb1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String n1=text1.getText();
                String n2=text2.getText();
                try {
                    BigInteger num1=new BigInteger(n1);
                    BigInteger num2=new BigInteger(n2);
                    label.setText((num1.add(num2)).toString());
                }catch (Exception ee) {
                    label.setText("請輸入整數");
                    text1.setText(null);
                    text2.setText(null);            
                }
            }
        });
        jb2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String n1=text1.getText();
                String n2=text2.getText();
                try {
                    BigInteger num1=new BigInteger(n1);
                    BigInteger num2=new BigInteger(n2);
                    label.setText((num1.multiply(num2)).toString());
                }catch (Exception ee) {
                    label.setText("請輸入整數");
                    text1.setText(null);
                    text2.setText(null);            
                }
            }
        });
        setLayout(new GridLayout(3,1));
        p1=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,text1,text2);
        p1.setDividerLocation(117);
        add(p1);
        p2.setLayout(new GridLayout(1,2));
        p2.add(jb1);
        p2.add(jb2);
        add(p2);
        add(label);
        setBounds(100,100,260,190);
        setVisible(true);
        validate();
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    }

}

結果:

 

 

3.設計合理的布局生成下圖所示的圖形界面,並編寫事件處理程序實現以下功能:按“產生”按鈕,產生兩個隨機數並分別顯示在“數字一”和“數字二”對應的文本框內,按“計算”按鈕,計算產生的這兩個隨機數之和,並顯示在“結果”對應的文本框內。

 

窗體類

package 隨機數和;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.math.BigDecimal;
import javax.swing.*;
public class RandomAdd extends JFrame{
    JLabel label1=new JLabel("數字一");
    JLabel label2=new JLabel("數字二");
    JLabel label3=new JLabel("結果");
    JButton jb1=new JButton("產生");
    JButton jb2=new JButton("計算");                
    RandomAdd(){
        setTitle("隨機生成數 相加計算");
        JTextArea ja1=new JTextArea(2,4);
        JTextArea ja2=new JTextArea(2,4);
        JTextArea ja3=new JTextArea(2,4);
        Box basebox,box1,box2;
        jb1.addActionListener(new ActionListener() {    
            @Override
            public void actionPerformed(ActionEvent e) {
                ja1.setText(Math.random()*100+"");
                ja2.setText(Math.random()*100+"");
                ja3.setText(null);
            }
        });
        jb2.addActionListener(new ActionListener() {    
            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    BigDecimal num1 = new BigDecimal(ja1.getText());
                    BigDecimal num2 = new BigDecimal(ja2.getText());
                    ja3.setText(num1.add(num2).toString());
                }catch (Exception ee) {
                    ja3.setText("請點擊產生鍵");
                }
            }
        });
        
        box1=Box.createVerticalBox();
        box1.add(label1);
        box1.add(Box.createHorizontalStrut(8));
        box1.add(label2);
        box1.add(Box.createHorizontalStrut(8));
        box1.add(label3);
        box1.add(Box.createHorizontalStrut(8));
        box2=Box.createVerticalBox();
        box2.add(ja1);
        box2.add(Box.createHorizontalStrut(8));
        box2.add(ja2);
        box2.add(Box.createHorizontalStrut(8));
        box2.add(ja3);
        box2.add(Box.createHorizontalStrut(8));
        basebox=Box.createHorizontalBox();
        basebox.add(box1);
        basebox.add(Box.createHorizontalStrut(80));
        basebox.add(box2);
        
        setLayout(new GridLayout(2,1));
        JPanel jp=new JPanel();
        add(basebox);
        jp.add(jb1);
        jp.add(jb2);
        add(jp);
        setBounds(100,100,260,190);
        setVisible(true);
        validate();
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    }
}

結果

 

4、編寫程序實現如下界面,實現事件如果按下座位i 就在控制台中顯示“座位i被選中” 例如按下 “座位0“,則輸出座位0被選中”。

 窗體類

 

package 選座位;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.*;

import javax.swing.*;
public class ChooseChair extends JFrame implements ActionListener{
    ChooseChair(){
        JButton jb0=new JButton("座位0");
        JButton jb1=new JButton("座位1");
        JButton jb2=new JButton("座位2");
        JButton jb3=new JButton("座位3");
        JButton jb4=new JButton("座位4");
        JButton jb5=new JButton("座位5");
        jb0.addActionListener(this);
        jb1.addActionListener(this);
        jb2.addActionListener(this);
        jb3.addActionListener(this);
        jb4.addActionListener(this);
        jb5.addActionListener(this);
        JLabel label=new JLabel("講台",JLabel.CENTER);
        JPanel jp=new JPanel();
        jp.setLayout(new GridLayout(2,3));
        jp.add(jb0);
        jp.add(jb1);
        jp.add(jb2);
        jp.add(jb3);
        jp.add(jb4);
        jp.add(jb5);
        add(jp,BorderLayout.CENTER);
        add(label,BorderLayout.NORTH);
        setBounds(100,100,260,190);
        setVisible(true);
        validate();
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println(e.getActionCommand()+"被選中");
    } 
}

結果:

 

 

 

5、完成以下窗體制作

 窗體類

 

 

package 圖書館辦證;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class LibraryRegister extends JFrame{
    LibraryRegister(){
        setTitle("圖書館辦理");
        JLabel label0=new JLabel("圖書證注冊");
        JLabel label1=new JLabel("姓名:");
        JLabel label2=new JLabel("性別:");
        JLabel label3=new JLabel("身份:");
        JLabel label4=new JLabel("單位:");
        JLabel label5=new JLabel("證件號碼:");
        JLabel label6=new JLabel("注冊日期:");
        JLabel label7=new JLabel("有效日期:");
        JTextField ja1=new JTextField();
        JTextArea ja2=new JTextArea(1,1);
        JTextArea ja3=new JTextArea(1,1);
        JTextArea ja4=new JTextArea(1,1);
        JComboBox jm1=new JComboBox();
        JComboBox jm2=new JComboBox();
        JComboBox jm3=new JComboBox();

        
        
        jm1.addItem("男");
        jm1.addItem("女");
        jm2.addItem("學生");
        jm2.addItem("老師");
        jm3.addItem("計算機系");
        jm3.addItem("英語系");
        jm3.addItem("國交系");
        JPanel jp1=new JPanel();
        JPanel jp2=new JPanel();

        JButton jb1=new JButton("添加");
        JButton jb2=new JButton("刪除");
        JButton jb3=new JButton("撤銷");
        JButton jb4=new JButton("退出");
        Box basebox,box1,box2;
        
        //上部
        jp1.add(label0);
        
        
        //中部
        box1=Box.createVerticalBox();
        box1.add(label1);
        box1.add(Box.createVerticalStrut(15));
        box1.add(label2);
        box1.add(Box.createVerticalStrut(15));
        box1.add(label3);
        box1.add(Box.createVerticalStrut(15));
        box1.add(label4);
        box1.add(Box.createVerticalStrut(15));
        box1.add(label5);
        box1.add(Box.createVerticalStrut(15));
        box1.add(label6);
        box1.add(Box.createVerticalStrut(15));
        box1.add(label7);
        box2=Box.createVerticalBox();
        box2.add(ja1);
        box2.add(Box.createVerticalStrut(8));
        box2.add(jm1);
        box2.add(Box.createVerticalStrut(8));
        box2.add(jm2);
        box2.add(Box.createVerticalStrut(8));
        box2.add(jm3);
        box2.add(Box.createVerticalStrut(8));
        box2.add(ja2);
        box2.add(Box.createVerticalStrut(8));
        box2.add(ja3);
        box2.add(Box.createVerticalStrut(8));
        box2.add(ja4);
        basebox=Box.createHorizontalBox();
        basebox.add(box1);
        basebox.add(Box.createHorizontalStrut(200));
        basebox.add(box2);

        
        //底部按鈕 懶得實現
        jp2.add(jb1);
        jp2.add(jb2);
        jp2.add(jb3);
        jp2.add(jb4);

        
        setLayout(new BorderLayout());
        add(jp1,BorderLayout.NORTH);

        add(basebox);
        add(jp2,BorderLayout.SOUTH);
        setBounds(100,100,500,325);
        setVisible(true);
        validate();
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    }
}

結果

 

6、運用Swing控件完成下題

 

package 借用物品;

import java.awt.Dimension;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class BorrowItem extends JFrame{
    BorrowItem(){
        setTitle("借用物品");
        JLabel label1=new JLabel("員工編號:");
        JLabel label2=new JLabel("借用器具:");
        JLabel label3=new JLabel("借用日期:");
        JLabel label4=new JLabel("歸還日期:");
        JLabel label5=new JLabel("借用原因:");
        JTextField text1=new JTextField(9);
        JTextField text2=new JTextField(9);
        JTextField text3=new JTextField(9);
        JTextField text4=new JTextField(9);
        JTextField text5=new JTextField(25);
        JButton jb1=new JButton("確定");
        JButton jb2=new JButton("取消");
        Dimension preferredSize = new Dimension(160,30);//設置尺寸
        jb1.setPreferredSize(preferredSize );
        jb2.setPreferredSize(preferredSize );
        
        setLayout(new GridLayout(4,1));
        JPanel jp1=new JPanel();
        JPanel jp2=new JPanel();
        JPanel jp3=new JPanel();
        JPanel jp4=new JPanel();
        jp1.add(label1);
        jp1.add(text1);
        jp1.add(label2);
        jp1.add(text2);
        jp2.add(label3);
        jp2.add(text3);
        jp2.add(label4);
        jp2.add(text4);
        jp3.add(label5);
        jp3.add(text5);
        jp4.add(jb1);
        jp4.add(jb2);
        
        add(jp1);
        add(jp2);
        add(jp3);
        add(jp4);

        setBounds(100,100,350,180);
        setVisible(true);
        validate();
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        
    }
}

結果

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM