使用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)
}
}
运行效果图
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)