2012-02-08 5 views
0

JTextField에 문제가 있습니다. JTextField (JFrame A에 위치)에서 다른 JTextField (JFrame B에 위치)로 변수를 전달하는 방법을 모르겠습니다. 나는 그렇게했는데, 그것은 즉 그것은 어떤 실행/컴파일 오류가 발생하지 않으며 텍스트를 수신, 아무것도하지 않습니다.jtextfield의 변수를 다른 JFrame/클래스의 다른 변수로 전달하는 방법은 무엇입니까?

ClassA a = new ClassA(); 
String text = a.jtextfield1.getText(); 

을하지만 그것은 작동하지 않습니다! :

나는 ClassB가이 작업을 수행하려

당신은 간단한 예제 5 월, 나를 도울 수 있을까요? 나는 무엇을 잘못 했는가?

추신 : 내가 사용하고 넷빈즈

[편집 - 즉를 ClassA의 코드입니다 :

public class ClassA extends javax.swing.JFrame { 

public ClassA() { 
    initComponents(); 
} 

public void initComponents() { 

    jTextField1 = new javax.swing.JTextField(); 

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

    jTextField1.setText("Some text blah blah"); 
    jTextField1.addActionListener(new java.awt.event.ActionListener() { 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 
      jTextField1ActionPerformed(evt); 
     } 
    }); 

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
    getContentPane().setLayout(layout); 
    layout.setHorizontalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(layout.createSequentialGroup() 
      .addGap(33, 33, 33) 
      .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 104, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addContainerGap(124, Short.MAX_VALUE)) 
    ); 
    layout.setVerticalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(layout.createSequentialGroup() 
      .addGap(47, 47, 47) 
      .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addContainerGap(86, Short.MAX_VALUE)) 
    ); 

    pack(); 
} 

public static void main(String args[]) { 

    java.awt.EventQueue.invokeLater(new Runnable() { 

     public void run() { 
      new ClassA().setVisible(true); 
     } 
    }); 
} 

public javax.swing.JTextField jTextField1; 

}

여기 ClassB가의 코드입니다 :

public class ClassB extends javax.swing.JFrame { 

public ClassB() { 
    initComponents(); 
} 

    public ClassA a = new ClassA(); 


public void initComponents() { 

    jTextField1 = new javax.swing.JTextField(); 
    getText = new javax.swing.JButton(); 

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

    getText.setText("GetText"); 
    getText.addActionListener(new java.awt.event.ActionListener() { 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 
      getTextActionPerformed(evt); 
     } 
    }); 

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
    getContentPane().setLayout(layout); 
    layout.setHorizontalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(layout.createSequentialGroup() 
      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
       .addGroup(layout.createSequentialGroup() 
        .addGap(31, 31, 31) 
        .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 114, javax.swing.GroupLayout.PREFERRED_SIZE)) 
       .addGroup(layout.createSequentialGroup() 
        .addGap(50, 50, 50) 
        .addComponent(getText))) 
      .addContainerGap(143, Short.MAX_VALUE)) 
    ); 
    layout.setVerticalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(layout.createSequentialGroup() 
      .addGap(50, 50, 50) 
      .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addGap(26, 26, 26) 
      .addComponent(getText) 
      .addContainerGap(49, Short.MAX_VALUE)) 
    ); 

    pack(); 
} 

public void getTextActionPerformed(java.awt.event.ActionEvent evt) { 
    a.jTextField1.getText(); //this doesn't work. How can I it makes work? 
} 

public static void main(String args[]) { 

    java.awt.EventQueue.invokeLater(new Runnable() { 

     public void run() { 
      new ClassB().setVisible(true); 
     } 
    }); 
} 

public javax.swing.JButton getText; 
public javax.swing.JTextField jTextField1; 

}

미리 감사드립니다.

+1

더 많은 코드를 게시하시기 바랍니다에 의해 시작해야합니다. 지금까지 제시 한 정보로는 귀하를 도와 드릴 수 없습니다. –

+1

"하지만 작동하지 않습니다 !!" 오류에 대한 설명이 아니며 어떤 일이 발생했는지 정확하게 알려주십시오. 예외가 있습니까? 어느 것? 그렇지 않은 경우 텍스트를 설정 한 코드를 게시하십시오. – thermz

+0

