不解: 用数组初始化jTable时,为什么在jTable输出之后,数组的改变还能起作用....运行这段程序就明白我在讲什么了....
package my.test;
import javax.swing.JScrollPane;
import javax.swing.JTable;import javax.swing.WindowConstants;public class Swing_Test_1 extends javax.swing.JFrame {
/**
*
*/
private static final long serialVersionUID = 6785582286857692443L;
private JScrollPane jScrollPane_testjTable;
private JTable jTable1; /**
* Auto-generated main method to display this JFrame
*/
public static void main(String[] args) {
Swing_Test_1 inst = new Swing_Test_1();
inst.setVisible(true);
}
public Swing_Test_1() {
super();
initGUI();
}
private void initGUI() {
try {
String[][] tablec = new String[][] { { "One", "Two" }, { "Three", "Four" } };
String[] tableh = new String[] { "Column 1", "Column 2" };
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
getContentPane().setLayout(null);
{
jScrollPane_testjTable = new JScrollPane();
getContentPane().add(jScrollPane_testjTable);
jScrollPane_testjTable.setBounds(0, 42, 392, 231);
{
jTable1 = new JTable(
tablec,
tableh
);
jScrollPane_testjTable.setViewportView(jTable1);
}
}
pack();
setSize(400, 300);
//看这句......不解.....
tablec[0][1] = "xxxxx";
} catch (Exception e) {
e.printStackTrace();
}
}}
package my.test;
import javax.swing.JScrollPane;
import javax.swing.JTable;import javax.swing.WindowConstants;public class Swing_Test_1 extends javax.swing.JFrame {
/**
*
*/
private static final long serialVersionUID = 6785582286857692443L;
private JScrollPane jScrollPane_testjTable;
private JTable jTable1; /**
* Auto-generated main method to display this JFrame
*/
public static void main(String[] args) {
Swing_Test_1 inst = new Swing_Test_1();
inst.setVisible(true);
}
public Swing_Test_1() {
super();
initGUI();
}
private void initGUI() {
try {
String[][] tablec = new String[][] { { "One", "Two" }, { "Three", "Four" } };
String[] tableh = new String[] { "Column 1", "Column 2" };
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
getContentPane().setLayout(null);
{
jScrollPane_testjTable = new JScrollPane();
getContentPane().add(jScrollPane_testjTable);
jScrollPane_testjTable.setBounds(0, 42, 392, 231);
{
jTable1 = new JTable(
tablec,
tableh
);
jScrollPane_testjTable.setViewportView(jTable1);
}
}
pack();
setSize(400, 300);
//看这句......不解.....
tablec[0][1] = "xxxxx";
} catch (Exception e) {
e.printStackTrace();
}
}}
package my.test;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;import javax.swing.WindowConstants;public class Swing_Test_1 extends javax.swing.JFrame {
/**
*
*/
private static final long serialVersionUID = 6785582286857692443L;
private JScrollPane jScrollPane_testjTable;
private JTable jTable1;
private String tmp[][] = null;
private JLabel jLabel1; /**
* Auto-generated main method to display this JFrame
*/
public static void main(String[] args) {
Swing_Test_1 inst = new Swing_Test_1();
inst.setVisible(true);
}
public Swing_Test_1() {
super();
initGUI();
}
private void initGUI() {
try {
String[][] tablec = new String[][] { { "One", "Two" }, { "Three", "Four" } };
String[] tableh = new String[] { "Column 1", "Column 2" };
this.tmp = tablec;
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
getContentPane().setLayout(null);
{
jScrollPane_testjTable = new JScrollPane();
getContentPane().add(jScrollPane_testjTable);
jScrollPane_testjTable.setBounds(0, 42, 392, 231);
{
jTable1 = new JTable(
tablec,
tableh
);
jScrollPane_testjTable.setViewportView(jTable1);
}
}
{
jLabel1 = new JLabel();
getContentPane().add(jLabel1);
jLabel1.setText("jLabel1");
jLabel1.setBounds(28, 7, 133, 28);
}
pack();
setSize(400, 300);
//看这句......不解.....
tablec[0][1] = "xxxxx";
jTable1.setValueAt("yyyyy", 1, 0);
jLabel1.setText(this.tmp[1][0]);
} catch (Exception e) {
e.printStackTrace();
}
}}
我就是想问一下....怎么能解除这个连带关系...也就是..我想,在jTable.setValueAt后...不改变this.tmp..应该这么做?用其他方式初始化jTable吗?
好像没有办法分开,不过,我觉得有必要分开吗?你另外定义一个数组用不就可以了,为啥一定还要使用原来的数组?
this.tmp = tablec;这句表明tmp与tablec是一个对象,都关联到JTable的内容。显示的内容与这两个对象双向联动。