我遇到了麻烦,我无法在jTable中插入字符串数组。场景是我在数组中有一些选定的值,我想将该值插入jTable。
我的代码在这里:
import java.util.Arrays;
import java.util.Vector;
import javax.swing.table.DefaultTableModel;
public class as extends javax.swing.JFrame {
public as() {
initComponents();
}
@SuppressWarnings("unchecked")
private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane();
t1 = new javax.swing.JTable();
jScrollPane2 = new javax.swing.JScrollPane();
t2 = new javax.swing.JTable();
jButton1 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
t1.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{"122", "a", null, null},
{"123", "b", null, null},
{"124", "c", null, null},
{"125", "d", null, null},
{"126", "e", null, null}
},
new String [] {
"Title 1", "Title 2", "Title 3", "Title 4"
}
));
jScrollPane1.setViewportView(t1);
t2.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
},
new String [] {
"Title 1", "Title 2"
}
));
private void jButton1MouseReleased(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
Vector R_D=new Vector();
if(t1.getRowCount()>0){
String[] ary = new String[t1.getRowCount()];
try{
for(int i=0;i<t1.getRowCount();i++){
R_D.add(t1.getValueAt(i, 0).toString());
ary[i]=t1.getValueAt(i, 0).toString();
System.out.println(Arrays.toString(ary)+i);
((DefaultTableModel) t2.getModel()).addRow(ary);
}
}
catch(Exception d)
{System.out.println(d.getMessage());}
}
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new as().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JTable t1;
private javax.swing.JTable t2;
// End of variables declaration
我在名为ary[]
的数组中找到了正确的答案。
我需要将所有数组值复制到单独的jTable行中。
但是结果在一些空表中结束而没有显示任何错误
只看到裁剪的屏幕截图
这是选择员工名单的表格。
单击Create Attendance List按钮后,结果为
表格看起来像这样。
但我需要一个看起来像这样的结果
请帮帮我。
答案 0 :(得分:2)
我无法将字符串数组插入到jTable中。
好吧,我没有看到你试图这样做的任何代码。
首先阅读DefaultTableModel
API。您可以使用数据轻松创建DefaultTableModel。你可以:
创建一个空的DefaultTableModel,然后使用addRow(...)
方法在循环中添加一行。
您可以使用所需的行数创建DefaultTableModel。然后,您可以使用setValueAt(...)
方法更改每行中的数据。
如果您需要更多帮助,请发布适当的SSCCE,以证明您遇到的问题。
编辑:
SSCCE
的示例,只需在按下按钮时向表中添加一行数据。代码创建一个包含两个值的Array,然后调用DefaultTableModel的addRow(...)
方法。
import java.awt.*;
import java.beans.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
public class TableRowColumn2 extends JFrame
{
private final static String LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
JTable table;
DefaultTableModel model;
JPanel buttonPanel;
JButton button;
public TableRowColumn2()
{
// Create table
Object[][] data =
{
{new Integer(1), "A"},
{new Integer(2), "B"},
{new Integer(3), "C"}
};
String[] columnNames = {"Number","Letter"};
model = new DefaultTableModel(data, columnNames);
table = new JTable(model)
{
public boolean isCellEditable(int row, int column)
{
return true;
}
};
table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
table.setPreferredScrollableViewportSize(table.getPreferredSize());
table.changeSelection(0, 0, false, false);
table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
table.getColumnModel().getColumn(0).setCellRenderer( table.getDefaultRenderer(Integer.class) );
// Add table and a Button panel to the frame
final JScrollPane scrollPane = new JScrollPane( table );
getContentPane().add( scrollPane, BorderLayout.CENTER );
buttonPanel = new JPanel();
getContentPane().add( buttonPanel, BorderLayout.NORTH );
button = new JButton( "Add Row" );
button.setMnemonic('A');
buttonPanel.add( button );
button.addActionListener( new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
model.addRow( createRow() );
int row = table.getRowCount() - 1;
table.changeSelection(row, 0, false, false);
table.requestFocusInWindow();
}
});
}
private Object[] createRow()
{
Object[] newRow = new Object[2];
int row = table.getRowCount();
newRow[0] = Integer.toString(row + 1);
row = (row % 26) + 1;
newRow[1] = LETTERS.substring(row-1, row);
return newRow;
}
public static void main(String[] args)
{
TableRowColumn2 frame = new TableRowColumn2();
frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
frame.pack();
frame.setLocationRelativeTo( null );
frame.setVisible(true);
}
}
在您的情况下,您需要获取每个选定的行。然后,对于每一行,您将:
所以基本上你需要更改ActionListner中的代码来添加一个循环来完成上述两个步骤。
答案 1 :(得分:0)
您可以使用此方法将String []添加到JTable:
首先你必须得到模型,然后你必须添加String []:
((TableModel) Tbl_To.getModel()).addRow(Ary);
使用此方法,您选择的数据位于JTable的一行中。
答案 2 :(得分:0)
最后我找到了实现目标的技巧..
我创建了一个虚拟数组,然后在插入行数据之前调用数组值。之后我使用setValues
来设置mystring数组的值。这就是我的意思。
这是我编辑的代码
Vector R_D=new Vector();
if(Tbl_AddAttTo.getRowCount()>0){
String[] Dary = {"nil","nil","nil","nil"};
String[] ary = new String[Tbl_AddAttTo.getRowCount()];
try{
for(int i=0;i<Tbl_AddAttTo.getRowCount();i++){
R_D.add(Tbl_AddAttTo.getValueAt(i, 0).toString());
ary[i]=Tbl_AddAttTo.getValueAt(i, 0).toString();
((DefaultTableModel) Tbl_Exp_Mgr1.getModel()).addRow(Dary);
Tbl_Exp_Mgr1.setValueAt(ary[i], i, 0);
}
}
catch(Exception d)
{System.out.println(d.getMessage());}
}