Java中怎么新建窗口?我是新手麻烦代码中主要语句解释一下

Java中怎么新建窗口?我是新手麻烦代码中主要语句解释一下,第1张

不知道是不是你说的窗口

使用javaswing JFrame设计窗口 + 布局就可实现,,如下例(添加了详细注释):

import java.awt.BorderLayout

import java.awt.Container

import java.awt.event.ActionEvent

import java.awt.event.ActionListener

import java.awt.event.WindowAdapter

import java.awt.event.WindowEvent

import javax.swing.JButton

import javax.swing.JFrame

import javax.swing.JTextArea

public class JFrameTest extends JFrame implements ActionListener {

private static final long serialVersionUID = -2829899643559384548L

private JButton b1 = null//按钮

private JTextArea jta = null//文本

public JFrameTest() {

Container c = this.getContentPane()

c.setLayout(new BorderLayout())//设置布局方式,BorderLayout东西南北中布局

b1 = new JButton("点击")

b1.addActionListener(this)//为按钮添加监听

c.add(b1, BorderLayout.SOUTH)//添加按钮到c容器中,并分配在容器南(下)方

jta = new JTextArea()

c.add(jta, BorderLayout.CENTER)//添加文本区到c容器中,并分配在居中位置

this.setTitle("按钮事件")//设置窗口标题

this.setSize(300, 300)//设置窗体大小

this.setVisible(true)//窗体设置为显示

// this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)//关闭窗体

//常用的一种关闭窗体的方法

this.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {

System.exit(0)

}

})

}

public void actionPerformed(ActionEvent e) {

//使用判断按钮名称的方法触发事件

if("点击".equals(e.getActionCommand())) {

jta.setText("按钮被点击了!")

}

//也可以获取对象名实现判断

// if(e.getSource() == b1) {

// jta.setText("按钮使用getSource方法被点击了!")

// }

}

public static void main(String[] args) {

new JFrameTest()

}

}

首先分析需要的GUI技术

java中一般使用swing 和awt技术来实现图形界面,Swing组件较多,功能比较强大,所以这里使用Swing组件来实现。窗口使用(JFrame),按钮使用(JButton)。

设想一个符合题目需求的场景

两个窗口关联并且跳转,最常见的场景就是登陆了。

登陆窗口,输入用户名和密码,如果成功就跳转到主窗口

核心逻辑,跳转窗口的关键代码

一般可以隐藏本窗口(setVisible(false)),显示新窗口来实现窗口的跳转。

但是隐藏窗口,会在后面浪费系统资源。

如果不再使用该窗口,应该彻底销毁(dispose()),释放系统资源

代码和注释

LoginFrame 类

import java.awt.*

import java.awt.event.*

import javax.swing.*

//LoginFrame 登陆窗口  功能 实现用户登陆 ,如果成功就跳转

//LoginFrame 继承于窗口类, 并实现ActionListener接口

public class LoginFrame extends JFrame implements ActionListener {

// 申明需要的组件

JButton jb1, jb2//按钮

JTextField jtf1//文本框

JPasswordField jpf1//密码框

public LoginFrame() {

// 窗口属性的设置

setTitle("登陆窗")// 窗口标题

setSize(300, 180)// 窗口大小

setLocationRelativeTo(null)// 窗口居中

setDefaultCloseOperation(EXIT_ON_CLOSE)// 关闭窗口则退出虚拟机

setLayout(new FlowLayout())// 设置布局流式布局

JPanel jp = new JPanel(new GridLayout(4, 1))// 设置面板为表格布局4行1列

// 第一行

JPanel jp1 = new JPanel()

JLabel jl1 = new JLabel("账号 ")

jtf1 = new JTextField(12)

jp1.add(jl1)

jp1.add(jtf1)

jp.add(jp1)

// 第二行

JPanel jp2 = new JPanel()

JLabel jl2 = new JLabel("密码 ")

jpf1 = new JPasswordField(12)

jp2.add(jl2)

jp2.add(jpf1)

jp.add(jp2)

// 第三行

JPanel jp3 = new JPanel()

jb1 = new JButton("登陆")

jb1.addActionListener(this)// 添加动作响应器

jb2 = new JButton("重置")

jb2.addActionListener(this)// 添加动作响应器

jp3.add(jb1)

jp3.add(jb2)

jp.add(jp3)

// 第四行

JPanel jp4 = new JPanel()

JLabel jl3 = new JLabel("提示: 账号 admin 密码 123")

jl3.setForeground(Color.DARK_GRAY)

jp4.add(jl3)

jp.add(jp4)

add(jp)

}

// 动作响应

public void actionPerformed(ActionEvent e) {

String cmd = e.getActionCommand()// 根据动作命令,来进行分别处理

if (cmd.equals("登陆")) {

String id = jtf1.getText()// 取得用户名

String key = new String(jpf1.getPassword())// 取得密码

if (id.equals("admin") && key.equals("123")) {// 判断是否登录成功

// 如果登录成功

setVisible(false)// 本窗口隐藏,

new MainFrame(id).setVisible(true)// 新窗口显示

dispose()//本窗口销毁,释放内存资源

} else {

//如果登录失败  d出提示

JOptionPane.showMessageDialog(this, "用户名或者密码错误.", "通知", JOptionPane.ERROR_MESSAGE)

clearText()//清空文本框 密码框的输入

}

} else if (cmd.equals("重置")) {

clearText()

}

}

private void clearText() {//清空文本框, 密码框的输入

jtf1.setText("")

jpf1.setText("")

}

//main方法, 程序的入口

public static void main(String[] args) {

new LoginFrame().setVisible(true)//创建登录窗口,并可见

}

}

MainFrame类

import java.awt.*

import java.awt.event.*

import javax.swing.*

public class MainFrame extends JFrame {

public MainFrame(String name) {

setTitle("主窗口")//标题

setSize(300, 260)//大小

setLocationRelativeTo(null)//居中

setDefaultCloseOperation(EXIT_ON_CLOSE)

JPanel jp = new JPanel()

JLabel jl1 = new JLabel("欢迎")

JLabel jl2 = new JLabel(name)

jl2.setForeground(Color.BLUE)//设置文本颜色

JLabel jl3 = new JLabel("使用系统.")

jp.add(jl1)

jp.add(jl2)

jp.add(jl3)

add(jp, BorderLayout.NORTH)

JTextArea jta = new JTextArea()

jta.setLineWrap(true)

jta.append("消息提示")

jta.append(" 消息!通知~!")

JScrollPane jsp = new JScrollPane(jta, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED)

add(jsp)

JPanel jp2 = new JPanel()

JButton jb = new JButton("退出")

jb.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

System.exit(0)//退出

}

})

jp2.add(jb)

add(jp2,BorderLayout.SOUTH)

}

}

运行效果图


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

原文地址: http://outofmemory.cn/bake/11562405.html

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

发表评论

登录后才能评论

评论列表(0条)

保存