Java实现GUI编程基本方法都有那些?

Java实现GUI编程基本方法都有那些?,第1张

其实无论在什么平台下,GUI应用程序的基本开发方法都是相似的。一般都包括下面这样四个步骤:

①创建容器

首先要创建一个GUI应用程序,需要创建一个用于容纳所有其它GUI组件元素的载体,Java中称为容器。典型的包括窗口(Window)、框架(Frame/JFrame)、对话框(Dialog/JDialog)、面板(Panel/JPanel)等。只有先创建了这些容器,其它界面元素如按钮(Button/JButton)、标签(Label/JLabel)、文本框(TextField/JTextField)等才有地方放。

②添加组件

为了实现GUI应用程序的功能,为了与用户交换,需要在容器上添加各种组件/控件。这需要根据具体的功能要求来决定用什么组件。例如,如果需要提示信息,可用标签(Label/JLabel)如果需要输入少量文本,可用文本框(TextField/JTextField)如果需要输入较多文本,可用文本区域(TextArea/JTextArea)如果需要输入密码,可用密码域(JPasswordField)等等。

③安排组件

与传统的Windows环境下的GUI软件开发工具不同,为了更好地实现跨平台,Java程序中各组件的位置、大小一般不是以绝对量来衡量,而是以相对量来衡量。例如有时候,程序的组件的位置是按"东/East"、"西/West"、"南/South"、"北/North"、"中 /Center"这种方位来标识的。因此,在组织界面时,除了要考虑所需的组件种类外,还需要考虑如何安排这些组件的位置与大小。这一般是通过设置布局管理器(Layout Manager)及其相关属性来实现的。事实上上述按方位来安排组件就是采用了Java中多种布局管理器里的BorderLayout布局管理器。

④处理事件

为了完成一个GUI应用程序所应具备的功能,除了适当地安排各种组件产生美观的界面外,还需要处理各种界面元素事件,以便真正实现与用户的交换,完成程序的功能。在Java程序中这一般是通过实现适当的事件监听者接口来完成的。比如如果需要响应按钮事件,就需要实现 ActionListener监听者接口如果需要响应窗口事件,就需要实现WindowListener监听者接口。

import java.sql.*

import java.awt.*

import java.awt.event.*

import javax.swing.*class StudentApplication implements ActionListener

