登入界面怎么做的,讲讲思路和实现流程
制作登录界面
/MainFrame.java import javax.swing.*; import java.awt.*; import java.awt.event.*; public class MainFrame extends JFrame implements ActionListener{ private Container cont; private JPanel panelMenu; private JPanel panelToolBar; private JPanel panelCompent; private JButton btnLeft; private JButton btnCenter; private JButton btnRight; private JButton btnBorder; private JButton btnGrid; private JLabel labHit; private JMenuBar menuBar; private JMenu menuOperation; private JMenu menuHelp; private JMenuItem mItemFlowLeft; private JMenuItem mItemFlowCenter; private JMenuItem mItemFlowRight; private JMenuItem mItemBorder; private JMenuItem mItemGrid; private JToolBar toolBar; private JButton tBtnLeft; private JButton tBtnCenter; private JButton tBtnRight; private JButton tBtnBorder; private JButton tBtnGrid; public MainFrame(){ this.setTitle("第一个界面"); this.setBounds(300, 300, 600, 450); this.setDefaultCloseOperation(this.EXIT_ON_CLOSE); cont = this.getContentPane(); // cont.setLayout(new GridLayout(3, 9)); cont.setLayout(null); initPanel(); initMenu(); initToolBar(); initCompent(); addMenu(); addCompent(); // addBorderCompent(); this.setVisible(true); } public void initPanel(){ panelMenu = new JPanel(); panelMenu.setLayout(new FlowLayout(FlowLayout.LEFT)); panelMenu.setBounds(0, 0, 600, 30); panelToolBar = new JPanel(); panelToolBar.setLayout(new FlowLayout(FlowLayout.LEFT)); panelToolBar.setBounds(0, 30, 600, 50); panelCompent = new JPanel(); panelCompent.setLayout(new GridLayout(3, 2)); panelCompent.setBounds(0, 80, 600, 350); cont.add(panelMenu); cont.add(panelToolBar); cont.add(panelCompent); } public void initMenu(){ menuBar = new JMenuBar(); menuOperation = new JMenu("布局操作"); menuHelp = new JMenu("帮助"); mItemFlowLeft = new JMenuItem("流式左布局"); mItemFlowLeft.addActionListener(this); mItemFlowCenter = new JMenuItem("流式居中"); mItemFlowCenter.addActionListener(this); mItemFlowRight = new JMenuItem("流式右布局"); mItemFlowRight.addActionListener(this); mItemBorder = new JMenuItem("边界布局"); mItemBorder.addActionListener(this); mItemGrid = new JMenuItem("网格布局"); mItemGrid.addActionListener(this); } public void initToolBar(){ toolBar = new JToolBar(); tBtnLeft = new JButton(new ImageIcon("COPY.jpg")); tBtnLeft.addActionListener(this); tBtnLeft.setToolTipText("流式左布局"); tBtnCenter = new JButton(new ImageIcon("HELP.jpg")); tBtnCenter.addActionListener(this); tBtnCenter.setToolTipText("流式居中"); tBtnRight = new JButton(new ImageIcon("find.jpg")); tBtnRight.addActionListener(this); tBtnRight.setToolTipText("流式右布局"); tBtnBorder = new JButton(new ImageIcon("CUT.jpg")); tBtnBorder.addActionListener(this); tBtnBorder.setToolTipText("边界布局"); tBtnGrid = new JButton(new ImageIcon("OPEN.jpg")); tBtnGrid.addActionListener(this); tBtnGrid.setToolTipText("网格布局"); toolBar.add(tBtnLeft); toolBar.add(tBtnCenter); toolBar.add(tBtnRight); toolBar.add(tBtnBorder); toolBar.add(tBtnGrid); panelToolBar.add(toolBar); } public void initCompent(){ btnLeft = new JButton("LEFT"); btnLeft.addActionListener(this); btnRight = new JButton("RIGHT"); btnRight.addActionListener(this); btnCenter = new JButton("CENTER"); btnCenter.addActionListener(this); btnBorder = new JButton("BORDER"); btnBorder.addActionListener(this); btnGrid = new JButton("GRID"); btnGrid.addActionListener(this); labHit = new JLabel("提示"); } public void addMenu(){ menuOperation.add(mItemFlowLeft); menuOperation.add(mItemFlowCenter); menuOperation.add(mItemFlowRight); menuOperation.add(mItemBorder); menuOperation.add(mItemGrid); menuBar.add(menuOperation); menuBar.add(menuHelp); panelMenu.add(menuBar); } public void addCompent(){ panelCompent.add(btnLeft); panelCompent.add(btnCenter); panelCompent.add(btnRight); panelCompent.add(btnBorder); panelCompent.add(btnGrid); panelCompent.add(labHit); } public void addBorderCompent(){ panelCompent.add(btnLeft, "West"); panelCompent.add(btnCenter, "Center"); panelCompent.add(btnRight, "East"); panelCompent.add(btnBorder, "North"); panelCompent.add(btnGrid, "South"); } public void actionPerformed(ActionEvent aEvt){ if((btnLeft == aEvt.getSource()) ||(mItemFlowLeft == aEvt.getSource()) ||(tBtnLeft == aEvt.getSource())){ panelCompent.setLayout(new FlowLayout(FlowLayout.LEFT)); labHit.setText("流式布局管理器左靠齐"); } else { if((btnRight == aEvt.getSource()) ||(mItemFlowRight == aEvt.getSource()) ||(tBtnRight == aEvt.getSource())){ panelCompent.setLayout(new FlowLayout(FlowLayout.RIGHT)); labHit.setText("流式布局管理器右靠齐"); } else { if((btnCenter == aEvt.getSource()) ||(mItemFlowCenter == aEvt.getSource()) ||(tBtnCenter == aEvt.getSource())){ panelCompent.setLayout(new FlowLayout(FlowLayout.CENTER)); labHit.setText("流式布局管理器中靠齐"); } else { if((btnBorder == aEvt.getSource()) ||(mItemBorder == aEvt.getSource()) ||(tBtnBorder == aEvt.getSource())){ panelCompent.setLayout(new BorderLayout()); addBorderCompent(); labHit.setText("边界布局管理器"); } else{ if((btnGrid == aEvt.getSource()) ||(mItemGrid == aEvt.getSource()) ||(tBtnGrid == aEvt.getSource()) ){ panelCompent.setLayout(new GridLayout(3, 2)); // addBorderCompent(); labHit.setText("网格布局管理器"); } } } } } } } //LoginFrame.java import javax.swing.*; import java.awt.*; import java.awt.event.*; class LoginFrame extends JFrame implements ActionListener{ private Container cont; private JLabel labUserName; private JLabel labPassword; private JTextField txtUserName; private JTextField txtPassword; private JButton btnOK; private JButton btnCancel; public LoginFrame(){ this.setTitle("登录界面"); this.setSize(300, 250); this.setLocation(300, 300); this.setDefaultCloseOperation(this.EXIT_ON_CLOSE); initCont(); initCompent(); addCompent(); this.setVisible(true); } public void initCont(){ cont = this.getContentPane(); cont.setLayout(null); } public void initCompent(){ labUserName = new JLabel("用户名:"); labPassword = new JLabel("密 码:"); txtUserName = new JTextField(); txtPassword = new JPasswordField(); btnOK = new JButton("登录"); btnCancel = new JButton("重置"); } public void addCompent(){ cont.add(labUserName); labUserName.setBounds(40,40,80,30); cont.add(labPassword); labPassword.setBounds(40,90,80,30); cont.add(txtUserName); txtUserName.setBounds(120,40,120,30); cont.add(txtPassword); txtPassword.setBounds(120,90,120,30); cont.add(btnOK); btnOK.addActionListener(this); btnOK.setBounds(60,170,80,30); cont.add(btnCancel); btnCancel.addActionListener(this); btnCancel.setBounds(160,170,80,30); } public void actionPerformed(ActionEvent aEvt){ if(aEvt.getSource() == btnOK){ if((txtUserName.getText().equals("denghong")) &&(txtPassword.getText().equals("123"))){ new MainFrame(); this.dispose(); } } else{ if(aEvt.getSource() == btnCancel){ labUserName.setText(""); labPassword.setText(""); } } } } //Test.java public class Test{ public static void main(String[] args){ new LoginFrame(); } } ### 知识点总结 #### 一、Java Swing 基础组件介绍 在给定的代码示例中,我们主要关注的是 Java Swing 框架的使用,它提供了丰富的图形用户界面(GUI)组件来构建桌面应用。下面将详细介绍其中的一些关键组件。 1. **JFrame** - `JFrame` 是 Swing 中用于创建顶级容器的基本类。 - 它继承自 `JWindow` 类,并提供了一些额外的功能,如关闭窗口时退出程序的能力。 - 在本例中,`MainFrame` 和 `LoginFrame` 都继承自 `JFrame`,用于创建主界面和登录界面。 2. **Container** - `Container` 接口定义了如何添加和删除子组件的方法。 - `JFrame` 实现了 `Container` 接口,因此可以直接添加组件到其中。 - 本例中的 `cont` 就是指向当前框架的内容面板的引用。 3. **JPanel** - `JPanel` 是一个基本的轻量级容器,通常用于组织其他 GUI 组件。 - 它可以被赋予不同的布局管理器。 - 例如,`panelMenu`、`panelToolBar` 和 `panelCompent` 分别代表菜单面板、工具栏面板和内容面板。 4. **布局管理器** - Swing 提供了几种不同的布局管理器,包括但不限于 `FlowLayout`、`BorderLayout` 和 `GridLayout`。 - 这些布局管理器自动排列组件,使得界面设计更加灵活和易于维护。 - 在 `MainFrame` 类中,`panelCompent` 初始布局为 `GridLayout(3, 2)`,而在 `LoginFrame` 类中,内容面板使用 `null` 布局。 5. **事件处理** - Swing 支持事件处理模型,通过实现监听器接口或使用匿名内部类来响应用户操作。 - 例如,在 `MainFrame` 中,按钮和菜单项都实现了 `ActionListener` 接口来响应用户的点击事件。 - `actionPerformed` 方法会在相应的组件被触发时执行。 6. **JMenuBar、JMenu 和 JMenuItem** - `JMenuBar` 用于创建菜单栏。 - `JMenu` 代表一个下拉菜单。 - `JMenuItem` 是菜单条目的具体实现。 - 在 `MainFrame` 中,通过这些组件创建了一个包含“布局操作”和“帮助”两个菜单的菜单栏。 7. **JToolBar 和 JButton** - `JToolBar` 用于创建工具栏。 - `JButton` 是一个可显示文本和图像的按钮组件。 - 在 `MainFrame` 中,工具栏上包含了几个按钮,每个按钮都有一个图标和对应的事件监听器。 8. **JLabel 和 JTextField** - `JLabel` 用于显示静态文本或图标。 - `JTextField` 是一个单行文本输入框。 - 在 `LoginFrame` 中,使用了这两个组件来创建用户名和密码的输入框以及对应的标签。 9. **JPasswordField** - `JPasswordField` 是一个特殊的文本字段,用于输入密码,输入的字符会被替换为星号或其他掩码字符。 #### 二、代码逻辑分析 1. **登录界面 (`LoginFrame`)** - 创建了一个简单的登录界面,包括用户名和密码的输入框以及登录和重置按钮。 - 当用户点击登录按钮时,会检查用户名和密码是否正确,如果正确则创建并显示 `MainFrame`,同时关闭登录界面。 2. **主界面 (`MainFrame`)** - 创建了一个复杂的界面,包括菜单栏、工具栏和主要内容面板。 - 用户可以通过点击按钮或菜单项来更改内容面板的布局。 - 支持五种不同的布局方式:流式左布局、流式居中、流式右布局、边界布局和网格布局。 这个示例展示了如何使用 Java Swing 构建功能丰富的图形用户界面,包括各种基本组件的使用方法、布局管理器的选择以及事件处理机制的实现等。这对于开发桌面应用程序具有很高的参考价值。