java 實驗6 圖形用戶界面設計試驗(2)


共兩大題 窗體實現(略去測試類即 實例化自定義窗體)

小結:

1. JRadioButton 單選按鈕
  ButtonGroup 按鈕集合(加入單選按鈕)
  清空選項需讓ButtonGroup調用clearSelection()函數
  bg.clearSelection();

2. JCheckBox 多選
  清空選項需實例調用 jcb1.setSelected(false);

3. JComboBox 下拉列表
 利用additem(str)增加選項

4. 實現樹切換后的畫布切換
 JTabbedPane(選項卡) 清空所有組建removeAll();再增加組建

 

1、完成如下登陸界面, 其中用戶名為abc。密碼為1234,登陸成功登陸后彈出消息框,“歡迎您,abc 登陸”;如果密碼輸入錯誤,彈出對話框,顯示“用戶名和密碼錯誤”,並清空輸入的信息。

 

Login窗體類

package login;

import javax.swing.JFrame;

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

import javax.swing.*;


public class Login extends JFrame implements ActionListener{
    private static String USERNAME="abc";
    private static String PASSWORD="1234";

    JButton jb1,jb2;
    JTextField text1,text2;
    JDialog jd;
    Login() {
        setTitle("the login window");
        JLabel label1=new JLabel("username                ");
        JLabel label2=new JLabel("password                ");
        text1=new JTextField(10);
        text2=new JTextField(10);
        jb1=new JButton("confirm");
        jb2=new JButton("cancel");
        jb1.addActionListener(this);
        
        setLayout(new GridLayout(3,1));
        JPanel jp1=new JPanel();
        JPanel jp2=new JPanel();
        JPanel jp3=new JPanel();
        jp1.add(label1);
        jp1.add(text1);
        jp2.add(label2);
        jp2.add(text2);
        jp3.add(jb1);
        jp3.add(jb2);
        add(jp1);
        add(jp2);
        add(jp3);
        setBounds(100,100,300,150);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==jb1);
            if(text1.getText().equals(USERNAME)&&text2.getText().equals(PASSWORD)) {
                JOptionPane.showMessageDialog(this, "輸入正確");
                new Info();
                setVisible(false);
            }
            else{
                JOptionPane.showMessageDialog(this, "用戶名和密碼錯誤");
                text1.setText(null);
                text2.setText(null);
            }
    }
}

 結果

 

2、接第一題,如果登錄成功,顯示下面的界面:

(1)輸入username,sex,department,hobby,telephoneNo, resume,點擊“confirm”按鈕,左邊的信息顯示在右邊的區域,如下圖所示:

(2)點擊“Cancel”,彈出對話框請用戶確認,如果用戶選擇“確定”,就清空左邊和右邊的信息。

(3)點擊“Save”,在控制台顯示:你的學號+你的姓名+“信息已保存”。

(4) 菜單“File”下顯示 “New” 和 “Open”,指定“New”的快捷方式是Ctrl+N,點擊“New”,將下面各輸入部分清空(Sex項與Department項置為默認);點擊“Open”,在控制台顯示:你的學號+你的姓名+“點擊了Open菜單項”。

(5)菜單“Edit”下顯示“Cut”和“Copy”,點擊“Cut”,在控制台顯示:你的學號+你的姓名+“點擊了Cut菜單項”; 點擊“Copy”,在控制台顯示:你的學號+你的姓名+“點擊了Copy菜單項”。

 

 

info消息窗體類(大窗體實現)

package login;


import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;

import javax.swing.*;

public class Info extends JFrame{

