在刚开始写的时候首先使用了卡片布局(CardLayout):(卡片布局的用法在上个博客中)

卡片布局是一个主要面板,把其他要单独显示的卡片面板加在主面板上,通过点击按钮来调用卡片面板,

本来是想要用卡片布局的,但是在插入表格时,把表格插入到面板中会没有表头,需要用JScrollPane,

其实JScrollPane就是一个滚动窗格,可以让类名的组件滚动,但是JScrollPane中只能添加一个组件,

所以一个卡片只能显示一个表格,标签,文本框什么的就添加不了了。

 

其次是选项卡窗格(JLayeredPane):

后来知道了还可以选项卡窗格,用的时候发现选项卡其实和卡片时差不多的原理,都是每个卡片或者选项卡

只能添加一个组件。

 

最后是分层窗格(JLayeredPane):

如果想在选项卡的一个选项卡中添加多个组件可以把组件放在分层窗格上(JLayeredPane),JLayeredPane

可以添加多个组件,如何再作为一个组件添加到选项卡中,如果想要设置背景颜色,需要把背景图片设置到

JLayeredPane的最底层。

 

下面代码是把表格放在JLayeredPane

package menu;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Image;
import java.awt.Toolkit;
import java.util.Arrays;
import java.util.Vector;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;

public class SearchBook extends JFrame{
	public JLayeredPane laypane = new JLayeredPane();
	public SearchBook()  {
		
		/*
		 * 查询图书
		 */
		
		
		this.setSize(800, 800);
		this.setLocationRelativeTo(null);
		
		//改变窗口图标
		Toolkit tool = Toolkit.getDefaultToolkit();
		Image img = tool.getImage("src\\menu\\sign.jpg");
		this.setIconImage(img);
		
		/*设置窗口背景图案*/
		Icon i = new ImageIcon("src\\menu\\background5.jpg");
		JLabel label = new JLabel(i);
		label.setBounds(0, 0, this.getWidth(), this.getHeight());
		
		
		/*面板3中的标签*/
		Font font = new Font("宋体",Font.BOLD,20);
		JLabel lab3 = new JLabel("请选择查询方式:");
		lab3.setFont(font);
		lab3.setBounds(70, 60, 600, 30);
		
		
		/*面板3中的查询下拉框*/
		Dimension dimension = new Dimension(220,30);
		JComboBox<String> j = new JComboBox<>();
		j.setSize(dimension);
		j.addItem("按照书名查询");
		j.addItem("按照作者查询");
		j.addItem("按照编号查询");
		j.setBounds(70, 100,220, 30);
		j.setBackground(Color.pink );
		
		
		/*面板3中的搜索框*/
		Font font1 = new Font("宋体",Font.BOLD,13);
		JTextField text3 = new JTextField();
		Dimension dimension1 = new Dimension(270,30);
		text3.setFont(font1);
		text3.setSize(dimension1);
		text3.setBackground(Color.pink);
		text3.setBounds(320,100, 270, 30);
		
		/*按钮*/
		JButton button = new JButton("搜索");
		button.setBackground(Color.pink);
		button.setBounds(600, 100, 120, 30);
		
		/*新建表格*/
		DefaultTableModel model = new DefaultTableModel();
		model.addColumn("书本编号", new Vector<Integer>());
		model.addColumn("书名",new Vector<String>());
		model.addColumn("作者",new Vector<String>());
		model.addColumn("是否在馆",new Vector<String>());
		model.addColumn("选择图书", new Vector<String>());
		JTable table = new JTable(model);
		
		JScrollPane jp = new JScrollPane(table);
		jp.setBounds(70, 150, 650, 450);
		for(int k = 0;k < 50 ;k ++) {
			model.addRow(new Vector<Integer>());
		}
		
		
		JButton button1 = new JButton("退还");
		JButton button2 = new JButton("借阅");
		button1.setBackground(Color.pink);
		button1.setBounds(170, 630, 170, 40);
		button2.setBackground(Color.pink);
		button2.setBounds(450,630, 170, 40);
		
		/*把组件放在分层窗格里*/
		laypane.add(label, new Integer(0),0);
		laypane.add(lab3,new Integer(150),1);
		laypane.add(j,new Integer(100),2);
		laypane.add(text3,new Integer(100),3);
		laypane.add(button, new Integer(100),4);
		laypane.add(jp, new Integer(200), 5);
		laypane.add(button1, new Integer(630),6);
		laypane.add(button2, new Integer(630),7);
		
		
		label.setOpaque(false);
		laypane.setOpaque(false);
		
		text3.setOpaque(false);
	} 
}

 

然后把多层窗格放在选项卡中

            Container c = getContentPane();
		tabpane = new JTabbedPane(JTabbedPane.TOP,JTabbedPane.SCROLL_TAB_LAYOUT);
		c.add(tabpane, BorderLayout.CENTER);
		
		
		tabpane.setFont(new Font("宋体",Font.BOLD,18));
		tabpane.setBackground(Color.pink);
		SearchBook sb = new SearchBook();
		tabpane.addTab("图书查阅", sb.laypane);
		BorrowHistory bh = new BorrowHistory();
		tabpane.addTab("借阅历史", bh.laypane);
		ChangeInfo ci = new ChangeInfo();
		tabpane.addTab("修改信息", ci.panel);

 

效果: