JTextArea可编辑或不可编辑,具体取决于它的调用方式

时间:2013-07-12 23:10:07

标签: java swing jtextarea

使用可编辑的示例进行全面重新编辑,以澄清我的问题。

整体程序:类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)”的位置。

我希望这个描述比我上一个更清楚。

0 个答案:

没有答案