Java 如何在Jtable中创建多行单元格
我想知道是否有一种方法可以在带有JavaSwing的表中实现这一点 我正在使用Java 如何在Jtable中创建多行单元格,java,swing,jtable,row,rows,Java,Swing,Jtable,Row,Rows,我想知道是否有一种方法可以在带有JavaSwing的表中实现这一点 我正在使用Vector处理表,以便在DefaultTableModel对象中传递每一列数据,但为此我不知道必须使用什么 注意:表格数据是在运行时动态添加的。您必须在JList视图中使用自定义的TabelCellRenderer。下面的代码应该可以工作 public class VectorTableCellRenderer extends JList<String> implements TableCellRend
Vector
处理表,以便在DefaultTableModel对象中传递每一列数据,但为此我不知道必须使用什么
注意:表格数据是在运行时动态添加的。您必须在
JList
视图中使用自定义的TabelCellRenderer
。下面的代码应该可以工作
public class VectorTableCellRenderer extends JList<String> implements TableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if (value instanceof Vector) {
setListData((Vector) value);
}
if (isSelected) {
setBackground(UIManager.getColor("Table.selectionBackground"));
} else {
setBackground(UIManager.getColor("Table.background"));
}
return this;
}
}
这是我经过测试的输出
javax.swing.JTable jTableReport=new javax.swing.JTable();//新JTable
javax.swing.table.DefaultTableModel TableModel=new javax.swing.table.DefaultTableModel(ArrayListTable.size(),Header.length)//新表格模型
//现在必须在TableModel中添加数据
jTableReport.setModel(TableModel)//JTable中的setModel
int RowWidth=90//你想成为什么样的人
int RowHight=25//单线高度
for(int C=0;CRowWidth){
int NumLines=lengtrow/RowWidth;
如果(NumLines==1){
NumLines=2;
}
int begainIndex=0;
int endIndex=行宽;
String NewRowValue=String.valueOf(RowValue);
对于(int i=1;i”;
}else if(i==numline){
NewRowValue=NewRowValue+(String.valueOf(RowValue).substring(begainIndex,endIndex))+“”;
}否则{
NewRowValue=NewRowValue+(String.valueOf(RowValue).substring(begainIndex,endIndex))+“
”;
}
begainIndex=begainIndex+行宽;
endIndex=endIndex+行宽;
i++;
}
jTableReport.setValueAt(NewRowValue,R,C);
jTableReport.setRowHeight(R,NumLines*RowHeight);
}
}
}
公共void调整单元格宽度和高度(JTable table、int HorizontalAlignment、int VerticalAlignment){
DefaultTableCellRenderer DefaultTableCellRenderer=新的DefaultTableCellRenderer();
defaultTableCellRenderer.setHorizontalAlignment(HorizontalAlignment);
defaultTableCellRenderer.setVerticalAlignment(垂直对齐);
table.setAutoResizeMode(table.AUTO_RESIZE_OFF);
final TableColumnModel columnmodel=table.getColumnModel();
int HightArray[]=new int[table.getRowCount()];
for(int column=0;column300)
宽度=300;
columnmodel.getColumn(column).setPreferredWidth(width);
}
对于(int i=0;i
查看,请参阅表格部分。现在注意,这是相当旧的,并且表API已经改变,所以有些可能不起作用,或者可能需要一些修改来工作,也可以考虑。谢谢!但是很抱歉我的无知,但是我怎么能使用它呢?我已经将它添加到我的代码中,但我不知道如何“激活”它。谢谢谢谢,您能为不同的行添加不同的项目吗?我让它工作,但每一行都有相同的项目。我想做一些像你的例子。对不起,如果这是琐碎的事,我真是个傻瓜。谢谢是的,只是等待我最后一个问题的答案,将其标记为已接受的答案。谢谢。让我们来。不鼓励只使用代码的答案。请为您的解决方案添加一些注释。
VectorTableCellRenderer renderer = new VectorTableCellRenderer();
//set TableCellRenderer into a specified JTable column class
table.setDefaultRenderer(Vector.class, renderer);
//or, set TableCellRenderer into a specified JTable column
table.getColumnModel().getColumn(columnIndex).setCellRenderer(renderer);
javax.swing.JTable jTableReport = new javax.swing.JTable();// new JTable
javax.swing.table.DefaultTableModel TableModel = new javax.swing.table.DefaultTableModel(ArrayListTable.size(),Header.length);//new TableModel
//Now you must be add your data inside TableModel
jTableReport.setModel(TableModel);//setModel inside JTable
int RowWidth = 90;//Width You want to be
int RowHight = 25;//Hight of one line
for (int C = 0; C < jTableReport.getColumnCount(); C++) {
for (int R = 0; R < jTableReport.getRowCount(); R++) {
Object RowValue = jTableReport.getValueAt(R, C);
int lengthRow = String.valueOf(RowValue).length();
if (lengthRow>RowWidth) {
int NumLines = lengthRow/RowWidth;
if (NumLines == 1) {
NumLines = 2;
}
int begainIndex = 0;
int endIndex = RowWidth;
String NewRowValue = String.valueOf(RowValue);
for (int i = 1; i < NumLines; i++) {
if (i==1) {
NewRowValue = "<html>"+(String.valueOf(RowValue).substring(begainIndex, endIndex))+"<br>";
}else if (i == NumLines) {
NewRowValue = NewRowValue + (String.valueOf(RowValue).substring(begainIndex, endIndex))+"</html>";
}else {
NewRowValue = NewRowValue + (String.valueOf(RowValue).substring(begainIndex, endIndex))+"<br>";
}
begainIndex = begainIndex + RowWidth;
endIndex = endIndex + RowWidth;
i++;
}
jTableReport.setValueAt(NewRowValue, R, C);
jTableReport.setRowHeight(R, NumLines*RowHight);
}
}
}
public void resizeCellWidthAndHieght(JTable table, int HorizontalAlignment, int VerticalAlignment) {
DefaultTableCellRenderer defaultTableCellRenderer = new DefaultTableCellRenderer();
defaultTableCellRenderer.setHorizontalAlignment(HorizontalAlignment);
defaultTableCellRenderer.setVerticalAlignment(VerticalAlignment);
table.setAutoResizeMode(table.AUTO_RESIZE_OFF);
final TableColumnModel columnmodel = table.getColumnModel();
int HieghtArray[] = new int[table.getRowCount()] ;
for (int column = 0; column < table.getColumnCount(); column++) {
table.getColumnModel().getColumn(column).setCellRenderer(defaultTableCellRenderer);
int width = 15; // Min width
int height = 25; // Min width
for (int row = 0; row < table.getRowCount(); row++) {
TableCellRenderer renderer = table.getCellRenderer(row, column);
Component comp = table.prepareRenderer(renderer, row, column);
width = Math.max(comp.getPreferredSize().width +1 , width);
height = Math.max(comp.getPreferredSize().height +4 , HieghtArray[row]);
if (HieghtArray[row]< height) {
HieghtArray[row] = height;
}
}
if(width > 300)
width=300;
columnmodel.getColumn(column).setPreferredWidth(width);
}
for (int i = 0; i < table.getRowCount(); i++) {
try {
table.setRowHeight(i, HieghtArray[i]);
} catch (Exception e) { }
}
}