    Info(){
        //一些基本組建
        JLabel label1 = new JLabel("Please input your information",Label.LEFT);
        JLabel label2 = new JLabel("username");
        JLabel label3 = new JLabel("sex");
        JLabel label4 = new JLabel("department");
        JLabel label5 = new JLabel("hobby");
        JLabel label6 = new JLabel("telephoneNo");
        JLabel label7 = new JLabel("resume");
        JLabel label8 = new JLabel("your information");
        JTextField text1=new JTextField(20);
        JTextField text2=new JTextField(20);
        JTextArea text3=new JTextArea(20,20);
        JTextArea text4=new JTextArea(100,100);

        JPanel jp1=new JPanel();
        JPanel jp2=new JPanel();
        JPanel jp3=new JPanel();
        JPanel jp4=new JPanel();
        JPanel jp5=new JPanel();
        JPanel jp6=new JPanel();
        JPanel jp7=new JPanel();

        JPanel left=new JPanel();
        JPanel right=new JPanel();
        
        JButton jb1=new JButton("Confirm");
        JButton jb2=new JButton("Cancel");
        JButton jb3=new JButton("Save");
        
        //department下拉列表
        JComboBox<String> box=new JComboBox<>();
        box.addItem("Computer");
        box.addItem("Math");
        box.addItem("Energy");
        box.addItem("Law");
        
        //sex單選
        JRadioButton sex1= new JRadioButton("male");
        JRadioButton sex2= new JRadioButton("female");
        ButtonGroup bg=new ButtonGroup();
        bg.add(sex1);
        bg.add(sex2);
        
        //hobby多選
        JCheckBox jcb1=new JCheckBox("music");
        JCheckBox jcb2=new JCheckBox("reading");
        JCheckBox jcb3=new JCheckBox("cooking");
        
        //設置菜單
        JMenuBar menubar=new JMenuBar();
        JMenu menu1=new JMenu("File");
        JMenu menu2=new JMenu("Edit");
        JMenuItem item1=new JMenuItem("New");
        JMenuItem item2=new JMenuItem("Open");
        JMenuItem item3=new JMenuItem("Cut");
        JMenuItem item4=new JMenuItem("Copy");
        item1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK));
        menu1.add(item1);
        menu1.addSeparator();
        menu1.add(item2);
        menu2.add(item3);
        menu2.addSeparator();
        menu2.add(item4);
        menubar.add(menu1);
        menubar.add(menu2);
        setJMenuBar(menubar);
        item1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
            
                    text1.setText(null);
                    text2.setText(null);
                    text3.setText(null);
                    text4.setText(null);
                    //想重置JRadioButton必讓ButtonGroup調用clearSelection()函數
                    bg.clearSelection();
                    jcb1.setSelected(false);
                    jcb2.setSelected(false);
                    jcb3.setSelected(false);
                }
        });
        item2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("20171335+cf+“點擊了Open菜單項”");        
            }
        });
        item3.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("20171335+cf+“點擊了Cut菜單項”");        
            }
        });
        item4.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("20171335+cf+“點擊了Copy菜單項”");        
            }
        });
        
        //設置左半組件
        jp1.add(sex1);
        jp1.add(sex2);
        jp2.add(jcb1);
        jp2.add(jcb2);
        jp2.add(jcb3);
        
        Box basebox,box1,box2;
        box1=Box.createVerticalBox();
        box2=Box.createVerticalBox();
        basebox=Box.createHorizontalBox();
        
        box1.add(label2);
        box1.add(Box.createVerticalStrut(22));
        box1.add(label3);
        box1.add(Box.createVerticalStrut(22));
        box1.add(label4);
        box1.add(Box.createVerticalStrut(22));
        box1.add(label5);
        box1.add(Box.createVerticalStrut(22));
        box1.add(label6);
        box1.add(Box.createVerticalStrut(180));
        box1.add(label7);

        box2.add(text1);
        box2.add(Box.createVerticalStrut(10));
        box2.add(jp1);
        box2.add(Box.createVerticalStrut(10));
        box2.add(box);
        box2.add(Box.createVerticalStrut(10));
        box2.add(jp2);
        box2.add(Box.createVerticalStrut(10));
        box2.add(text2);
        box2.add(Box.createVerticalStrut(10));
        box2.add(new JScrollPane(text3));
        
        basebox.add(box1);
        basebox.add(Box.createHorizontalStrut(20));
        basebox.add(box2);
        
        jp3.add(jb1);
        jp3.add(jb2);
        jp5.add(jb1);
        jp5.add(jb2);
        
        left.setLayout(new BoxLayout(left, BoxLayout.Y_AXIS));
        left.add(label1);
        left.add(basebox);
        left.add(jp5);
        
        //設置右半組件
        jp6.add(jb3);
        
        right.setLayout(new BoxLayout(right, BoxLayout.Y_AXIS));
        right.add(label8);
        right.add(text4);
        right.add(jp6);
        
        //設置confirm鍵
        jb1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String username = text1.getText();
                String sex ="";
                if(sex1.isSelected())
                    sex=sex1.getText();
                else
                    sex=sex2.getText();
                String department = box.getSelectedItem().toString();
                String hobby="";
                for(Component c:jp2.getComponents()) {
                    if(c instanceof JCheckBox) {
                        if(((JCheckBox)c).isSelected()) {
                            hobby+=((JCheckBox)c).getText();
                            hobby+=",";
                        }
                    }
                }
                String telephonNo=text2.getText();
                String resume=text3.getText();
                String result="my name:       "+username+"\nsex:                "+sex+"\ndepartment:    "
                +department+"\nhobby:            "+hobby+"\ntelephonNo:    "+telephonNo+"\nresume:          "+resume;
                text4.setText(result);    
            }
        });
        
        //設置Cancel鍵
        jb2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                int clean = JOptionPane.showConfirmDialog(null, "Do you confirm to delete it?","Warning",JOptionPane.OK_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE);
                if(clean==JOptionPane.YES_OPTION) {
                    text1.setText(null);
                    text2.setText(null);
                    text3.setText(null);
                    text4.setText(null);
                    //想重置JRadioButton必讓ButtonGroup調用clearSelection()函數
                    bg.clearSelection();
                    jcb1.setSelected(false);
                    jcb2.setSelected(false);
                    jcb3.setSelected(false);
                }
            }
        });
        //設置Save鍵
        jb3.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                Saveinfo.save(text4.getText());
                System.out.println("保存成功");
            }
        });
        
        //整體畫布
        JSplitPane all=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,left,right);
        add(all,BorderLayout.CENTER);

        //設置整體
        setTitle("info");
        setBounds(100,100,800,500);
        setVisible(true);
        validate();
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    }
}

