2016-02-17 2 views
0

Я пытаюсь очистить текст в JTextArea, и, глядя на другие вопросы, кажется, что вызов textArea.setText (""/null) будет очистить область текста. Это, похоже, не происходит с моим кодом, и он добавляет новый текст к тексту уже в области. Может ли кто-нибудь увидеть что-то не так в моем коде?textArea.setText ("") не очищает текст в JTextArea

public class morseJFrame extends JFrame implements ActionListener { 

private static final long serialVersionUID = 1L; 
private JPanel contentPane; 
public JTextPane textPane = new JTextPane(); 
public JTextArea textArea = new JTextArea(); 

/** 
* Launch the application. 
*/ 
public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       morseJFrame frame = new morseJFrame(); 
       frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

/** 
* Create the frame. 
*/ 
public morseJFrame() { 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(100, 100, 450, 508); 
    contentPane = new JPanel(); 
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    setContentPane(contentPane); 
    contentPane.setLayout(null); 

    textPane.setBounds(5, 5, 424, 194); 
    textPane.setText("Enter your alphanumberic text here to translate."); 
    contentPane.add(textPane); 

    JButton btnTranslate = new JButton("Translate"); 
    btnTranslate.setBounds(5, 419, 213, 41); 
    btnTranslate.addActionListener(this); 
    add(btnTranslate); 
    contentPane.add(btnTranslate); 

    textArea.setBounds(5, 210, 424, 203); 
    contentPane.add(textArea); 

    JButton btnPlaySound = new JButton("Play Morse Sound"); 
    btnPlaySound.setBounds(228, 419, 201, 41); 
    contentPane.add(btnPlaySound); 
} 

public void actionPerformed(ActionEvent e) { 
    String command = e.getActionCommand(); 
    if (command.equals("Translate")) { 
     String text = textPane.getText(); 
     String translatedText = MorseTranslate.doMorse(text); 
     textArea.setText(""); 
     textArea.setText(translatedText); 
    } 
} 

}

+0

Что произойдет, если вы добавите одно место вместо ничего? – codehitman

+3

Прямо под 'textArea.setText (" ")' вы устанавливаете текст в текст объекта 'TextPane'. –

+0

Что такое 'String translationText = MorseTranslate.doMorse (text);' do?Поскольку это текст, который вы добавляете, он возвращает как простой, так и переведенный текст? – MadProgrammer

ответ

4

Это, и это добавляет новый текст в текст уже в районе

Так на основе этого кода ...

String text = textPane.getText(); 
String translatedText = MorseTranslate.doMorse(text); 
textArea.setText(""); 
textArea.setText(translatedText); 

Я бы предположил, что проблема связана с вашим MorseTranslate.doMorse, который, вероятно, возвращает текст, прилагаемый к себе

Но, как вы можете видеть, это матовый r «работа догадки», поскольку у нас нет полного кода.

Рассмотрите возможность предоставления runnable example, который демонстрирует вашу проблему. Это не дамп кода, а пример того, что вы делаете, что подчеркивает проблему, с которой вы сталкиваетесь. Это приведет к меньшему путанице и лучшим ответам

+1

И снова получаю facepalm, так как у меня есть ArrayList, который я не очищал в своем классе MorseTranslate. Спасибо всем за помощь. Он работает сейчас. И спасибо @MadProgrammer за то, что он показал мне несколько более сложных вопросов. Все еще пытаясь завладеть им! – Eric

+0

Хорошее объяснение MadProgrammer – pczeus

2

Попробуйте изменить порядок, как это:

textArea.setText(translatedText); 
    textArea.setText(""); 

Используйте либо textArea.setText(null)textArea.setText("") или одно и то же.

+0

Хммм, это просто делает так, чтобы в тексте не появлялся текст, поскольку он сразу очищается. – Eric

+0

см. Обновленный ответ @ Eric – Abdelhak

+0

Это очищает его, но теперь текст не отображается в поле вообще, потому что он сразу очищается. Сейчас он добавляет текст уже там. Я просто хочу, чтобы новое сообщение отображалось. – Eric

0

Вы можете альтернативно попробовать:

textArea.setText(null); 

Смотрите, если это работает. Но я согласен с Wyatt, вы устанавливаете другой текст сразу после его очистки.

+0

* «Это, похоже, не происходит с моим кодом, и он добавляет новый текст в текст уже в области »* – MadProgrammer

1

Я думаю, что setText() заменяет содержимое (не добавляет), поэтому вам не нужно делать setText (""), а затем setText ("текст, который вы хотите"), последнее предложение должно быть достаточно.

+0

Хммм похоже, что сообщение все еще только добавлено и не очищено. – Eric

+0

* «Это не похоже на мой код, и он добавляет новый текст в текст уже в области» * – MadProgrammer

1

setText("") не очистить текст

Да, это так.

textArea.setText(""); 

Здесь вы очищаете область текста.

textArea.setText(translatedText); 

Здесь, в самой следующей строке, вы устанавливаете его на что-то еще. не кажется, что происходит с моим кодом

+0

Да, моя проблема в том, что я хочу обновить текст в textArea, и прямо сейчас прилагается. Каждый раз, когда я нажимаю кнопку, я хочу очистить текст и поставить новое предложение, а не добавлять его к тому, что уже есть. – Eric

+0

* «Это, похоже, не происходит с моим кодом, и он добавляет новый текст в текст уже в области» * – MadProgrammer

+0

@ Эрик Итак, вы должны добавить к 'translText.'. Методы, которые вы используете, не ведут себя так, как вы описали здесь. Вызов 'setText (" ")' избыточен. – EJP

0

Вы вставили простую инструкцию печати, чтобы увидеть, что textPane.getText() на самом деле устанавливает текст String перед отправкой на doMorse (String)?

Смежные вопросы