{

JFrame fMain

JPanel pan

JLabel labId,labName,labSex,labAge

JTextField texId,texName,texSex,texAge

JButton butQuery,butAdd,butUpdate,butDelete

Connection con

PreparedStatement ps

ResultSet rs

public StudentApplication()

{

try{

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver")

con=DriverManager.getConnection("jdbc:odbc:Hospital","sa","123456")

//Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")

// Connection con=DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433databaseName=Hospital_Tableuser=sapassword=123456")

}catch(Exception er)

{

JOptionPane.showMessageDialog(fMain,er.getMessage())

}

formStudent()

}

public void actionPerformed(ActionEvent e)

{

if(e.getSource()==butQuery)

{

try{

ps=con.prepareStatement("select * from Hospital_Employee where Employee_ID=?")

ps.setString(1,texId.getText())

ResultSet rs= ps.executeQuery()

if(rs.next())

{

texName.setText(rs.getString(2))

texSex.setText(rs.getString(3))

texAge.setText(Integer.toString(rs.getInt(4)))

}

else

{

JOptionPane.showMessageDialog(fMain,"查询失败!")

}

}catch(Exception e1)

{

JOptionPane.showMessageDialog(fMain,e1.getMessage())

}

}

if(e.getSource()==butAdd)

{

try{

ps=con.prepareStatement("insert students values(?,?,?,?)")

ps.setString(1,texId.getText())

ps.setString(2,texName.getText())

ps.setString(3,texSex.getText())

ps.setInt(4,Integer.parseInt(texAge.getText()))

int Ruselt=ps.executeUpdate()

if(Ruselt>0)

{

JOptionPane.showMessageDialog(fMain,"增加成功")

}

else

{

JOptionPane.showMessageDialog(fMain,"增加失败!")

}

}catch(Exception e2)

{

JOptionPane.showMessageDialog(fMain,e2.getMessage())

}

}

if(e.getSource()==butUpdate)

{

try{

ps=con.prepareStatement("update students set stu_name=?,sex=?,age=? where stu_id=?")

ps.setString(1,texName.getText())

ps.setString(2,texSex.getText())

ps.setInt(3,Integer.parseInt(texAge.getText()))

ps.setString(4,texId.getText())

int Ruselt=ps.executeUpdate()

if(Ruselt>0)

{

JOptionPane.showMessageDialog(fMain,"修改成功")

}

else

{

JOptionPane.showMessageDialog(fMain,"修改失败")

}

}catch(Exception e2)

{

JOptionPane.showMessageDialog(fMain,e2.getMessage())

}

}

if(e.getSource()==butDelete)

{

try{

ps=con.prepareStatement("delete students where stu_id=?")

ps.setString(1,texId.getText())

int Ruselt=ps.executeUpdate()

if(Ruselt>0)

{

JOptionPane.showMessageDialog(fMain,"删除成功")

}

else

{

JOptionPane.showMessageDialog(fMain,"删除失败")

}

}catch(Exception e2)

{

JOptionPane.showMessageDialog(fMain,e2.getMessage())

}

}

}

private void formStudent()

{

fMain=new JFrame("学生信息")

pan=new JPanel()

labId=new JLabel("学号")

labName=new JLabel("名字")

labSex=new JLabel("性别")

labAge=new JLabel("年龄")

texId=new JTextField(15)

texName=new JTextField(15)

texSex=new JTextField(6)

texAge=new JTextField(6)

butQuery=new JButton("查询")

butAdd=new JButton("增加")

butUpdate=new JButton("修改")

butDelete=new JButton("删除")

fMain.add(pan)

pan.setLayout(null)

labId.setBounds(10,10,60,25)

labName.setBounds(10,55,60,25)

labSex.setBounds(10,100,60,25)

labAge.setBounds(10,145,60,25)

texId.setBounds(80,10,100,25)

texName.setBounds(80,55,100,25)

texSex.setBounds(80,100,100,25)

texAge.setBounds(80,145,100,25)

butQuery.setBounds(200,10,80,25)

butAdd.setBounds(200,50,80,25)

butUpdate.setBounds(200,100,80,25)

butDelete.setBounds(200,145,80,25)

pan.add(labId)

pan.add(labName)

pan.add(labSex)

pan.add(labAge)

pan.add(texId)

pan.add(texName)

pan.add(texSex)

pan.add(texAge)

pan.add(butQuery)

pan.add(butAdd)

pan.add(butUpdate)

pan.add(butDelete)

fMain.setSize(320,222)

fMain.setVisible(true)

butQuery.addActionListener(this)

butAdd.addActionListener(this)

butUpdate.addActionListener(this)

butDelete.addActionListener(this)

}

public static void main(String[] args)

{

StudentApplication sa=new StudentApplication()

}

}

=====================第一个类=============================

/**

*

* 实现了系统计算器连续按"="和按"+","-","*","/"进行累记运算的模式

*

* */

import javax.swing.*

import java.awt.*

import java.awt.event.*

