Java中选项卡的使用及在窗口中添加tabel所遇到的问题

在刚开始写的时候首先使用了卡片布局(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);

 

效果:

如果您在 WindowBuilder 右键单击添加的 JTable 组件未找到“Table Contents...”选项,您可以尝试按照以下步骤操作: 1. 右键单击 JTable 组件并选择“Properties”。 2. 在“Properties”窗口,选择“model”属性。 3. 单击“...”按钮以编辑模型属性。 4. 在“Edit Property Value”对话框,选择“Custom Creation”选项卡,并在其添加您的 TableModel 实现代码。 5. 在代码实现 TableModel 接口的方法,并为 JTable 提供正确的数据。 以下是一个简单的示例代码,演示如何在 WindowBuilder 实现 TableModel 接口: ```java import javax.swing.table.AbstractTableModel; public class MyTableModel extends AbstractTableModel { private Object[][] data = {{"John", "Doe", 30}, {"Jane", "Doe", 25}, {"Bob", "Smith", 40}}; private String[] columnNames = {"First Name", "Last Name", "Age"}; public int getColumnCount() { return columnNames.length; } public int getRowCount() { return data.length; } public String getColumnName(int col) { return columnNames[col]; } public Object getValueAt(int row, int col) { return data[row][col]; } public Class getColumnClass(int c) { return getValueAt(0, c).getClass(); } public boolean isCellEditable(int row, int col) { return true; } public void setValueAt(Object value, int row, int col) { data[row][col] = value; fireTableCellUpdated(row, col); } } ``` 在此示例,我们实现了 TableModel 接口的方法,并为 JTable 提供了一个简单的数据模型。要将此模型应用于 WindowBuilder 的 JTable 组件,您只需在“Edit Property Value”对话框选择“Custom Creation”选项卡,并将上述代码复制粘贴到该选项卡即可。然后,您可以在 JTable 查看并编辑来自 MyTableModel 的数据。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值