Текст не устанавливается в JTextArea / Field - PullRequest
0 голосов
/ 07 ноября 2011

У меня проблемы с установкой некоторого текста в 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 Ответ

3 голосов
/ 07 ноября 2011

Код, который вызывает run, не имеет значения ...

Когда у вас есть проблема, вы не знаете, какой код является или не имеет значения. Контекст того, как вызывается код, имеет значение. Что заставляет вас думать, что мы всегда можем решить проблемы, просто взглянув на код. Иногда нам действительно нужно выполнить код, чтобы мы могли видеть реальный логический поток программы и т. Д.

Это не то, как вы создаете апплет. Компоненты должны быть добавлены в апплет в методе init () апплета. Я предлагаю вам прочитать Как сделать апплеты .

Проблема с вашим кодом в том, что у вас есть 2 экземпляра класса EditDiary. Тот, который является апплетом, и тот, который вы пытаетесь добавить в кадр. Однако код ActionListener ссылается только на текстовые компоненты апплета, а не на компоненты, добавленные во фрейм.

Вам нужен редизайн вашей программы. Возможно, код для создания фрейма должен быть внутренним классом, чтобы вы могли создавать переменные и прослушиватели, принадлежащие фрейму, а не апплету.

...