Swing表格自定义JTable (表格可编辑)

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->import java.awt.BorderLayout;
import java.awt.Color;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableCellRenderer;
public class JTableDefineTest extends JFrame{

    public JTableDefineTest()
    {
        super();
        setTitle("表格");
        setBounds(100,100,500,500);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JScrollPane scrollPane = new JScrollPane();   //支持滚动
        getContentPane().add(scrollPane,BorderLayout.CENTER);
        String[] columnNames = {"A","B","C","D","E","F","G"};
        Vector columnNameV = new Vector();    //获得表头
        for(int column = 0;column<columnNames.length;column++)
        {
            columnNameV.add(columnNames[column]);
        }
        Vector tableValueV = new Vector();
        for(int row = 1;row<21;row++)    //获得数据
        {
            Vector rowV = new Vector();
            for(int column = 0;column<columnNames.length;column++)
            {
                rowV.add(columnNames[column]+row);  //数据
            }
            tableValueV.add(rowV);
        }
        JTable table = new MyTable(tableValueV,columnNameV);   //自定义的表格
        table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);  //关闭表格列的自动调整功能。
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);   //单选
        table.setSelectionBackground(Color.YELLOW);
        table.setSelectionForeground(Color.RED);
        table.setRowHeight(30);
        scrollPane.setViewportView(table);   //支持滚动
        
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        JTableDefineTest jTableDefineTest= new JTableDefineTest();
        jTableDefineTest.setVisible(true);
    }

}

class MyTable extends JTable    //实现自定义类
{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    
    public MyTable()
    {
        
    }
    public MyTable(Vector rowData ,Vector columnNames)
    {
        super(rowData,columnNames);
    }
    
    /**
     * @Override
     */
    public JTableHeader getTableHeader()
    {
        JTableHeader tableHeader = super.getTableHeader();
        tableHeader.setReorderingAllowed(false);   //设置表格列不可重排
        DefaultTableCellRenderer hr =(DefaultTableCellRenderer)tableHeader.getDefaultRenderer();  //获得表格头的单元格对象
        hr.setHorizontalAlignment(DefaultTableCellRenderer.CENTER);  //列名居中
        return tableHeader;
        
    }
    /**
     * @Override
     */
    public TableCellRenderer getDefaultRenderer(Class<?>columnClass)
    {
        DefaultTableCellRenderer cr =(DefaultTableCellRenderer)super.getDefaultRenderer(columnClass);
        cr.setHorizontalAlignment(DefaultTableCellRenderer.CENTER);  //单元格内容居中
        return cr;
    }
    /**
     * @Override
     */
    public boolean isCellEditable(int row,int column)
    {
        return false;   //单元格不可修改
    }
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然,你可以使用JTable来实现可编辑表格。下面是一个示例代码,演示如何将JTable集成到你的北方传统民居信息管理系统中: ```java import javax.swing.*; import javax.swing.table.DefaultTableModel; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.sql.*; public class TraditionalHouseInfoManagementSystem extends JFrame { private JTable table; private DefaultTableModel tableModel; private JButton btnAddHouse; private JTextArea taHouseList; private Connection conn; public TraditionalHouseInfoManagementSystem() { setTitle("北方传统民居信息管理系统"); setSize(500, 500); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 创建数据库连接 try { conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/house_info", "root", "password"); } catch (SQLException e) { e.printStackTrace(); } // 创建表格模型 tableModel = new DefaultTableModel(); tableModel.addColumn("ID"); tableModel.addColumn("民居名称"); tableModel.addColumn("所在地"); // 创建表格 table = new JTable(tableModel); // 设置布局 setLayout(new BorderLayout()); add(new JScrollPane(table), BorderLayout.CENTER); // 添加按钮 btnAddHouse = new JButton("添加民居"); add(btnAddHouse, BorderLayout.SOUTH); // 添加按钮点击事件 btnAddHouse.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 弹出对话框输入民居信息 String houseName = JOptionPane.showInputDialog(null, "请输入民居名称:"); String location = JOptionPane.showInputDialog(null, "请输入所在地:"); if (houseName.isEmpty() || location.isEmpty()) { JOptionPane.showMessageDialog(null, "请填写民居名称和所在地"); return; } try { // 将民居信息插入数据库 PreparedStatement stmt = conn.prepareStatement("INSERT INTO houses (name, location) VALUES (?, ?)"); stmt.setString(1, houseName); stmt.setString(2, location); stmt.executeUpdate(); // 更新表格数据 updateTable(); } catch (SQLException ex) { ex.printStackTrace(); } } }); // 初始化表格数据 updateTable(); } private void updateTable() { try { // 清空表格数据 tableModel.setRowCount(0); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM houses"); while (rs.next()) { String id = rs.getString("id"); String name = rs.getString("name"); String location = rs.getString("location"); tableModel.addRow(new Object[]{id, name, location}); } } catch (SQLException e) { e.printStackTrace(); } } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { TraditionalHouseInfoManagementSystem system = new TraditionalHouseInfoManagementSystem(); system.setVisible(true); } }); } } ``` 在这个示例代码中,我使用了`DefaultTableModel`作为表格模型,并将其应用于JTable。通过调用`tableModel.addRow()`方法可以添加新的行,通过调用`tableModel.setRowCount(0)`可以清空表格数据。 希望这个示例对你有帮助!如果你有任何问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值