Java图形界面设计
学一门编程类语言、特别是像 Java 、python 这样具有很强交互的编程类语言,图形界面是不可能避开的,我们呈现给用户的不能是只有我们自己能看懂的,或者是需要有一定编程知识的人才能看懂的应用,做出让所有人都能使用的应用才是面向对象编程存在的意义,下面进行今天的实验内容。
实验内容及要求:
(1) 编写Application程序,在Frame中加入2个按钮(Button)和1个标签(Label),单击两个按钮,显示按钮的标签于Label。
(2) 编写Application程序,在Frame中加入80个按钮,分20行4列,用GridLayout(网格)布局方式,按钮背景为黄色(Color.yellow),按钮文字颜色为红色(Color.red)。
(3) 设计一个简单计算器,在“操作数”标签右侧的两个文本框输入操作数,当单击操作符+,-,×,÷按钮时,对两个操作数进行运算并将结果填入到“结果”标签右侧的文本框中。
实验一:
package test;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class test4 extends JFrame{
//创建JPanle对象
private JPanel jp = new JPanel();
//创建按钮对象
private JButton b1=new JButton("按钮1");
private JButton b2 =new JButton("按钮2");
//创建标签对象
private JLabel j1= new JLabel();
public test4() {
jp.add(b1);
jp.add(b2);
jp.add(j1);
this.add(jp);
this.setTitle("CHEN");
this.setBounds(100,100,400,130);
b1.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
test4.this.j1.setText("按钮一内容");
}
});
b2.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
test4.this.j1.setText("按钮二内容");
}
});
this.setBounds(100,100,400,130);
this.setVisible(true);
}
public static void main(String[] args) {
new test4();
}
}
实验结果:
实验二:
package test;
import java.awt.*;
import javax.swing.*;
public class test5 extends JFrame {
private JPanel jp =new JPanel();
private JButton [] jbArray =new JButton[80];
public test5() {
for(int i=0;i<jbArray.length;i++) {
jbArray[i]=new JButton("按钮"+(i+1));
jbArray[i].setForeground(Color.red);
jbArray[i].setBackground(Color.yellow);
jp.add(jbArray[i]);
jp.setLayout(new GridLayout(20,4));
}
this.add(jp);
this.setTitle("网格布局");
this.setBounds(100,100,450,200);
this.setVisible(true);
}
public static void main(String[] args) {
new test5();
}
}
实验结果:
实验三:
package test;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
class Calculate {
public double cal(double data1, double data2, String op) {
// TODO Auto-generated method stub
double rel = 0;
switch (op) {
case "+":
rel = data1 + data2;
break;
case "-":
rel = data1 - data2;
break;
case "*":
rel = data1 * data2;
break;
case "/":
rel = data1 / data2;
break;
default:
break;
}
return rel;
}
}
public class test7 extends JFrame implements ActionListener{
JLabel label1 = new JLabel("第一位操作数");
JLabel label2 = new JLabel("第二位操作数");
JLabel label3 = new JLabel("计算结果");
JTextField textField1 = new JTextField();
JTextField textField2 = new JTextField();
JTextField textField = new JTextField();
JButton button1 = new JButton("+");
JButton button2 = new JButton("-");
JButton button3 = new JButton("*");
JButton button4 = new JButton("/");
// JButton button = new JButton("计算");
public test7() {
try {
Init();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
private void Init() throws Exception{
// TODO Auto-generated method stub
getContentPane().setLayout(null);
label1.setBounds(new Rectangle(78, 60, 105, 31));
label2.setBounds(new Rectangle(80, 146, 87, 32));
textField1.setBounds(new Rectangle(185, 59, 152, 28));
textField2.setBounds(new Rectangle(187, 143, 151, 30));
button1.addActionListener(this);
button2.addActionListener(this);
button3.addActionListener(this);
button4.addActionListener(this);
// button.addActionListener(this);
textField.setEnabled(false);
textField.setBounds(new Rectangle(189, 196, 150, 30));
label3.setBounds(new Rectangle(81, 196, 10745, 26));
button1.setBounds(new Rectangle(113, 111, 44, 23));
button2.setBounds(new Rectangle(176, 112, 48, 23));
button3.setBounds(new Rectangle(235, 112, 43, 23));
button4.setBounds(new Rectangle(295, 110, 38, 24));
// button.setBounds(new Rectangle(154, 248, 129, 34));
this.getContentPane().add(label1);
this.getContentPane().add(label3);
this.getContentPane().add(textField);
this.getContentPane().add(label2);
this.getContentPane().add(textField2);
this.getContentPane().add(textField1);
this.getContentPane().add(button1);
this.getContentPane().add(button2);
this.getContentPane().add(button3);
this.getContentPane().add(button4);
// this.getContentPane().add(button);
this.setTitle("简易计算器");
this.setVisible(true);
this.setSize(450, 350);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
//获取数据
String d1 = textField1.getText();
String d2 = textField2.getText();
String op = " " ; //运算符号
if (e.getActionCommand().equals("+")) {
op = button1.getText();
} else if (e.getActionCommand().equals("-")) {
op = button2.getText();
} else if (e.getActionCommand().equals("*")) {
op = button3.getText();
} else if (e.getActionCommand().equals("/")) {
op = button4.getText();
}
//将数据转换为double类型进行计算
double data1 = Double.parseDouble(d1);
double data2 = Double.parseDouble(d2);
Calculate calculate = new Calculate();
double result = calculate.cal(data1, data2, op);
textField.setText(String.valueOf(result));
}
public static void main(String[] args) {
new test7();
}
}
实验结果:
实验总结:
e.getActionCommand().equals("文本")
此函数可以去查看按钮是否被点击
button(按钮定义名称).getText()
此函数可以获取按钮上的文本
还有等等十分好用的函数可以满足像 提取选项文本之类的方便函数,需要经常学习,这里我就等用到的时候在谈吧