Как я могу передать переменные из поля jtext другому в другом JFrame / классе? - PullRequest
0 голосов
/ 08 февраля 2012

У меня проблема с JTextField. Я не знаю, как передать переменную из JTextField (находится в JFrame A) в другой JTextField (находится в JFrame B). Я пытался это сделать, но он ничего не делает, то есть не получает ни ошибки времени выполнения / компиляции, ни текст.

Я пытался сделать это в ClassB:

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

но это не работает !!

Не могли бы вы помочь мне, может быть, с простым примером? Что я сделал не так?

p.s .: Я использую NetBeans

[править -] Это код класса A:

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;

}

Вот код класса B:

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;

}

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 09 февраля 2012

Вы попросите простой пример, вы получите один.Я оставляю на ваше усмотрение, как сопоставить этот пример в вашем коде, что не должно быть слишком сложным.

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 для написания этого кода.

В основном вам понадобится ссылка на вашу первую панель на второй панели (или в любой части кода, где вы можете получить доступ к этому текстовому полю).

И как уже предлагали другие.Прежде чем начинать возиться с Swing и пользовательским интерфейсом

, вы должны убедиться, что понимаете основные концепции ОО и базовый синтаксис Java.
1 голос
/ 08 февраля 2012

Если вы создадите экземпляр нового экземпляра ClassA (и, кстати, синтаксис будет new ClassA()), то у вас будет ... новый экземпляр с другим jtextfield1, чем в существующем экземпляре ClassA.Вам нужно передать ссылку на существующий экземпляр ClassA экземпляру ClassB:

Когда создается ClassB:

ClassB theClassB = new ClassB(theClassA);

Похоже, вы не осваиваете основные концепции ОО классов иобъекты, и даже не синтаксис Java.Я бы посоветовал не использовать Swing сейчас, а сначала изучать основы.Swing сложен, слишком сложен для разработчика, который не понимает этих концепций.

Прочитайте основы и уроки OO Java-учебника

...