2014-12-21 2 views
0

У меня есть проект, в котором я немного застрял. У меня есть JFrame с JTextArea и кнопка при нажатии кнопки, чтобы открыть тестовый класс в текстовой области кадра. Итак, мой вопрос: как мне получить класс теста для открытия в текстовой области фрейма?Отображать вывод класса в текстовой области при нажатии кнопки

Я пробовал getText(test()), но он сказал, что не может найти тест метода символов.

Это мой JFrame код:

package sunday; 

/** 
* 
* @author warwick 
*/ 
public class sunday1 extends javax.swing.JFrame { 
/** 
* Creates new form sunday1 
*/ 
public sunday1() { 
    initComponents(); 
} 

/** 
* This method is called from within the constructor to initialize the form. 
* WARNING: Do NOT modify this code. The content of this method is always 
* regenerated by the Form Editor. 
*/ 
@SuppressWarnings("unchecked") 
// <editor-fold defaultstate="collapsed" desc="Generated Code">       
private void initComponents() { 

    jScrollPane1 = new javax.swing.JScrollPane(); 
    TxtField = new javax.swing.JTextArea(); 
    btnOpen = new javax.swing.JToggleButton(); 

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

    TxtField.setColumns(20); 
    TxtField.setRows(5); 
    jScrollPane1.setViewportView(TxtField); 

    btnOpen.setText("Open"); 
    btnOpen.addActionListener(new java.awt.event.ActionListener() { 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 
      btnOpenActionPerformed(evt); 
     } 
    }); 

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
    getContentPane().setLayout(layout); 
    layout.setHorizontalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() 
      .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
      .addComponent(btnOpen) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
      .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 225, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addGap(57, 57, 57)) 
    ); 
    layout.setVerticalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(layout.createSequentialGroup() 
      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
       .addGroup(layout.createSequentialGroup() 
        .addGap(52, 52, 52) 
        .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 212, javax.swing.GroupLayout.PREFERRED_SIZE)) 
       .addGroup(layout.createSequentialGroup() 
        .addGap(101, 101, 101) 
        .addComponent(btnOpen))) 
      .addContainerGap(36, Short.MAX_VALUE)) 
    ); 

    pack(); 
}// </editor-fold>       

private void btnOpenActionPerformed(java.awt.event.ActionEvent evt) {           

    TxtField.setText(test()); 
}          

Это мой код класса, который должен отображаться в текстовой области кадра.

public class sundaytest { 
    private void test() { 
    System.out.println("Hello World"); 
    } 
} 
+0

1) Слова, напечатанные во всех нижних регистрах, трудно читать, например, пытаться выслушать кого-то, кто бормочет. Пожалуйста, используйте письмо в верхнем регистре в начале предложений, для слова I и собственные имена, такие как 'ArrayList' или Oracle. 2) Пожалуйста, используйте форматирование кода для фрагментов кода и кода, структурированных документов, таких как HTML/XML или ввода/вывода. Для этого выберите текст и нажмите кнопку '{}' в верхней части формы публикации/редактирования сообщения. 3) См. [Использование нескольких JFrames, Хорошая/Плохая Практика?] (Http://stackoverflow.com/q/9554636/418556) –

+1

Поверните свою проблему, попросите свой «тест» класс предоставить средство, с помощью которого класс кадра может извлечь нужную ему информацию, а затем включить класс рамки в текстовую область. – MadProgrammer

+1

Класс sundaytest предназначен для вывода вывода в выходной поток 'System.out'. Хотя можно перенаправить выходной поток, было бы лучше перепроектировать класс для использования метода getString() 'или' getMessage() ', который возвращает« Hello World »' .. Тогда его экземпляр может быть используется для подачи текста для текстовой области в графическом интерфейсе или «System.out» по мере необходимости. –

ответ

1

Здесь несколько вещей.

  1. test() не найден, поскольку в классе, который пытается его выполнить, нет тестовой функции. (sunday1)

  2. test() in sundaytest является закрытым, что означает, что класс вне sundaytest не может его выполнить.

  3. test() - это метод void, который не возвращает объект String, который ищет TxtField.setText (String str).

Чтобы устранить эти проблемы, вы можете сделать следующее:

а. Измените метод btnOpenActionPerformed задать строку без использования отдельного класса (sundaytest) как так:

TxtField.setText("Text to be set"); 

Или

б. Измените метод test() в sundaytest, чтобы он был доступен из sunday1 и возвращал объект String во время его выполнения.

public String test() { 
    return "Hello World"; 
} 

И изменить btnOpenActionPerformed для доступа к этой функции через sundaytest.

TxtField.setText(new sundaytest().test()); 
+0

Спасибо за вашу помощь. Нет, я могу перейти к моему проекту-подпрограмме, он отлично работал – warwick

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