儲存信息類(Save鍵用)

 

package login;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.nio.file.Path;

public class Saveinfo {
    public static void save(String str){
        File directory = new File(".");
        String path = null;
        try {
            path = directory.getCanonicalPath();//獲取當前路徑
            path +="\\info.txt";
            System.out.println(path);
            BufferedWriter  b=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(path)));
            b.write(str);
            b.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

 結果

 

 

3、參照如下界面,利用JTree, JSplitPane, JTable, JTabbedPane完成。

(1) 選中“滬寧高速A段維修工程”,三個頁面如下:

 (2) 選中“滬寧高速B段維修工程”,出現相應的頁面,僅以“專家設置”舉例如下:

(3) 選中任意一個表格,選中一行,在控制台輸出選中行的內容,如下圖選中了“滬寧高速A段維修工程”中“競標單位設置”中的一行:

 在控制台輸出了相應內容:

 

窗體類

package 工程項目招標設置;

import java.awt.BorderLayout;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;

public class Project extends JFrame {


    Project(){
        
        //A“指標設置”表格
        JPanel jp1=new JPanel();
        jp1.setLayout(new BorderLayout());
        Object[] Names1 = {"指標編號", "指標名稱", "是否入選", "指標分值"};
        Object[][] a= {
                {10,"施工性質","入選",20},
                {11,"以往施工項目","入選",20},
                {12,"注冊資金","入選",30},
                {13,"企業總資產","不選",20},
                {14,"公司管理水平","不選",10},
        };
        JTable tabel1=new JTable(a,Names1);
        tabel1.setShowGrid(true);
        tabel1.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e){
            for (int i = 0; i < tabel1.getColumnCount(); i++) 
                System.out.print(tabel1.getModel().getValueAt(tabel1.getSelectedRow(), i)+" ");
            System.out.println();
        }});
        jp1.add(new JScrollPane(tabel1),BorderLayout.NORTH);
        
        
        //A"競標單位設置"表格
        JPanel jp2=new JPanel();
        jp2.setLayout(new BorderLayout());
        Object[] Names2 = {"公司編號", "公司名稱", "法人代表", "成立時間","地址"};
        Object[][] b= {
                {001,"華西滬東建築公司","張三","2000-2-1","上海市浦東新區"},
                {002,"瑞豐建築公司","李四","1998-3-1","上海市浦東新區"}
        };
        JTable tabel2=new JTable(b,Names2);
        tabel2.setShowGrid(true);
        jp2.add(new JScrollPane(tabel2),BorderLayout.NORTH);
        tabel2.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e){
            for (int i = 0; i < tabel2.getColumnCount(); i++) 
                System.out.print(tabel2.getModel().getValueAt(tabel2.getSelectedRow(), i)+" ");
            System.out.println();
        }});
        
        //A“專家設置”表格
        JPanel jp3=new JPanel();
        jp3.setLayout(new BorderLayout());
        Object[] Names3 = {"專家編號", "專家名稱", "性別", "學歷","單位"};
        Object[][] c= {
                {001,"張小三","男","博士","上海建築研究所"},
                {002,"劉芳芳","女","博士","北京建築研究所"}
        };
        JTable tabel3=new JTable(c,Names3);
        tabel3.setShowGrid(true);
        jp3.add(new JScrollPane(tabel3),BorderLayout.NORTH);
        tabel3.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e){
            for (int i = 0; i < tabel3.getColumnCount(); i++) 
                System.out.print(tabel3.getModel().getValueAt(tabel3.getSelectedRow(), i)+" ");
            System.out.println();
        }});
        
        //B“指標設置”表格
        JPanel jp4=new JPanel();
        jp4.setLayout(new BorderLayout());
        Object[] Names4 = {"指標編號", "指標名稱", "是否入選", "指標分值"};
        Object[][] d= {
                {1,"施工性質","不選",30},
                {2,"以往施工項目","入選",40},
                {3,"注冊資金","入選",60},
                {4,"企業總資產","不選",10},
                {5,"公司管理水平","不選",20},
        };
        JTable tabel4=new JTable(d,Names4);
        tabel4.setShowGrid(true);
        jp4.add(new JScrollPane(tabel4),BorderLayout.NORTH);
        tabel4.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e){
            for (int i = 0; i < tabel4.getColumnCount(); i++) 
                System.out.print(tabel4.getModel().getValueAt(tabel4.getSelectedRow(), i)+" ");
            System.out.println();
        }});
        
        //B"競標單位設置"表格
        JPanel jp5=new JPanel();
        jp5.setLayout(new BorderLayout());
        Object[] Names5 = {"公司編號", "公司名稱", "法人代表", "成立時間","地址"};
        Object[][] e= {
                {001,"華東建築公司","張三","2001-2-1","上海市浦東新區"},
                {002,"瑞豐建築公司","李四","2000-3-1","上海市浦東新區"}
        };
        JTable tabel5=new JTable(e,Names5);
        tabel5.setShowGrid(true);
        jp5.add(new JScrollPane(tabel5),BorderLayout.NORTH);
        tabel5.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e){
            for (int i = 0; i < tabel5.getColumnCount(); i++) 
                System.out.print(tabel5.getModel().getValueAt(tabel5.getSelectedRow(), i)+" ");
            System.out.println();
        }});
        
        //B“專家設置”表格
        JPanel jp6=new JPanel();
        jp6.setLayout(new BorderLayout());
        Object[] Names6 = {"專家編號", "專家名稱", "性別", "學歷","單位"};
        Object[][] f= {
                {001,"任芳","男","碩士","華北建築研究所"},
                {002,"劉齊齊","女","博士","華東建築研究所"}
        };
        JTable tabel6=new JTable(f,Names6);
        tabel6.setShowGrid(true);
        jp6.add(new JScrollPane(tabel6),BorderLayout.NORTH);
        tabel6.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e){
            for (int i = 0; i < tabel6.getColumnCount(); i++) 
                System.out.print(tabel6.getModel().getValueAt(tabel6.getSelectedRow(), i)+" ");
            System.out.println();
        }});
        
        //選項卡-收錄表格
        JTabbedPane p=new JTabbedPane(JTabbedPane.NORTH);

        
        
        //“招標項目名”樹
        DefaultMutableTreeNode root = new DefaultMutableTreeNode("招標項目名");
        DefaultMutableTreeNode node1 = new DefaultMutableTreeNode("滬寧高速A段維修工程");
        DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("滬寧高速B段維修工程");
        root.add(node1);
        root.add(node2);
        JTree tree=new JTree(root);
        tree.addTreeSelectionListener(new TreeSelectionListener() {
            @Override
            public void valueChanged(TreeSelectionEvent e) {
                DefaultMutableTreeNode node=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
                if(node.equals(node1)) {
                    p.removeAll();
                    p.add("指標設置",jp1);
                    p.add("競標單位設置",jp2);
                    p.add("專家設置",jp3);
                }
                if(node.equals(node2)) {
                    p.removeAll();
                    p.add("指標設置",jp4);
                    p.add("競標單位設置",jp5);
                    p.add("專家設置",jp6);
                }
            }
        });
        
        
        setTitle("工程項目招標設置");
        JSplitPane jsp=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,tree,p);
        jsp.setDividerLocation(170);
        add(jsp);
        setBounds(100,100,700,400);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

 

 結果

 


免責聲明!

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



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