文本未在JTextArea / Field中设置

时间:2011-11-06 20:33:14

标签: java swing jpanel jtextfield jtextarea

我在JTextArea和JTextField中设置一些文本时遇到问题......我有点困惑,因为我之前已经在其中设置了文本,事实上我已将它们设置在同一程序的不同类中没有任何问题...我打印出字符串以检查以确保它不是空或只是空“”并且我的字符串确实打印它们应该但他们没有在JTextField / Area中设置。

任何人都可以告诉我它为什么搞乱了吗?

(我已经给你完整的代码,所以你不会被方法调用混淆,但大部分都可能没有必要。你真正需要关注的是run()方法和populateInfo()方法.populateInfo()是应该将测试设置为textArea和textField的地方。)

以下是代码:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.lang.*;
import java.util.*;
import java.io.*;

public class EditDiary extends JApplet implements ActionListener {

  private JFrame frame = new JFrame();
  private String[] date;
  private String[] rest;
  private int index = 0;
  private int count = 0;

  private JLabel lblDate = new JLabel("Date");
  private JTextField txtDate = new JTextField();
  private JLabel lblDiary = new JLabel("Diary Entry");
  private JTextArea txtDiary = new JTextArea(20,30);

  private JButton btnDone = new JButton("Done");
  private JButton btnCancel = new JButton("Cancel");

  public EditDiary(){

    JPanel panel1 = new JPanel();

    panel1.add(lblDate);
    panel1.add(txtDate);
    panel1.add(lblDiary);
    panel1.add(txtDiary);
    panel1.add(btnDone);
    panel1.add(btnCancel);

    add(panel1);

    btnDone.addActionListener(this);
    btnCancel.addActionListener(this);

  }

  public void actionPerformed(ActionEvent e) {

    if (e.getSource() == btnDone) {

      try {
        editInfo();
      }
      catch (Exception ex) {

      }
      finally {

      }
    }
    else if (e.getSource() == btnCancel) {
      // Haven't done anything here yet
    }
  }

  public void run(String[] sDate, String[] sRest, int iIndex, int iCount) {

    date = sDate;
    rest = sRest;
    index = iIndex;
    count = iCount;

    JApplet applet = new EditDiary();
    frame.add(applet);
    frame.setTitle("Edit Diary Entry");
    frame.setLocationRelativeTo(null); // Center the frame
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    frame.setSize(1280, 800);
    frame.setLocationRelativeTo(null); // Center the frame
    frame.setVisible(true);

    populateInfo();
  }

  public static void main(String[] args) {

  }

  public void populateInfo() {

    // System.out.println(date[index]);
    // System.out.println(rest[index]);

    txtDate.setText(date[index]);
    txtDiary.setText(rest[index]);

  }

  public void editInfo() throws Exception {

    BufferedWriter out = new BufferedWriter(new FileWriter("Diary.txt"));

    date[index] = txtDate.getText();
    rest[index] = txtDiary.getText();

    for(int i = 0; i < count; ++i) {
      out.write(date[i]);
      out.write(rest[i]);
    }
  }    
}

1 个答案:

答案 0 :(得分:3)

  

调用run的代码无关紧要......

当您遇到问题时,您不知道代码是什么或不相关。如何调用代码的上下文是相关的。是什么让你觉得我们总能通过查看代码来解决问题。有时我们实际上需要执行代码,以便我们可以看到程序的实际逻辑流程等。

这不是您创建Applet的方式。应该在applet的init()方法中将组件添加到applet中。我建议你阅读How to Make Applets

您的代码存在的问题是您有2个EditDiary类的实例。一个是Applet,另一个是您尝试添加到框架中的。但是,ActionListener代码仅引用Applet文本组件,而不是引用添加到框架的组件。

您需要重新设计您的计划。也许创建框架的代码应该是一个内部类,这样你就可以创建属于框架而不是applet的变量和监听器。