使用可编辑的示例进行全面重新编辑,以澄清我的问题。
整体程序:类MainFrame显示一个带有SQL查询结果的JTable。 MainFrame还具有JButtons,用于刷新,添加,更新和查询表。单击“更新”按钮可使文本区域和提交按钮可见。用户可以在文本区域中输入ID号。当他们点击提交一个新框架时,UpdateFrame会打开,其中记录中的所有数据都与ID编号相对应。
MainFrame和UpdateFrame的精简版本如下所示。
UpdateFrame2.java
package kft1task4;
import javax.swing.*;
import java.awt.event.*;
import java.sql.SQLException;
import javax.swing.JScrollPane;
public class UpdateFrame2 extends JFrame implements ActionListener {
JPanel pane = new JPanel();
JTextArea jta = new JTextArea("This is a text area");
UpdateFrame2() {
setVisible(true);
setBounds(1000,400,1000,500);
pane.setLayout(null);
add(pane);
jta.setBounds(110,100,100,15);
pane.add(jta);
}
@Override
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
} //End actionListener
} //End class
很简单。一个框架,一个面板和一个JTextArea。 JTextArea应该是可编辑的;我应该可以输入它。
MainFrame2.java
package kft1task4;
import java.awt.event.*;
import java.sql.SQLException;
import javax.swing.*;
public class MainFrame2 extends JFrame implements ActionListener {
JPanel pane = new JPanel();
JButton closeButt = new JButton("Push me to close the program");
JButton updateButt = new JButton("Push me to update a record");
JButton submitUpdButt = new JButton("Submit");
JLabel updateLabel = new JLabel("Select student id to update");
JTextArea updateTA = new JTextArea();
MainFrame2(){
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(1000,200,1500,1000);
pane.setLayout(null);
add(pane);
updateButt.setBounds(620,550,200,100);
updateButt.addActionListener(this);
pane.add(updateButt);
closeButt.setBounds(1290,550,200,100);
closeButt.addActionListener(this);
pane.add(closeButt);
submitUpdButt.setBounds(820,735,200,25);
submitUpdButt.addActionListener(this);
submitUpdButt.setVisible(false);
pane.add(submitUpdButt);
updateLabel.setBounds(620,700,200,15);
updateLabel.setVisible(false);
pane.add(updateLabel);
updateTA.setBounds(820,700,200,15);
updateTA.setVisible(false);
pane.add(updateTA);
}
@Override
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if(source == closeButt){
System.exit(0);
}
if(source == updateButt){
updateLabel.setVisible(true);
updateTA.setVisible(true);
submitUpdButt.setVisible(true);
}
if(source == submitUpdButt){
//submitUpdButt.setVisible(false);
new UpdateFrame2();
updateTA.setText(null);
updateTA.setVisible(false);
updateLabel.setVisible(false);
submitUpdButt.setVisible(false);
}
}
}
请注意三个字段:updateLabel,updateTA和submitUpdButt(请原谅不良命名)。首次实例化新的MainFrame2()时,这三个字段为.setVisible(False)。单击updateButt可使它们可见。
单击submitUpdButt执行五个操作:首先,它实例化一个新的UpdateFrame2()。其次,它清除了UpdateTA中的文本。最后,它使三个字段不可见。这5个动作完成没有问题。
现在这里很奇怪:请注意我已经两次列出“submitUpdButt.setVisible(false)”。一次在“new UpdateFrame2()”之前和之后一次。我评论一个并留下其他地方。如果在“new UpdateFrame2()之前出现”submitUpdButt.setVisible(false)“,则会出现UpdateFrame,并且其文本区域是可编辑的。
如果在“new UpdateFrame2()之后出现”,则会出现>,如上所述,将出现UpdateFrame。但其文本区域不可编辑。
澄清:程序的每个其他元素的行为完全相同。 3个字段按预期显示和消失。窗口正确打开和关闭。文本“这是一个文本区域”出现在它应该的位置。没有错误产生。但UpdateFrame2中的文本区域是可编辑的,或者不是基于我放置“submitUpdButt.setVisible(false)”的位置。
我希望这个描述比我上一个更清楚。