public class CalculatorFrame extends JFrame {

private JTextField txtDis = new JTextField("0", 16)//显示文本框

private JButton[] btnGrp = new JButton[17]//17个按钮

private JPanel jpnMain = new JPanel()//主面板

private JPanel jpnNorth = new JPanel()//上面板

private JPanel jpnSouth = new JPanel()//下面板

private double numSaved//保存的前一个数

private String operator = ""//保存的运算符号

private String lastPress = ""//上一次按的按钮("数字","运算符" 或 "等号")

/*构造函数*/

public CalculatorFrame() {

//窗口设置

setTitle("计算器")

setSize(210, 250)

buttonInit()//按钮初始化

//主面板设置

add(jpnMain)

jpnMain.setLayout(null)

jpnMain.add(jpnNorth)

jpnMain.add(jpnSouth)

jpnMain.add(btnGrp[15])

btnGrp[15].setBounds(8, 180, 188, 30)//添加“=”按钮

//上面板设置

jpnNorth.setBounds(8, 10, 190, 30)

jpnNorth.add(txtDis)

txtDis.setHorizontalAlignment(JTextField.RIGHT)//设置文本右对齐

txtDis.setEditable(false)

//下面板设置

jpnSouth.setBounds(8, 60, 190, 120)

jpnSouth.setLayout(new GridLayout(4, 4))

addSouthJpn()//添加17个按钮

//添加监听器

addListener()

}

/*17个按钮显示值初始化*/

public void buttonInit() {

for (int i = 0i <10i++) {

btnGrp[i] = new JButton("" + i)

}

btnGrp[10] = new JButton(".")

btnGrp[11] = new JButton("+")

btnGrp[12] = new JButton("-")

btnGrp[13] = new JButton("*")

btnGrp[14] = new JButton("/")

btnGrp[15] = new JButton("=")

btnGrp[16] = new JButton("C")

for (int i = 0i <17i++) {

btnGrp[i].setFont(new Font("Dialog", Font.PLAIN, 18))

}

}

/*按网格顺序添加除“=”外16个按钮*/

public void addSouthJpn() {

int[] index={7,8,9,14,4,5,6,13,1,2,3,12,0,16,10,11}

for(int i=0i<index.lengthi++){

jpnSouth.add(btnGrp[index[i]])

}

}

/*给按钮添加监听器*/

public void addListener() {

//给数字按钮添加监听器,btnGrp[10]是"."号

for (int i = 0i <= 10i++) {

btnGrp[i].addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

String button = ( (JButton) e.getSource()).getText()

//如果有运算 *** 作符或文本框数字为0并且按钮不为“。”

if (lastPress == "运算符" || lastPress == "等号"

|| txtDis.getText().equals("0") &&button != ".") {

txtDis.setText("")//清空文本框

}

if (lastPress == "等号") {

operator = ""//上次按的是=号,这次按数字,清空运算符

}

if (button == "." &&txtDis.getText().indexOf(".") != -1) {

} //这次按的是.文本框内已经包含.这种情况什么都不做,防止.重复

else {

txtDis.setText(txtDis.getText() + button)//文本框添加内容

}

lastPress = "数字"

}

})

}

//给运算 *** 作符按钮添加监听器

for (int i = 11i <= 14i++) {

btnGrp[i].addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

if (operator != "" &&lastPress == "数字") { //运算符不为空并且之前按的是数字

(btnGrp[15].getActionListeners())[0].actionPerformed(e)//手动调用=号的监听响应实现=号功能

}

numSaved = Double.parseDouble(txtDis.getText())//保存当前文本框的数字

operator = ( (JButton) e.getSource()).getText()//保存运算 *** 作符

lastPress = "运算符"//添加运算符标记,下次文本框清空

}

})

}

//给等号按钮添加监听器

btnGrp[15].addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

double numNow = Double.parseDouble(txtDis.getText())//当前文本框的数字

//运算符匹配 *** 作

if (operator.equals("+")) {

txtDis.setText( (numSaved + numNow) + "")

}

else if (operator.equals("-")) {

if (lastPress == "等号") { //累记运算时的算法(一直按等号)

txtDis.setText( (numNow - numSaved) + "")

}

else {

txtDis.setText( (numSaved - numNow) + "")

}

}

else if (operator.equals("*")) {

txtDis.setText( (numSaved * numNow) + "")

}

else if (operator.equals("/")) {

if (lastPress == "等号") { //累记运算时的算法(一直按等号)

txtDis.setText( (numNow / numSaved) + "")

}

else {

txtDis.setText( (numSaved / numNow) + "")

}

}

if (lastPress != "等号") { //是第一次,以后按累记运算

numSaved = numNow//保存数改为后一个数

}

lastPress = "等号"//添加运算符标记,下次文本框清空

}

})

//给复位符“C”按钮添加监听器

btnGrp[16].addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

txtDis.setText("0")

numSaved = 0

operator = ""

lastPress = ""

}

})

}

}

=====================第二个类=============================

import javax.swing.*

public class Test {

public Test() {

CalculatorFrame calframe = new CalculatorFrame()//新窗口

calframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)//设置关闭

calframe.setLocationRelativeTo(null)//窗口置中

calframe.setVisible(true)//显示窗口

calframe.setDefaultLookAndFeelDecorated(false)//使用windows视感

calframe.setResizable(false)//窗口不可调大小

}

public static void main(String[] args) {

Test test = new Test()

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7777632.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存