是否可以使用for循环将字符串数组插入jtable
Is it possible to Insert a string array into jtable using for loop
我遇到了一个麻烦,我无法将字符串数组插入到 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 行中。
但结果以一些空 table 结尾,没有显示任何错误
只看裁剪的屏幕截图
这是table已选择的员工列表。
点击创建考勤列表按钮后,结果为
table 看起来像这样。
但我需要一个看起来像这样的结果
请帮助我。
that I can't insert a string array into a jTable.
好吧,我没有看到您尝试这样做的任何代码。
首先阅读 DefaultTableModel
API。您可以使用您的数据轻松创建 DefaultTableModel。您可以:
创建一个空的 DefaultTableModel,然后使用 addRow(...)
方法在循环中添加一行。
您可以创建一个包含所需行数的 DefaultTableModel。然后就可以用setValueAt(...)
的方法改变每一行的数据了
如果您需要更多帮助,那么 post 一个适当的 SSCCE 来证明您遇到的问题。
编辑:
一个 SSCCE
的示例,它在按下按钮时简单地将一行数据添加到 table。该代码创建一个包含两个值的数组,然后调用 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);
}
}
在您的情况下,您需要获取每个选定的行。然后对于每一行,您将:
- 为要复制的数据创建一个数组。
- 然后调用第二个 TableModel 的 addRow(...) 方法
所以基本上您需要更改 ActionListner 中的代码以添加一个循环来执行上述两个步骤。
您可以使用此方法将 String[] 添加到 JTable:
首先您必须获取模型,然后您必须添加 String[]:
((TableModel) Tbl_To.getModel()).addRow(Ary);
使用此方法,您选择的数据在 JTable 中位于一行中。
我终于找到了实现目标的窍门..
我创建了一个虚拟数组,然后在插入行 data.After 之前调用数组值,我使用 setValues
来设置 mystring array.Thats 的值,我的意思是什么。
这是我编辑的代码
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());}
}
我遇到了一个麻烦,我无法将字符串数组插入到 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 行中。
但结果以一些空 table 结尾,没有显示任何错误
只看裁剪的屏幕截图
这是table已选择的员工列表。
点击创建考勤列表按钮后,结果为
table 看起来像这样。
但我需要一个看起来像这样的结果
请帮助我。
that I can't insert a string array into a jTable.
好吧,我没有看到您尝试这样做的任何代码。
首先阅读 DefaultTableModel
API。您可以使用您的数据轻松创建 DefaultTableModel。您可以:
创建一个空的 DefaultTableModel,然后使用
addRow(...)
方法在循环中添加一行。您可以创建一个包含所需行数的 DefaultTableModel。然后就可以用
setValueAt(...)
的方法改变每一行的数据了
如果您需要更多帮助,那么 post 一个适当的 SSCCE 来证明您遇到的问题。
编辑:
一个 SSCCE
的示例,它在按下按钮时简单地将一行数据添加到 table。该代码创建一个包含两个值的数组,然后调用 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);
}
}
在您的情况下,您需要获取每个选定的行。然后对于每一行,您将:
- 为要复制的数据创建一个数组。
- 然后调用第二个 TableModel 的 addRow(...) 方法
所以基本上您需要更改 ActionListner 中的代码以添加一个循环来执行上述两个步骤。
您可以使用此方法将 String[] 添加到 JTable:
首先您必须获取模型,然后您必须添加 String[]:
((TableModel) Tbl_To.getModel()).addRow(Ary);
使用此方法,您选择的数据在 JTable 中位于一行中。
我终于找到了实现目标的窍门..
我创建了一个虚拟数组,然后在插入行 data.After 之前调用数组值,我使用 setValues
来设置 mystring array.Thats 的值,我的意思是什么。
这是我编辑的代码
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());}
}