【问题标题】:Text not Setting in JTextArea/FieldJTextArea/Field 中未设置文本
【发布时间】:2011-11-06 20:33:13
【问题描述】:

我在 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]);
    }
  }    
}

【问题讨论】:

  • 调用run()的代码在哪里?为什么你有一个什么都不做的main()?为什么你的 finally 什么都不做?
  • 调用 run 的代码无关紧要...您只需要知道它确实被调用并且它确实在数组中读取以及什么不...我不担心对于您在这里所说的任何内容,我还没有完成其余的代码...我只需要知道为什么 textArea/Field 没有填充

标签: java swing jpanel jtextfield jtextarea


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2012-02-26
    • 2012-02-24
    • 1970-01-01
    • 2015-04-06
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多