一、了解复杂容器JPanel
JPanel是Java Swing中的一个容器类,用于在GUI应用程序中创建和管理组件。它是javax.swing.JPanel类的子类。
JPanel提供了一种组织和布局其他组件的方式。可以向JPanel添加其他组件,如按钮、文本框、标签等,并使用布局管理器来控制它们的位置和大小。
JPanel具有一些常用的属性和方法,包括设置背景颜色、设置布局管理器、添加和移除组件等。它还可以响应事件,并通过添加事件监听器来执行相应的操作。
JPanel可以嵌套在其他容器类中,如JFrame或JDialog中,以创建复杂的GUI界面。它可以作为一个独立的组件,也可以作为其他容器类的子组件。
总之,JPanel是一个用于创建和管理GUI组件的容器类,提供了一种组织和布局组件的方式。它是Java Swing中常用的一种容器类之一。
二、了解Java UI布局方式
Java UI布局方式指的是在Java图形界面编程中,对界面元素进行排列和布局的方式。常见的Java UI布局方式有以下几种:
1. 绝对布局(Absolute Layout):元素的位置和大小都是固定的,不随窗口大小的变化而变化。虽然简单易用,但是不适合开发适应不同窗口大小的应用程序。
2. 边界布局(Border Layout):将窗口分为五个区域,并可以在每个区域放置一个组件。五个区域分别为:北(North)、南(South)、东(East)、西(West)和中(Center)。可以通过调整各个组件的位置来实现不同的布局效果。
3. 流式布局(Flow Layout):将组件按从左到右的顺序依次排列,当窗口大小不足以容纳所有组件时,会自动换行。适用于需要自动调整布局的情况。
4. 网格布局(Grid Layout):将窗口划分为规则的行和列,然后将组件按照表格的形式排列。每个组件占据一个单元格,可以通过指定行数和列数来调整布局。
5. 卡片布局(Card Layout):将多个组件放置在堆叠的卡片上,然后只显示当前卡片。可以通过切换卡片来实现不同的界面效果。
6. 盒式布局(Box Layout):将组件沿着水平或垂直方向进行排列,可以通过指定对齐方式和间距来调整布局。
以上是常见的几种Java UI布局方式,开发者可以根据具体需求选择合适的布局方式来实现界面设计。
三、创建一个复杂容器
JPanel p1 =new JPanel(){
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
ImageIcon img = new ImageIcon("static/log.jpg");
g.drawImage(img.getImage(),0,0,800,600,this);
}
};
此处需要将p1设置为null布局
p1.setLayout(null);
四、完整代码
package UI;
import javax.swing.*;
import java.awt.*;
public class Login extends JFrame {
private JButton btn1;//登录
private JButton btn2;//注册
public Login(){
JFrame j = new JFrame("个人通讯录");
j.setLayout(new GridLayout(1,1));
j.setSize(800,600);
j.setResizable(false);
btn1 = new JButton("登录");
btn2 = new JButton("注册");
JPanel p1 =new JPanel(){
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
ImageIcon img = new ImageIcon("static/log.jpg");
g.drawImage(img.getImage(),0,0,800,600,this);
}
};
p1.setLayout(null);
p1.add(btn1);
p1.add(btn2);
btn1.setBounds(100,450,100,40);
btn1.setFont(new Font("宋体",Font.BOLD,24));
btn1.setBackground(new Color(22,120,120));
btn1.setBorderPainted(false);
btn2.setBounds(240,450,100,40);
btn2.setFont(new Font("宋体",Font.BOLD,24));
btn2.setBackground(new Color(22,120,120));
btn2.setBorderPainted(false);
j.add(p1,BorderLayout.CENTER);
j.setLocationRelativeTo(null);
j.setVisible(true);
j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
btn1.addActionListener(e -> {
new LoginIn();
});
btn2.addActionListener(e -> {
j.dispose();
new Reg();
});
}
public static void main(String[] args) {
new Login();
}
}
从代码中可以看出,最后需将p1添加至主窗体中去。