我有两个班,第一个是我的主班,第二个是我的编辑框架班。
public class RecordTableGUI extends JFrame implements ActionListener {
String newName;
public RecordTableGUI(String newReceivedName) {
newName = newReceivedName;
System.out.println("new name in new constructor : " + newName); //prints new name correctly
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == editButton) {
Object oldName = table.getValueAt(table.getSelectedRow(), 1);
System.out.println("old name: " + oldName); // prints old name correctly
this.setVisible(false);
new UpdateGUI(String.valueOf(oldName));
System.out.println("new name in problem area: " + newName); // why null?
}
}
}
我的第二个类(UpdateGUI)在其构造函数中提供了oldName,并对其进行了编辑,当我单击
okButton
时,它将newName发送给我的第一个类。我的第二堂课:
public class UpdateGUI extends JFrame implements ActionListener {
String oldName, newName;
public UpdateGUI(String oldname) {
oldName = oldname;
....
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == okButton) {
newName = tf.getText(); //tf is JTextfield
new RecordTableGUI(newName);
this.setVisible(false);
}
}
我的问题是,为什么newName为null?
更新:
public class RecordTableGUI extends JFrame implements ActionListener {
public RecordTableGUI(String newReceivedName) {
setNewName(newReceivedName);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == editButton) {
Object oldName = table.getValueAt(table.getSelectedRow(), 1);
System.out.println("old name: " + oldName);
RecordTableGUI recordObject = new RecordTableGUI();
UpdateGUIDialog updDialog = new UpdateGUIDialog(String.valueOf(oldName), recordObject);
}
}
UpdateGUIDialog类:
public class UpdateGUIDialog extends JDialog implements ActionListener {
RecordTableGUI recordtablegui;
public UpdateGUIDialog(String old, RecordTableGUI recordGUI) {
oldName = old;
recordtablegui = recordGUI;
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == okButton) {
newName = tf.getText();
recordtablegui.setNewName(newName);
this.dispose();
}
}
}
输出:
old name:james //prints correctly
new name: null //prints null
new name in set method: rrr //prints correctly
我需要打印
rrr
而不是null。 最佳答案
Java对象有点像真实对象。 new
的作用与它的名字相同:它创建了一个新对象。让我们举一个简单的例子:
Box box1 = new Box();
Box box2 = new Box();
box1.fillWithCandies(candies);
box1
是装满糖果的盒子。 box2
是一个不同的框,其中不包含任何内容,因为只有box1
填充了糖果。在您的代码中,updateGUI的
actionPerformed()
方法使用新名称创建一个新的RecordTableGUI
对象。那不会改变第一个。如果要updateGUI修改现有的RecordTableGUI对象,则需要具有对该对象的引用:
public class updateGUI extends JFrame implements ActionListener {
private RecordTableGUI recordTableGUIToUpdateWhenOKIsClicked;
public updateGUI(RecordTableGUI recordTableGUIToUpdateWhenOKIsClicked, ...) {
this.recordTableGUIToUpdateWhenOKIsClicked =
recordTableGUIToUpdateWhenOKIsClicked;
...
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == okButton) {
newName = tf.getText();
this.recordTableGUIToUpdateWhenOKIsClicked.setNewName(newName);
}
}
}
在使用Swing之前,您应该使用更简单的示例进行练习。您还应该遵守Java命名约定。并且
updateGui
类应该是JDialog,而不是JFrame。