Java JTable单元格文字实现自动换行
- 格式:docx
- 大小:15.49 KB
- 文档页数:2
easyui datadgrid内容输入完成后自动换下一行EasyUI是一个基于jQuery的开源UI框架,提供了丰富的交互组件和可自定义的主题。
其中的DataGrid组件是常用的数据表格组件,用于展示和处理大量的表格数据。
在DataGrid中,我们可以通过点击单元格来编辑其中的内容,当输入完成后,可以通过一些配置使其自动换行到下一行。
下面是一些参考内容,帮助你完成这个功能。
1. 使用editor属性DataGrid中的每个列可以通过设置editor属性指定编辑方式。
对于需要输入换行内容的列,你可以使用textarea作为输入框,将它的rows属性设置为大于1的值(比如3),这样输入内容时就会自动换行到下一行。
示例代码:```{field: 'content',title: '内容',width: 200,editor: {type: 'textarea',options: {rows: 3}}}2. 使用结束编辑事件DataGrid提供了一些事件,可以用来监听编辑行为。
可以通过监听onAfterEdit事件,并在事件回调函数中处理自动换行逻辑。
首先,获取当前编辑的单元格,然后判断其内容是否超过一定长度,如果超过就自动换行到下一行。
示例代码:```$('#dg').datagrid({onAfterEdit: function(index, row, changes) {var content = row.content;var maxLength = 20;if (content.length > maxLength) {var rowIndex = $(this).datagrid('getRowIndex', row);$(this).datagrid('endEdit', rowIndex);$(this).datagrid('beginEdit', rowIndex + 1);}}});```3. 使用自定义编辑器如果以上方法不能满足需求,还可以使用自定义编辑器来实现自动换行。
表格自动生成下一行-范文模板及概述示例1:自动表格生成是一种强大的工具,可以帮助用户快速、准确地生成大量数据。
在这篇文章中,我们将探讨如何实现表格自动生成下一行的功能。
首先,让我们明确一下我们的需求。
在许多情况下,我们需要在表格中添加新的行,以便继续记录数据或添加新的数据。
手动添加每一行可能是一个耗时且繁琐的过程,特别是当需要添加数十行甚至数百行时。
因此,自动表格生成的功能非常有用,可以帮助我们快速地生成连续的行。
要实现表格自动生成下一行的功能,我们可以借助于编程语言或电子表格软件的宏功能。
下面,我们将介绍两种实现方法。
第一种方法是使用编程语言。
如果你熟悉编程语言如Python、JavaScript等,你可以编写一个简单的脚本来实现表格自动生成下一行的功能。
首先,你需要定义表格的结构,包括表格的列数和行数。
然后,你可以使用循环结构和适当的函数来自动生成下一行。
例如,你可以使用range函数生成一个连续的数字序列,然后将每个数字插入到表格相应的单元格中。
最后,你可以将脚本保存为一个可执行文件,每次需要新的一行时,只需执行该文件即可。
第二种方法是使用电子表格软件的宏功能。
许多电子表格软件如Excel、Google Sheets等都提供了宏录制功能,可以记录用户的操作并生成相应的宏代码。
你可以打开一个空表格,然后使用宏录制功能手动添加一行数据。
接下来,你可以停止录制并查看生成的宏代码。
通常,宏代码会包含一系列操作,如选择最后一行、复制上一行的数据、插入新行等。
你可以编辑宏代码以使其更加智能,例如使用变量来自动生成连续的数据。
最后,你可以将宏保存并应用于需要自动生成下一行的表格中。
无论是使用编程语言还是电子表格软件的宏功能,表格自动生成下一行的功能都可以帮助我们提高工作效率,节省时间和精力。
当我们需要处理大量数据时,自动表格生成可以是一个非常有用的工具。
希望这篇文章能够帮助你了解并使用表格自动生成下一行的功能。
最近需要使用JTable,第一次使用,很多不懂,到网上找了很多资料和例子,发现很多例子都没有完全的实现操作数据库里一张表的数据,摸了两天终于懂了一点,写了一个例子,把代码直接复制,修改一下数据库的连接就可以运行了.使用JTable操作数据库的一张表,实现增删改,显示表里所有的数据,点击''添加''按钮在表格插入一行填写数据保存到数据库,可一次插入多行,一次可选择任意多行进行删除,一次可以修改多行的值.有写得不好的地方希望大家指出,一起进步.共九个类:一:package product;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import javax.swing.table.AbstractTableModel;public class ProductTableModel extends AbstractTableModel {/*** 神恋科技:*//**changeList用来存放被修改过的数据值,这样做是为了一次修改多行多值, * 保存的对象是ChangedProduct,只记录被修改过的值.*/private static List changeList = new ArrayList();private List list = new ArrayList();private String[] column = { "Product_id", "Product Name","Product Description", "Status" };public ProductTableModel() {}public ProductTableModel(List list) {this();setList(list);}public int getColumnCount() {return column.length;}public int getRowCount() {return list.size();}/*** getValueAt方法就是使得数据在Table显示出来,给每个单元格设值*/public Object getValueAt(int arg0, int arg1) {ProductBean p = (ProductBean) list.get(arg0);return getPropertyValueByCol(p, arg1);}public void addRow(int index, ProductBean p) {if (index < 0 || index > list.size() - 1) {list.add(p);fireTableRowsInserted(list.size(), list.size());} else {list.add(index + 1, p);fireTableRowsInserted(index, index);}}public boolean deleteRow(int index) {if (index >= 0 && index < list.size()) {list.remove(index);fireTableRowsDeleted(index, index);return true;} elsereturn false;}public boolean saveRow(int index, ProductBean p) {if (index >= 0 && index < list.size()) {list.set(index, p);fireTableRowsUpdated(index, index);return true;} elsereturn false;}public ProductBean getRow(int index) {if (index >= 0 && index < list.size()) { return (ProductBean) list.get(index);} elsereturn null;}public List getNewRow(){List list=new ArrayList();List listProduct=getList();Iterator it=listProduct.iterator();while(it.hasNext()){ProductBean p=new ProductBean();p=(ProductBean)it.next();if(p.getProduct_id()==0){list.add(p);}}return list;}public List getList() {return list;}public void setList(List list) {this.list = list;fireTableDataChanged();}public String getColumnName(int i) {return column[i];}public void setColumn(String[] column) {this.column = column;}public Object getPropertyValueByCol(ProductBean p, int col) {switch (col) {case 0:return p.getProduct_id();case 1:return p.getProduct_name();case 2:return p.getProduct_desc();case 3:return p.getProduct_status();}return null;}public void setPropertyValueByCol(ProductBean p, String value, int col) {switch (col) {case 1:p.setProduct_name(value);break;case 2:p.setProduct_desc(value);break;case 3:p.setProduct_status(value);break;}fireTableDataChanged();}public boolean isCellEditable(int row, int column) {return true;}/*** setValueAt方法是使增加或修改值的时候生效,aValue就是你在单元格填的值,* 要把这些值保存到数据源中*/public void setValueAt(Object aValue, int rowIndex, int columnIndex) {ProductBean p = (ProductBean) list.get(rowIndex);setPropertyValueByCol(p, aValue.toString(), columnIndex);this.fireTableCellUpdated(rowIndex, columnIndex);}public static List getChangeList() {return changeList;}public static void setChangeList(List changeList) {ProductTableModel.changeList = changeList;}}二:package product;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Container;import java.awt.Dimension;import java.awt.FlowLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.table.DefaultTableColumnModel;public class ProductFrame extends JFrame {/*** 神恋科技:*/private JPanel panelTop = null;private JLabel labHeader = null;private JPanel panelBottom = null;private JButton add = null;private JButton delete = null;private JButton save = null;private JScrollPane scroll = null;private JTable table = null;private ProductTableModel model = null;private List listProduct = null;public ProductTableModel getModel() {if (null == model) {model = new ProductTableModel(listProduct);//给model添加一个监听,当修改的时候将触发该事件,代表事件的类是ChangeEventmodel.addTableModelListener(new ChangeEvent(model));return model;}return model;}public JLabel getLabHeader() {if (null == labHeader) {labHeader = new JLabel("Maintaince Product Information"); return labHeader;}return labHeader;}public JTable getTable() {if (null == table) {table = new JTable(getModel());table.setEnabled(true);table.setRowSelectionAllowed(true);table.setBackground(Color.YELLOW);/*** 隐藏第一列ID,不显示出来*/DefaultTableColumnModel dcm = (DefaultTableColumnModel)table.getColumnModel();dcm.getColumn(0).setMinWidth(0);dcm.getColumn(0).setMaxWidth(0);return table;}return table;}public JScrollPane getPanTable() {if (null == scroll) {scroll = new JScrollPane();scroll.setViewportView(getTable());return scroll;}return scroll;}if (null == panelTop) {panelTop = new JPanel();panelTop.setLayout(new FlowLayout(FlowLayout.CENTER));panelTop.add(getLabHeader());return panelTop;}return panelTop;}public JPanel getPanelBottom() {if (null == panelBottom) {panelBottom = new JPanel();panelBottom.setLayout(new FlowLayout(FlowLayout.CENTER)); panelBottom.add(getAdd());panelBottom.add(getDelete());panelBottom.add(getSave());return panelBottom;}return panelBottom;}public JButton getAdd() {/*** 点该按钮的时候调用addProduct()方法,在数据源(listProduct)将 * 增加一个元素,没设值前都是null.*/if (null == add) {add = new JButton("New");add.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {addProduct();}});return add;}return add;}if (null == delete) {delete = new JButton("Delete");delete.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {/*** 支持一次选中多行后删除*/int[] rows=getTable().getSelectedRows();if(rows.length>0){int flag=JOptionPane.showConfirmDialog(null, "确定删除?"); if(flag==JOptionPane.YES_OPTION)deleteProduct();}elseJOptionPane.showMessageDialog(null,"请选择要删除的行!"); }});return delete;}return delete;}public JButton getSave() {if (null == save) {save = new JButton("save");save.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {saveProduct();JOptionPane.showMessageDialog(null,"更新成功!");}});return save;}return save;}public void addProduct() {ProductBean p = new ProductBean();getModel().addRow(getTable().getSelectedRow(), p);}public void saveProduct() {DaoInterface dao=DaoFactory.getDao();List changeList=getModel().getChangeList();//如果有修改过就调用update方法if(changeList.size()>0){dao.update(changeList);changeList.clear();}List newRow=getModel().getNewRow();//如果是新增就调用saveList,支持一次增加多行if(newRow.size()>0){dao.saveList(newRow);getModel().setList(dao.getList());getTable().updateUI();newRow.clear();}}public void deleteProduct() {/**支持一次删除多行,先获得所有选中的行,然后按照行数取得Product实例,* 放进一个list,然后传给操作数据库的deleteList方法.*/int[] rows=getTable().getSelectedRows();ArrayList list=new ArrayList();DaoInterface dao=DaoFactory.getDao();for(int i=rows.length-1;i>=0;i--){list.add(getModel().getRow(rows[i]));getModel().deleteRow(rows[i]);}dao.deleteList(list);getTable().updateUI();list.clear();}public void initData() {/*** 初始化数据源,从数据库里把数据拿出来,然后它会调用* getValueAt方法来一个单元格一个单元格来设值,让它显示出来. */listProduct = new ArrayList();DaoInterface dao=DaoFactory.getDao();listProduct=dao.getList();this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}public ProductFrame() {initData();Container c = this.getContentPane();c.setLayout(new BorderLayout());c.add(getPanelTop(), BorderLayout.NORTH);c.add(getPanelBottom(), BorderLayout.SOUTH);c.add(getPanTable(), BorderLayout.CENTER);this.setSize(new Dimension(600, 400));this.setVisible(true);}public static void main(String[] args) {ProductFrame frame = new ProductFrame();frame.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}});}}三:package product;public class ProductBean {/*** 神恋科技:*/private int product_id;private String product_name;private String product_desc;private String product_status;public String getProduct_name() {return product_name;}public void setProduct_name(String product_name) {this.product_name = product_name;}public String getProduct_desc() {return product_desc;}public void setProduct_desc(String product_desc) {this.product_desc = product_desc;}public String getProduct_status() {return product_status;}public void setProduct_status(String product_status) { this.product_status = product_status;}public int getProduct_id() {return product_id;}public void setProduct_id(int product_id) {this.product_id = product_id;}}四:package product;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;public class JDBConnection {/*** 神恋科技:*/private static Connection conn;public static Connection getConn() {String driverName = "oracle.jdbc.driver.OracleDriver"; String url = "jdbc:oracle:thin:@192.168.0.66:1521:test"; String userName = "JACKTRAINING";String pwd = "JACKTRAINING";try {Class.forName(driverName);conn = DriverManager.getConnection(url, userName, pwd); } catch (ClassNotFoundException e) {System.out.println("装载驱动出错!");} catch (SQLException e) {System.out.println("获取数据库连接出错!");e.printStackTrace();}return conn;}}五:package product;import java.util.ArrayList;import java.util.List;public interface DaoInterface {/*** 神恋科技:*/public List getList();public void saveList(List list);public void deleteList(List list);public void update(List list);}六:package product;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import javax.swing.JOptionPane;public class DaoImpl implements DaoInterface {/*** 神恋科技:*/public List getList() {Connection conn = JDBConnection.getConn();String s1 = "select * from justin_jtable_product order by product_id asc";PreparedStatement ps = null;ResultSet rs = null;List list = new ArrayList();try {ps = conn.prepareStatement(s1);rs = ps.executeQuery();} catch (SQLException e) {System.out.println("取出全部数据出错!");JOptionPane.showMessageDialog(null, "取出全部数据出错!");e.printStackTrace();}try {while (rs.next()) {ProductBean p = new ProductBean();p.setProduct_id(rs.getInt(1));p.setProduct_name(rs.getString(2));p.setProduct_desc(rs.getString(3));p.setProduct_status(rs.getString(4));list.add(p);}} catch (SQLException e) {JOptionPane.showMessageDialog(null, "取出全部数据出错!");e.printStackTrace();} finally {try {rs.close();ps.close();conn.close();} catch (SQLException e) {JOptionPane.showMessageDialog(null, "关闭数据连接时出错!");e.printStackTrace();}}return list;}public void saveList(List list) {String s1 = "";Connection conn = JDBConnection.getConn();PreparedStatement ps = null;try {Iterator it = list.iterator();while (it.hasNext()) {ProductBean p = (ProductBean) it.next();String name = p.getProduct_name();String desc = p.getProduct_name();String status = p.getProduct_status();int id = p.getProduct_id();s1 = "insert into justin_jtable_product(product_name,"+ "product_desc,product_status) values(?,?,?)";ps = conn.prepareStatement(s1);ps.setString(1, name);ps.setString(2, desc);ps.setString(3, status);ps.executeUpdate();}} catch (SQLException e) {System.out.println("添加数据时出错!");JOptionPane.showMessageDialog(null, "添加数据时出错!");e.printStackTrace();} finally {try {ps.close();conn.close();} catch (SQLException e) {JOptionPane.showMessageDialog(null, "关闭数据连接时出错!");e.printStackTrace();}}}public void deleteList(List list) {String str = "delete from justin_jtable_product whereproduct_id=?";int id = 0;Iterator it = list.iterator();Connection conn = JDBConnection.getConn();PreparedStatement ps = null;try {while (it.hasNext()) {id = ((ProductBean) it.next()).getProduct_id();ps = conn.prepareStatement(str);ps.setInt(1, id);ps.executeUpdate();}} catch (SQLException e) {} finally {try {ps.close();conn.close();} catch (SQLException e) {JOptionPane.showMessageDialog(null, "关闭数据连接时出错!");e.printStackTrace();}}}public void update(List list) {Connection conn = JDBConnection.getConn();PreparedStatement ps = null;Iterator it = list.iterator();int id = 0;int col = 0;String value = "";String str = "";try {while (it.hasNext()) {ChangedProduct ch = (ChangedProduct) it.next();id = ch.getId();col = ch.getCol();value = ch.getValue();switch (col) {case 1:str = "update justin_jtable_product set product_name=? where product_id=?";break;case 2:str = "update justin_jtable_product set product_desc=? where product_id=?";break;case 3:str = "update justin_jtable_product set product_status=? where product_id=?";}ps = conn.prepareStatement(str);ps.setString(1, value);ps.setInt(2, id);ps.executeUpdate();}} catch (SQLException e) {JOptionPane.showMessageDialog(null, "修改数据时出错!");e.printStackTrace();} finally {try {ps.close();conn.close();} catch (SQLException e) {JOptionPane.showMessageDialog(null, "关闭数据连接时出错!");e.printStackTrace();}}}}七:package product;public class DaoFactory {/*** 神恋科技:*/synchronized public static DaoInterface getDao(){DaoInterface dao=null;if(dao==null){dao=new DaoImpl();return dao;return dao;}}八:package product;public class ChangedProduct {/*** 神恋科技: */private int id;private int col;private String value;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getValue() {return value;}public void setValue(String value) { this.value = value;}public int getCol() {return col;}public void setCol(int col) {this.col = col;}九:package product;import java.util.ArrayList;import java.util.List;import javax.swing.event.TableModelEvent;import javax.swing.event.TableModelListener;public class ChangeEvent implements TableModelListener {/*** 神恋科技:*//*** 监听table被改动的事件,只要目的是用来记录被修改过的值,* 这样做可以一次任意行的修改值,修改一个单元格的值就记录一次, * 主要记录id,新值,烈数.*/ProductTableModel model = null;public ChangeEvent(ProductTableModel model) {this.model = model;}List list = model.getChangeList();int id = 0;String value = "";public void tableChanged(TableModelEvent arg0) {int row = arg0.getFirstRow();int col = arg0.getColumn();if (col != -1) {ChangedProduct cp = new ChangedProduct();id = ((Integer) model.getValueAt(row, 0)).intValue();if (id != 0) {value = model.getValueAt(row, col).toString();cp.setId(id);cp.setCol(col);cp.setValue(value); list.add(cp);}}}}。
JavaJTable单元格文字实现自动换行Java JTable单元格文字实现自动换行什么都不说,直接看代码,很简单的,相信大家看得懂import javax.swing.*;import javax.swing.table.*;import java.awt.*;class RowChange extends JFrame {public RowChange() {JTabletbl = new JT able(new String[][]{{"JTable里单元格内容的显示器是TableCellRenderer。
","默认的显示器(DefaultTableCellRenderer)继承JLabel所以不方便多行显示。
","要多行显示应该继承JTextArea(参看下面的TableCellTextAreaRenderer类)。
","当然,别忘了调用JTable.setDefaultRenderer() 登记你的显示器。
"}},"A B C D".split(" "));tbl.setDefaultRenderer(Object.class, new TableCellTextAreaRenderer());add(new JScrollPane(tbl));setSize(800, 200);setVisible(true);setDefaultCloseOperation(EXIT_ON_CLOSE);}public static void main(String[] args) { new RowChange(); } }class TableCellT extAreaRenderer extends JTextArea implements TableCellRenderer {public TableCellTextAreaRenderer() {setLineWrap(true);setWrapStyleWord(true);}public Component getTableCellRendererComponent(JTable table, Object value,booleanisSelected, booleanhasFocus, int row, int column) { // 计算当下行的最佳高度intmaxPreferredHeight = 0;for (inti = 0; i<="">setText("" + table.getValueAt(row, i));setSize(table.getColumnModel().getColumn(column).getWi dth(), 0);maxPreferredHeight = Math.max(maxPreferredHeight, getPreferredSize().height);}if (table.getRowHeight(row) != maxPreferredHeight) // 少了这行则处理器瞎忙table.setRowHeight(row, maxPreferredHeight);setText(value == null ? "" : value.toString());return this;}}。
java jtable用法Java JTable用法一、概述JTable是Java Swing库中的一个控件,用于在图形用户界面中显示和编辑表格数据。
它提供了丰富的功能和灵活的配置选项,使开发人员能够轻松地创建和管理数据表格。
二、创建JTable对象1.构造函数:可以使用JTable的构造函数来创建一个空的表格:JTable table = new JTable();2.数据模型:可以通过设置数据模型来创建一个包含指定数据的表格:String[][] data = {{"John", "Doe"}, {"Jane", "Smith "}, {"Bob", "Johnson"}};String[] columnNames = {"First Name", "Last Name"}; JTable table = new JTable(data, columnNames);三、设置表格属性1.表头:可以使用setTableHeader()方法来设置表格的表头:JTableHeader header = ();();(new Font("Arial", , 16));(header);2.行高:可以使用setRowHeight()方法来设置表格的行高度:(30);3.列宽:可以使用setColumnWidth(int column, int width)方法来设置指定列的宽度:().getColumn(0).setPreferredWidth(100);四、添加行和列1.添加行:可以使用数据模型的addRow(Object[] rowData)方法来添加一行数据:DefaultTableModel model = (DefaultTableModel) (); (new Object[]{"Tom", "Brown"});2.添加列:可以使用数据模型的addColumn(Object columnName)方法来添加一列数据:("Age");五、单元格编辑1.编辑模式:可以使用setCellEditor()方法来设置一个单元格编辑器:DefaultCellEditor editor = new DefaultCellEditor(ne w JTextField());().getColumn(1).setCellEditor(editor);2.单元格监听:可以使用addCellEditorListener()方法来添加一个单元格编辑器监听器:(new CellEditorListener() {@Overridepublic void editingStopped(ChangeEvent e) {// 编辑完成后的处理}@Overridepublic void editingCanceled(ChangeEvent e) {// 编辑取消后的处理}});六、样式和渲染1.颜色:可以使用自定义的继承自DefaultTableCellRenderer的渲染器来设置单元格的前景色和背景色:class MyRenderer extends DefaultTableCellRenderer { public Component getTableCellRendererComponent(JTabl e table, Object value, boolean isSelected, boolean hasFo cus, int row, int column) {Component component = (table, value, isSelected,hasFocus, row, column);if (row % 2 == 0) {();} else {();}return component;}}// 设置渲染器().getColumn(1).setCellRenderer(new MyRenderer());2.字体:可以使用自定义的渲染器来设置单元格的字体:().getColumn(0).setCellRenderer(new DefaultTableCel lRenderer() {public Component getTableCellRendererComponent(JTabl e table, Object value, boolean isSelected, boolean hasFo cus, int row, int column) {Component component = (table, value, isSelected, hasFocus, row, column);(new Font("Arial", , 14));return component;}});以上是Java JTable的一些常用用法和详细讲解。
td内容自动换行使用<table> 进行页面开发,会遇到字符串很长将table撑开变形的问题,在网上搜了一些,终于找到一个比较好用的解决方法。
贴出来,方便以后使用。
在table标签中加入如下的style 就行了。
<table border="0" cellspacing="0" cellpadding="0" width="200" align="center" style="table-layout:fixed;word-wrap:break-wor d;word-break:break-all">很简单,加一个style ..<td style="word-wrap:break-word:" width="160">aaaaaabbbbcccdddeeffesfsdffdfds fsdfasdfasdfasfadfadf</td>这样就不会让table撑破了!<table width="100%" border="0" cellspacing="0" cellpadding="0" style="table-layout:fixed;word-break:break-all" ><tr>break-word;">不换行简单些td中加white-space: nowrap;就行了换行如下:<table style="table-layout:fixed;" width='100%'><tr><td width=50>asdasd</td><td width="100%" style="word-wrap : break-word;word-break: break-all; overflow:hidden;">abcdefghigklmnopqrstuvwxyz1234567890abc defghigklmnopqrstuvwxyz1234567890abcdefghi gklmnopqrstuvwxyz1234567890abcdefghigklmn opqrstuvwxyz1234567890abcdefghigklmnopqrst uvwxyz1234567890abcdefghigklmnopqrstuvwxy z1234567890abcdefghigklmnopqrstuvwxyz1234567890</td></tr></table>在Table中加入如下样式:style="table-layout: fixed;WORD-BREAK: break-all; WORD-WRAP: break-word"在默认情况下网页是不会自动换行的,如果字符很长的话,就会使网页变型,因为它是通过绝对长度来控制的,我们在实际使用中可是不想让它这样,其实只要在表格控制中添加一句<td style="word-break:break-all">就搞定了。
Excel单元格内换⾏⽤快捷键与⾃动换⾏实现及跨单元格⽂本换⾏来源:电脑技术⾓Excel单元格内换⾏通常有两种⽅法,⼀种⽤快捷键实现,另⼀种⽤“对齐⽅式”中的“⾃动换⾏”实现,它们都可以只操作⼀次便使所超出单元格宽度部分的⽂字⾃动换⾏;其中“⾃动换⾏”既可以输⼊⽂字前设置⼜可以输⼊⽂字后设置。
另外,应⽤Excel单元格内换⾏可以实现同时设置多单元格⾃动换⾏、避免输⼊短横线⽂本⾃动换⾏和⽤两端对齐实现⼀段⽂本在指定多单元格内⾃动换⾏。
以下先介绍Excel单元格内换⾏的两种⽅法,再介绍它们的扩展应⽤,操作中所⽤Excel 版本为 2016。
⼀、Excel单元格内换⾏的两种⽅法(⼀)⽤快捷键假如表格第⼀个单元格(即 A1)的⽂本内容超出,要求把超出部分换⾏,⽤快捷键操作⽅法如下:1、在“内”字后⾯单击把光标定位到哪⾥,如图1所⽰:图12、按 Alt + 回车(Enter)组合键,光标后⾯的⽂字⾃动分成了两⾏,即按⼀次键,光标后的所有⽂字就会⾃动换⾏,不需⼀⾏⾏的重复按键,如图2所⽰:图2(⼆)⽤“⾃动换⾏”1、在第⼆列第⼀个单元格(即 B1)输⼊⼀⾏⽂字,⽂字超出了单元格,单击⼀下 B2 单元格结束 A1 单元格的输⼊状态,再单击 A1 单元格选中它,此时,“开始”选项卡下的“⾃动换⾏”由灰⾊变为可选,单击它,则超出部分⾃动换⾏;接着,单击 C1 单元格,再次单击“⾃动换⾏”,在C1 中输⼊⽂字,此时,超出的部分⾃动换⾏,操作过程步骤,如图3所⽰:图2、说明:上⾯演⽰了两种使⽤“⾃动换⾏”的⽅法,⼀种是输⼊⽂字后再设置⾃动换⾏,另⼀种是输⼊⽂字前设置,后⼀种操作少⼀些。
3、取消⾃动换⾏。
选中设置过⾃动换⾏的单元格,再单击⼀次“⾃动换⾏”就可以取消。
⼆、Excel单元格内换⾏的扩展应⽤(⼀)批量设置单元格⾃动换⾏1、选中要设置⾃动换⾏的所有单元格(如选择 D1:F4),单击“开始”选项卡下的“⾃动换⾏”,则选中的所有单元格实现⾃动换⾏;⾸先在 D1 单元格输⼊⽂字,超出部分⾃动换⾏;再在 E2 单元格输⼊⽂字,超出部分也⾃动换⾏;操作过程步骤,如图4所⽰:图42、批量设置“⾃动换⾏”后,如果想取消⾃动换⾏,既可以单独取消其中⼀个或⼏个单元格,也可以把所有单元格同时取消。
一、概述bootstrap-table是一个流行的jQuery表格插件,它提供了丰富的功能和可定制性,使得前端开发者可以轻松地创建交互丰富的数据表格。
其中,单元格打断练字是一种常用的功能,它可以使表格中的文字在单元格边界处自动换行,增强表格的可读性和美观度。
二、bootstrap-table单元格打断练字的基本原理1.单元格打断练字是指在表格的单元格中,当文本长度超出单元格宽度时,自动将文本打断并继续显示在下一行。
这样可以避免文字溢出单元格边界,同时保持表格的整洁和美观。
2.在bootstrap-table中实现单元格打断练字的基本原理是通过CSS样式控制单元格的文本换行方式。
可以通过设置white-space属性为normal或者pre-wrap来实现。
三、在bootstrap-table中实现单元格打断练字的方法1.通过设置bootstrap-table中的formatter属性来自定义单元格的显示格式。
在formatter函数中可以通过添加CSS样式来控制单元格的文本换行方式。
2.在formatter函数中,可以使用<div>标签来包裹单元格中的文本,并设置div的样式来实现单元格的打断练字效果。
3.另外,也可以通过为表格添加自定义的CSS类来实现单元格的打断练字效果。
通过在CSS样式中设置单元格的文本换行方式,来达到打断练字的效果。
四、实例演示下面以一个实际的案例来演示在bootstrap-table中实现单元格打断练字的方法。
```javascript$('#table').bootstrapTable({columns: [{field: 'id',title: 'ID'}, {field: 'name',title: 'Name',formatter: nameFormatter}]});function nameFormatter(value, row, index) {return '<div class="cell-text">' + value + '</div>';}``````css.cell-text {white-space: normal;word-wrap: break-word;}```通过上述代码,我们可以在表格中的Name列实现单元格的打断练字效果。
JavaMe开发:绘制可自动换行文本JavaMe Graphics类中的drawString不支持文本换行,这样绘制比较长的字符串时,文本被绘制在同一行,超过屏幕部分的字符串被截断了。
如何使绘制的文本能自动换行呢?【问题描述】JavaMe Graphics类中的drawString不支持文本换行,这样绘制比较长的字符串时,文本被绘制在同一行,超过屏幕部分的字符串被截断了。
如何使绘制的文本能自动换行呢?【分析】drawString无法实现自动换行,但可以实现文本绘制的定位。
因此可考虑,将文本拆分为多个子串,再对子串进行绘制。
拆分的策略如下:1 遇到换行符,进行拆分;2 当字符串长度大于设定的长度(一般为屏幕的宽度),进行拆分。
【步骤】1 定义一个String和String []对象;1.private String info;2.private String info_wrap[];2 实现字符串自动换行拆分函数StringDealMethod.java1.package com.token.util;2.3.import java.util.Vector;4.5.import javax.microedition.lcdui.Font;6.7.public class StringDealMethod {8.public StringDealMethod()9. {10.11. }12.13.// 字符串切割,实现字符串自动换行14.public static String[] format(String text, int maxWidth, Font ft) {15. String[] result = null;16. Vector tempR = new Vector();17.int lines = 0;18.int len = text.length();19.int index0 = 0;20.int index1 = 0;21.boolean wrap;22.while (true) {23.int widthes = 0;24. wrap = false;25.for (index0 = index1; index1 < len; index1++) {26.if (text.charAt(index1) == '\n') {27. index1++;28. wrap = true;29.break;30. }31. widthes = ft.charWidth(text.charAt(index1))+ widthes;32.33.if (widthes > maxWidth) {34.break;35. }36. }37. lines++;38.39.if (wrap) {40. tempR.addElement(text.substring(index0, index1 - 1));41. } else {42. tempR.addElement(text.substring(index0, index1));43. }44.if (index1 >= len) {45.break;46. }47. }48. result = new String[lines];49. tempR.copyInto(result);50.return result;51. }52.53.public static String[] split(String original, String separator) {54. Vector nodes = new Vector();55.//System.out.println("split start...................");56.//Parse nodes into vector57.int index = original.indexOf(separator);58.while(index>=0) {59. nodes.addElement( original.substring(0, index) );60. original = original.substring(index+separator.length());61. index = original.indexOf(separator);62. }63.// Get the last node64. nodes.addElement( original );65.66.// Create splitted string array67. String[] result = new String[ nodes.size() ];68.if( nodes.size()>0 ) {69.for(int loop=0; loop<nodes.size(); loop++)70. {71. result[loop] = (String)nodes.elementAt(loop);72.//System.out.println(result[loop]);73. }74.75. }76.77.return result;78. }79.}3 调用拆分函数,实现字符串的拆分1.int width = getWidth();2.3.Font ft = Font.getFont(Font.FACE_PROPORTIONAL,Font.STYLE_BOLD,Font.SIZE_LARGE);4. = "欢迎使用!\n"6. +"1 MVC测试;\n"7. +"2 自动换行测试,绘制可自动识别换行的字符串。
Java 设置Excel单元格对齐方式、文本旋转、换行、缩进本文介绍通过Java来设置Excel单元格对齐方式(水平对齐/垂直对齐)、文本旋转方式(顺/逆时针方向旋转)、文本换行和文本缩进等内容。
文中代码示例使用了工具Free Spire.XLS for Java(免费版),可从官网下载jar包,并解压将lib文件夹下的Spire.Xls.jar导入Java程序,如下图:Java 代码示例import com.spire.xls.*;public class CellFormat {public static void main(String[] args) {//加载测试文档Workbook wb = new Workbook();wb.loadFromFile("test.xlsx");//获取工作表Worksheet sheet = wb.getWorksheets().get(0);//左对齐sheet.getCellRange("B2").getCellStyle().setHorizontalAlignment(HorizontalAlignType.Left);//水平居中sheet.getCellRange("B3").getCellStyle().setHorizontalAlignment(HorizontalAlignType.Center);//右对齐sheet.getCellRange("B4").getCellStyle().setHorizontalAlignment(HorizontalAlignType.Right);//居上sheet.getCellRange("B5").getCellStyle().setVerticalAlignment(VerticalAlignType.Top);//垂直居中sheet.getCellRange("B6").getCellStyle().setVerticalAlignment(VerticalAlignType.Center);//居下sheet.getCellRange("B7").getCellStyle().setVerticalAlignment(VerticalAlignType.Bottom);//水平居中+垂直居中sheet.getCellRange("B8").getCellStyle().setHorizontalAlignment(HorizontalAlignType.Center); sheet.getCellRange("B8").getCellStyle().setVerticalAlignment(VerticalAlignType.Center); sheet.getCellRange("B9").getCellStyle().setReadingOrder(ReadingOrderType.RightToLeft);//逆时针旋转45°(以右侧文字为原点)sheet.getCellRange("D5").getCellStyle().setRotation(45);//逆时针旋转90°(以右侧文字为原点)sheet.getCellRange("D6").getCellStyle().setRotation(90);//顺时针旋转45°(以左侧文字为原点)sheet.getCellRange("D7").getCellStyle().setRotation(-45);//顺时针旋转90°(以左侧文字为原点)sheet.getCellRange("D8").getCellStyle().setRotation(-90);//自动换行sheet.getCellRange("F5").getCellStyle().setWrapText(true);//缩进sheet.getCellRange("H5").getCellStyle().setIndentLevel(3);//设置行高sheet.getCellRange("B5:B8").setRowHeight(60);//保存文档wb.saveToFile("CellFormat.xlsx", ExcelVersion.Version2010);}}设置效果:。
Java利⽤POI⽣成Excel强制换⾏Java利⽤POI⽣成Excel强制换⾏使⽤POI创建⼀个简单的 myXls.xls ⽂件常⽤的包为 ermodel.*;例⼦:import java.io.*;import ermodel.*;public class ZoomSheet {public ZoomSheet() {}public static void main(String args[])throws IOException {HSSFWorkbook wb = new HSSFWorkbook();HSSFSheet sheet1 = wb.createSheet("new sheet");FileOutputStream fileOut = new FileOutputStream("workbook.xls");wb.write(fileOut);fileOut.close();}}类:HSSFWorkbook 创建 xls 的对象; HSSFWorkbook hw = new HSSFWorkbook();设置分区显⽰; hw.setRepeatingRowsAndColumns(sheet的index, ⾏, 列, ⾏, 列);HSSFSheet 创建 xls 中的sheet(⼯作表); HSSFSheet sheet = hw.createSheet("sheet1"); sheet1 是 sheet 的名称可缺省设置列⾼; sheet.setColumnWidth((short)short, (short)short);HSSFRow 创建 xls 中的⾏; HSSFRow row = sheet.createRow(0); 0 表⽰第⼀⾏设置⾏⾼; row.setHeight((short)short);HSSFFont 创建 xls 中的字体; HSSFFont font = hw.createFont();设定字体⼤⼩; font.setFontHeightInPoints((short)54);设定为斜体; font.setItalic(true);设定⽂字删除线; font.setStrikeout(true);HSSFCellStyle 设定单元格风格; HSSFCellStyle style = wb.createCellStyle();加⼊字体; style.setFont(font);HSSFCell 设定单元格; HSSFCell cell = row.createCell((short)0);单元格⽔平对齐⽅式; style.setAlignment(align); //单元格⽔平 0 普通 1 左对齐 2 居中 3 右对齐 4 填充 5 正当 6 居中选择单元格垂直对齐⽅式; style.setVerticalAlignment(align); //单元格垂直 0 居上 1 居中 2 居下 3 正当单元格下边框为细线; style.setBorderBottom((short)short);同上⼀命令⼀同使⽤,设置颜⾊; style.setBottomBorderColor((short)short);单元格左边框; style.setBorderLeft((short)short);style.setLeftBorderColor((short)short);单元格右边框; style.setBorderRight((short)short);style.setRightBorderColor((short)short);单元格上边框; style.setBorderTop((short)short);style.setTopBorderColor((short)short);单元格字符编号(中⽂); cell.setEncoding(HSSFCell.ENCODING_UTF_16); //中⽂单元格显⽰的值; cell.setCellValue("中医药"); 值的类型有:double,int,String,Date,boolean单元格背景⾊; style.setFillForegroundColor((short)short);图案类型; style.setFillPattern((short)short);单元格合并; sheet.addMergedRegion(new Region(⾏, (short)列, ⾏, (short)列));单元格风格加⼊; cell.setCellStyle(style);打印设置引⼊包 import ermodel.HSSFPrintSetup;创建打印设置对象 HSSFPrintSetup hps = hs.getPrintSetup();设置A4纸 hps.setPaperSize((short)9);将页⾯设置为横向打印模式 hps.setLandscape(true);设置打印页⾯为⽔平居中 sheet.setHorizontallyCenter(true);设置打印页⾯为垂直居中 sheet.setVerticallyCenter(true);⽹上找到的⽂章都是说在excel⾥的⽂字⾥加上\n,\n\r,\r\n之类,反正各种各样的都有,更奇怪的是还有⼈说在单元格⾥加上<br> 后来我试过⽤\r后的效⾥是⽣成的⽂件⾥,你⽤打开时,并不会换⾏,如果你⽤⿏标在单元格⾥点⼀下之后就会⾃动换⾏。
java jtable用法(一)Java JTable的用法JTable简介JTable是Java Swing库中的一个组件,用于显示和编辑表格数据。
它可以按照行和列的形式展示数据,并支持用户交互操作。
在本文中,我们将介绍一些JTable的常见用法和技巧。
创建JTable要创建一个JTable,我们首先需要创建一个TableModel。
TableModel是一个数据模型,用于存储和管理表格中的数据。
以下是创建JTable的步骤:1.创建一个二维数组或者一个实现TableModel接口的自定义类。
2.实例化DefaultTableModel类,并传入之前创建的数据数组或者自定义TableModel类的实例。
3.将DefaultTableModel实例传入JTable的构造方法中,创建JTable对象。
// 创建数据数组Object[][] data = {{"John", 25, "USA"},{"Alice", 30, "Canada"},{"Bob", 35, "UK"}};// 创建列名数组String[] columnNames = {"Name", "Age", "Country"};// 创建DefaultTableModelDefaultTableModel model = new DefaultTableModel(data, co lumnNames);// 创建JTableJTable table = new JTable(model);自定义JTable外观JTable提供了许多方法和属性,用于自定义表格的外观。
下面列举了几个常用的用法:设置表格行高使用方法可以设置表格的行高。
默认情况下,行高是根据表格内容的实际高度自动调整的。
一、简介Javascript是一种用于网页开发的脚本语言,它具有强大的表格操作功能,可以实现前端页面中表格数据的添加、删除、修改和查询等操作。
本文将介绍Javascript表格操作的要点,以及如何利用Javascript实现表格操作功能。
二、表格基本操作1. 创建表格使用Javascript可以动态创建表格,通过document.createElement()函数创建表格元素,并添加到页面中。
代码示例:```javascriptvar table = document.createElement("table");document.body.appendChild(table);```2. 添加表格行和单元格使用Javascript可以动态添加表格行和单元格,通过嵌套循环创建表格行和单元格,并将其添加到表格中。
代码示例:```javascriptvar table = document.createElement("table");for (var i = 0; i < 5; i++) {var row = table.insertRow(i);for (var j = 0; j < 3; j++) {var cell = row.insertCell(j);cell.innerHTML = "单元格";}}document.body.appendChild(table);```3. 删除表格行和单元格使用Javascript可以动态删除表格行和单元格,通过Table元素的deleteRow()和deleteCell()方法删除行和单元格。
代码示例:```javascriptvar table = document.getElementById("myTable");table.deleteRow(0); // 删除第一行table.rows[0].deleteCell(0); // 删除第一行的第一个单元格```4. 修改表格内容使用Javascript可以动态修改表格的内容,通过Table元素的rows 和cells属性获取表格的行和单元格,进而修改其内容。
Jlabel实现内容⾃动换⾏简单实例在⽤javaSwing写界⾯时,想实现JLabel中的⽂本内容⾃动换⾏,⽹上查了⼀下,⼤多是⼀些⽐较简单的加个换⾏⽽已,于是⾃⼰写了⼀个函数,现在贴出了供⼤家学习。
效果图如下:代码如下:package com.zht;import java.awt.BorderLayout;import java.awt.Dimension;import java.awt.FlowLayout;import java.awt.FontMetrics;import java.util.concurrent.TimeUnit;import javax.swing.JFrame;import javax.swing.JLabel;public class JLabelDemo extends JFrame {public static void main(String[] args)throws InterruptedException {System.out.println("hello");JLabelDemo jLabelDemo = new JLabelDemo();}public JLabelDemo() throws InterruptedException {String text = "This space contains technical articles,"+ " blogs and discussion forums with questions and answers."+ "作为⼀个Java程序员,从论坛上感受到使⽤Java开发程序的⼈越来多,"+ "⼼中不免欣慰。
hello";JLabel label = new JLabel();label.setSize(200, 0);//注意JLabel⼀定要设置宽度// System.out.println(label.getWidth());JlabelSetText(label, text);setLayout(new FlowLayout());add(label);pack();// setSize(300, 200);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setLocationRelativeTo(null);setVisible(true);}void JlabelSetText(JLabel jLabel, String longString)throws InterruptedException {StringBuilder builder = new StringBuilder("<html>");char[] chars = longString.toCharArray();FontMetrics fontMetrics = jLabel.getFontMetrics(jLabel.getFont());int start = 0;int len = 0;while (start + len < longString.length()) {while (true) {len++;if (start + len > longString.length())break;if (fontMetrics.charsWidth(chars, start, len)> jLabel.getWidth()) {break;}}builder.append(chars, start, len-1).append("<br/>");start = start + len - 1;len = 0;}builder.append(chars, start, longString.length()-start);builder.append("</html>");jLabel.setText(builder.toString());}}总结以上就是本⽂关于Jlabel实现内容⾃动换⾏简单实例的全部内容,希望对⼤家有所帮助。
转自:/bbs/thread-226-1-1.htmltable不能换行问题一般是:一行里面全是数字或是字母或者结尾有多个感叹号而导致table 不能换行,中文默认的会自动换行的,字母不能换行问题:style="table-layout:fixed; word-break: break-all; overflow:hidden;"复制代码在单元格属性里加入上面这句,如:<td style="table-layout:fixed; word-break: break-all; overflow:hidden;">复制代码用表格做网页排版的时候,一般都能正常使用。
偏偏有时会碰到一段连续的英文词或者一堆感叹号(!!!)把网页就撑开的现象。
总结了一下,只要在CSS中定义了如下句子,可保网页不会再被撑开了。
自动换行问题,正常字符的换行是比较合理的,而连续的数字和英文字符常常将容器撑大,挺让人头疼,下面介绍的是CSS如何实现换行的方法对于div,p等块级元素正常文字的换行(亚洲文字和非亚洲文字)元素拥有默认的white-space:normal,当定义的宽度之后自动换行html<div id="wrap">正常文字的换行(亚洲文字和非亚洲文字)元素拥有默认的white-space:normal,当定义</div>css#wrap{white-space:normal; width:200px; }IE浏览器连续的英文字符和阿拉伯数字,使用word-wrap: break-word ;或者word-break:break-all;实现强制断行html<div id="wrap">abcdefghijklmnabcdefghijklmnabcdefghijklmn111111111</div> css#wrap{word-break:break-all; width:200px;}或者#wrap{word-wrap:break-word; width:200px;}Firefox浏览器连续的英文字符和阿拉伯数字的断行,Firefox的所有版本的没有解决这个问题,我们只有让超出边界的字符隐藏或者,给容器添加滚动条html<div id="wrap">abcdefghijklmnabcdefghijklmnabcdefghijklmn111111111</div>css#wrap{word-break:break-all; width:200px; overflow:auto;}对于table元素IE浏览器1. 使用table-layout:fixed;强制table的宽度,多余内容隐藏<tablestyle="table-layout:fixed"width="200"><tr><td>abcdefghigklmnopqrstuvwxyz1234567890ssssssssssssss </td></tr></table>复制代码2. 使用table-layout:fixed;强制table的宽度,内层td,th采用word-break : break-all;或者word-wrap : break-word ;换行<table width="200"style="table-layout:fixed;"><tr><td width="25%" style="word-break : break-all; ">abcdefghigklmnopqrstuvwxyz 1234567890</td><td style="word-wrap :break-word ;">abcdefghigklmnopqrstuvwxyz 1234567890</td></tr></table>复制代码3.在td,th中嵌套div,p等采用上面提到的div,p的换行方法Firefox浏览器1. 使用table-layout:fixed;强制table的宽度,内层td,th采用word-break : break-all;或者word-wrap : break-word ;换行,使用overflow:hidden;隐藏超出内,这里overflow:auto;无法起作用<table style="table-layout:fixed" width="200"><tr><td width="25%" style="word-break : break-all; overflow:hidden;">abcdefghigklmnopqrstuvwxyz1234567890</td><td width="75%" style="word-wrap : break-word; overflow:hidden;">abcdefghigklmnopqrstuvwxyz1234567890</td></tr></table>复制代码2.在td,th中嵌套div,p等采用上面提到的对付Firefox的方法。
文本自动换行操作方法文本自动换行是一种在文本内容达到一定长度时自动将其换行的操作。
它可以使得文本在不超出屏幕或容器的宽度限制的情况下,呈现更美观和易读的效果。
以下是几种常见的文本自动换行操作方法:1. 字符串切割方法:将文本内容切割成指定长度的子串,并在每个子串末尾添加换行符(例如"\n"),实现自动换行的效果。
这种方法适用于纯文本的场景,例如命令行界面的输出或简单的文本编辑器。
2. CSS属性方法:在网页开发中,可以使用CSS的"word-wrap"或"overflow-wrap"属性来控制文本的自动换行。
将这些属性设置为"break-word"或"normal",使得文本在超出容器宽度时自动换行到下一行。
3. 编程语言方法:在编程语言中,也有一些库或函数可以实现字符串的自动换行功能。
例如,在Python中,可以使用textwrap模块中的wrap或fill函数,指定文本的最大宽度和换行符,即可实现自动换行。
4. 编辑器设置方法:在文本编辑器或办公软件中,通常会提供设置文本自动换行的选项。
用户可以根据自己的需求,在软件的设置中启用自动换行,以便在输入或查看文本时自动进行换行操作。
5. 自适应布局方法:在响应式设计或移动端开发中,可以使用自适应布局来实现文本的自动换行。
通过设置容器的宽度为百分比或使用流式布局,使得文本内容能够根据屏幕尺寸自动调整换行位置,适应不同设备的显示需求。
总结来说,文本自动换行是一种通过切割字符串、设置CSS属性、调用编程函数、软件设置或布局设计等方法,实现文本在一定宽度限制下自动换行的操作。
不同的应用场景和需求,可选择适合自己的方法来实现文本自动换行效果。
Java JTable单元格文字实现自动换行
什么都不说,直接看代码,很简单的,相信大家看得懂
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
class RowChange extends JFrame {
public RowChange() {
JTabletbl = new JTable(new String[][]{{
"JTable里单元格内容的显示器是TableCellRenderer。
",
"默认的显示器(DefaultTableCellRenderer)继承JLabel所以不方便多行显示。
",
"要多行显示应该继承JTextArea(参看下面的TableCellTextAreaRenderer类)。
",
"当然,别忘了调用JTable.setDefaultRenderer() 登记你的显示器。
"}},
"A B C D".split(" "));
tbl.setDefaultRenderer(Object.class, new TableCellTextAreaRenderer());
add(new JScrollPane(tbl));
setSize(800, 200);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args) { new RowChange(); }
}
class TableCellTextAreaRenderer extends JTextArea implements TableCellRenderer {
public TableCellTextAreaRenderer() {
setLineWrap(true);
setWrapStyleWord(true);
}
public Component getTableCellRendererComponent(JTable table, Object value,
booleanisSelected, booleanhasFocus, int row, int column) { // 计算当下行的最佳高度
intmaxPreferredHeight = 0;
for (inti = 0; i<table.getColumnCount(); i++) {
setText("" + table.getValueAt(row, i));
setSize(table.getColumnModel().getColumn(column).getWidth(), 0);
maxPreferredHeight = Math.max(maxPreferredHeight, getPreferredSize().height);
}
if (table.getRowHeight(row) != maxPreferredHeight) // 少了这行则处理器瞎忙
table.setRowHeight(row, maxPreferredHeight);
setText(value == null ? "" : value.toString());
return this;
}
}。