과'ClassA = 새로운 ClassA;는 작동하지 않습니다!아마도 'ClassA a = new ClassA();'는 – thermz

답변

1

새 ClassA 인스턴스 (및 BTW, 구문은 new ClassA())를 인스턴스화하면 ... 기존 인스턴스의 인스턴스보다 다른 jtextfield1을 가진 새 인스턴스가 생성됩니다.

가 ClassB가이 구축되면 :

ClassB theClassB = new ClassB(theClassA); 

당신은 클래스와 객체의 기본 OO 개념을 마스터하는 것, 그리고하지 않는 당신은 ClassB가 인스턴스에 기존를 ClassA 인스턴스에 대한 참조를 전달해야 심지어 자바의 문법. 지금 스윙을 사용하지 말고 기본을 먼저 배우는 것이 좋습니다. 스윙은 이러한 개념을 이해하지 못하는 개발자에게는 어렵습니다.

는 기본과 간단한 예를 들어 물어 Java tutorial

+0

네, 그랬습니다, 안타깝게도 효과가 없습니다! 그것은 말합니다 : "클래스 B 클래스의 생성자 ClassB는 주어진 유형에 적용 할 수 없습니다. 필수 : ​​인수 없음 발견 : ClassA" – user1197919

+0

의미있는 코드를 제공하지 않으며 우리가 가지고있는 다른 진단은 "작동하지 않습니다 ". 우린 너무 명석하지 않아. 귀하의 질문에 더 많은 물질을주십시오. SSCCE가 유용 할 것입니다. 물론 클래스 A에 인수로 ClassA를 사용하는 생성자가 있어야합니다. 기초 자습서를 읽으십시오. 스윙을 사용하기에는 너무 이릅니다. –

+0

자, 방금 코드를 추가했습니다. 도와주세요! 나에게 매우 중요합니다! – user1197919

1

의 OO 수업을 읽고, 당신은 하나를 얻을 것이다. 이 예제를 코드에 매치하는 방법은 당신에게 달려 있습니다. 너무 어렵지 않아야합니다.

public class PanelWithTextField extends JPanel{ 
    private JTextField textField = new JTextField(); 
    public JTextField getTextField(){ return textField; }; 
} 

public static void main(String[] args){ 
    EventQueue.invokeLater(){ new Runnable(){ 
    public void run(){ 
     //create a first panel 
     PanelWithTextField panel = new PanelWithTextField(); 
     panel.getTextField().setText("Some text"); 
     //create a second panel 
     PanelWithTextField anotherPanel = new PanelWithTextField(); 
     //copy the text from the first panel's textfield to the second panel's textfield 
     anotherPanel.getTextField().setText(panel.getTextField().getText()); 
    } 
    } 
} 

는 내가 그것을 실행하려고도이 코드를 작성하는 내 IDE를 사용하지 않았다 나는, 그것은 너무 많은 오타의를하지 않았다 바랍니다.

기본적으로 당신이 당신의 두 번째 패널에서 첫 번째 패널에 대한 참조를해야합니다 (또는 해당 텍스트 필드에 액세스하는 코드의 어떤 부분에서).

그리고 이미 다른 사람에 의해 제안했다. 당신은 당신이 스윙으로 장난 시작하기 전에 기본적인 OO 개념과 기본적인 자바 문법을 이해하게하고 UI의

+0

답변을 주셔서 감사합니다. 단, 수업만으로 작동합니다. 문제는 두 개의 다른 클래스에 두 개의 다른 클래스가있는 경우입니다 (코드를 편집 한 주 게시물 참조). 위에서 언급 한 코드로 저를 도울 수 있다면 매우 감사하게 생각합니다. 그러나 정말 고마워요. – user1197919

+0

같은 클래스의 두 인스턴스 또는 다른 클래스의 두 인스턴스의 차이점은 무엇입니까? 그들은 서로에 대한 참조를 가져야하며, 다른 인스턴스의 메소드를 호출 할 수 있습니다. 기본 OO 물건, 전에 말했듯이 – Robin

+0

그래,하지만 내 코드에서 쓴 것처럼, 당신은 내가 개체를 인스턴스화 한 것을 볼 수 있지만 여전히 작동하지 않는다 (아무것도 표시하지 않음) - – user1197919

관련 문제