2013-02-20 2 views
2

Iam, создающий простую программу, в которой пользователь вводит имя и описание. Если пользователь нажмет OK, программа запишет результат в файл. В принципе, у меня есть 3 класса. Я хочу вызвать класс class2 из класса1 и реализовать метод. Я знаю, как это сделать только в одном классе, но я тоже хотел бы знать об этом. Заранее спасибо.Как позвонить второму классу при нажатии кнопки?

Проблема в том, что входы не могут быть добавлены в файл. Может быть, IAM не называя имя файла правильно:

if (result == JOptionPane.OK_OPTION){ 

class2 ad = new class2(this); 
    } 

Ниже приведены мои 3 класса:

Главная

public class mainclass { 
    public static void main(String[] args) { 
     class1 a = new class1(); 
    } 
} 

class1

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

public class class1{ 

final JTextField field1 = new JTextField(10); 
final JTextField field2 = new JTextField(10); 
JPanel panel = new JPanel(); 

public class1() { 

     panel.add(new JLabel("Name:")); 
     panel.add(field1); 
     panel.setLayout(new GridLayout(5,2)); 
     panel.add(new JLabel("Description:")); 
     panel.add(field2); 

     int result = JOptionPane.showConfirmDialog(null, panel,"Enter Information", JOptionPane.OK_CANCEL_OPTION); 

     if (result == JOptionPane.OK_OPTION) { 
      class2 ad = new class2(); 
     } 
    } 
} 

class2

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

public class class2 { 

    class1 a; 

    public class2(class1 a) { 

     this.a = a; 

     a = new class1(); 

     BufferedWriter writer = null; 

     try { 

      writer = new BufferedWriter(new FileWriter("file.txt", true)); 

      String add1 = a.field1.getText(); 
      String add2 = a.field2.getText(); 

      writer.write(add1); 
      writer.write("\t"); 
      writer.write(add2); 
      writer.write("\t"); 

     } catch (IOException e) { 

     } finally { 
      try { 
      if (writer != null) 
       writer.close(); 
      } catch (IOException e) { 
      } 
     }  
    } 
} 
+0

Пожалуйста, отметьте свой вопрос. – meagar

+1

'' Проблема «' - в чем проблема? Некоторое сообщение об ошибке? – Dukeling

+0

Да. входы не могут быть добавлены в файл. – Ramal

ответ

2

Строка a = new class1() в class2 создает другой экземпляр, отличный от созданного в mainclass. Вместо этого передайте ссылку на class1 на ваш конструктор class2.

if (result == JOptionPane.OK_OPTION) { 
    class2 ad = new class2(this); 
} 
... 
public class2(class1 a) { 
    //a = new class1(); 
    this.a = a; 
    ... 
} 
+0

Я сделал это, но ничего не добавил в файл. – Ramal

+0

Это сработало для меня, когда я только что попробовал. Фактически, я видел дополнительные символы табуляции из предыдущего (неудачного) запуска. Вы можете изменить свой вопрос, чтобы показать свой текущий подход. – trashgod

+0

ОК, я его отредактировал. – Ramal

2

Это проблема.

Конструктор class1 создает экземпляр class2 здесь:

class2 ad = new class2(); 

который вызывает конструктор class2.

который создает экземпляр class1 здесь:

a = new class1(); 

который вызывает конструктор class1.

Спрашивает вас снова.

Итак, вы получите только оставшуюся часть конструктора class2 после второго приглашения (если вы отмените).

+0

Не могли бы вы рассказать мне правильный способ назвать второй класс? – Ramal

+0

@DamBokser Почему это даже в классе вообще, почему бы просто не сделать его методом в 'class1'? – Dukeling

+0

, потому что я знаю, как это сделать внутри того же класса. Я хотел бы научиться называть методы других классов. – Ramal

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