Java基础 实验八 图形用户界面(文末送彩蛋)

版权声明:@YDDUONG https://blog.csdn.net/y_dd6011/article/details/86375040

  一、实验内容

  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();
    }   
}

三、运行结果

扫描二维码关注公众号,回复: 4893800 查看本文章

送你一份Java基础课程PPT,老师讲的超好,网盘链接:https://pan.baidu.com/s/1FnWr404NxwyzqBPAog74Ng

(若链接失效可发邮件到[email protected]) 

猜你喜欢

转载自blog.csdn.net/y_dd6011/article/details/86375040