2013-02-20 2 views
2

Iam은 사용자가 이름과 설명을 입력하는 간단한 프로그램을 만듭니다. 사용자가 확인을 누르면 프로그램은 결과를 파일에 씁니다. 기본적으로, 나는 3 개의 클래스가 있습니다. 클래스 1에서 클래스 2를 호출하고이 메소드를 구현하려고합니다. 나는 오직 한 반에서 그것을하는 법을 알고 있지만 나는 또한이 방법을 알고 싶다. 미리 감사드립니다.버튼을 눌렀을 때 두 번째 클래스를 호출하는 방법은 무엇입니까?

문제는 입력을 파일에 추가 할 수 없다는 것입니다. 어쩌면 스피 제대로 파일 이름을 호출하지 :

홈페이지

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

클래스 1

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) { 
      } 
     }  
    } 
} 
: 아래
if (result == JOptionPane.OK_OPTION){ 

class2 ad = new class2(this); 
    } 

제 3 개 클래스이다
+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

문제입니다. class2의 생성자를 호출

class2 ad = new class2(); 

:

class1의 생성자는 여기 class2의 인스턴스를 만듭니다. class1의 생성자를 호출

a = new class1(); 

: 여기 class1의 인스턴스를 생성

.

다시 묻는 메시지가 표시됩니다.

따라서 두 번째 프롬프트 (취소 한 경우) 이후에 나머지 생성자는 class2입니다.

+0

두 번째 수업을 올바르게 호출하는 방법을 알려주시겠습니까? – Ramal

+0

@DamBokser 왜 클래스 에서조차도, 왜 그냥 class1의 메소드로 만들지 않는가? – Dukeling

+0

왜냐하면 내가 같은 클래스 안에서 어떻게하는지 알기 때문입니다. 다른 클래스의 메서드를 호출하는 방법을 배우고 싶습니다. – Ramal

관련 문제