2014-01-12 2 views
1

У меня есть JFrame, когда я нажимаю кнопку на JFrame, он создает новый JInternalFrame с кнопкой «Finalize». Я хочу, чтобы при нажатии кнопки «Завершить» JInternalFrame располагал и отправлял некоторые значения (данные) в этот JFrame, который создал JInternalFrame.передавать данные от JFrame до JInternalFrame и наоборот?

Как я могу это достичь? любой соответствующий пример будет большой помощью для меня.

+0

Вы пытались что-то ?? Отправьте свою попытку – Aarav

+0

@Jugadu Нет, я не смог найти решение. – user3181652

ответ

5

Извините, у меня нет много времени для объяснения. в основном то, что я делаю в коде ниже, - это передать конструктору InternalFrame из MainFrame. Эти значения задаются из IntrernalFrame, а затем делают что-то со значением. Я просто сделал грязную демонстрацию GUI Builder, но вы также можете рассмотреть возможность использования сеттеров и сеттеров в своем MainFrame и передать весь MainFrame во внутреннюю структуру. Просто идея. Вы можете запустить программу. Я попробую и вернусь, когда у меня будет время, для лучшего объяснения.


EDIT

Так что я слишком ленив, чтобы сделать реальный пример без использования супер грязный глядя код GUI Builder, поэтому я объясню важные детали. То, что вы пытаетесь сделать, это обмениваться объектами. Что вы можете сделать, это передать мою ссылку через конструктор. То, что я делал ниже, было от MainFrame до JLabel и String, которые будут изменены InternalFrame. Когда нажимается кнопка Finalize, изменения будут автоматически обновляться в MainFrame. Вот что важно код выглядит

MainFrame

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
    String word = jTextField1.getText(); 
    MyInternalFrame frame = new MyInternalFrame(jLabel1, word); 
    frame.setVisible(true); 
    jDesktopPane1.add(frame); 
} 

InternalFrame

JLabel label; 
String word; 

public MyInternalFrame(JLabel label, String word) { 
    this.label = label; 
    this.word = word; 
    initComponents(); 
    jTextField1.setText(word); 
} 
..... 
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
    label.setText(jTextField1.getText()); 
    this.dispose(); 
} 

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

enter image description here

MainFrame.java

public class MainFrame extends javax.swing.JFrame { 

    public MainFrame() { 
     initComponents(); 
    } 


    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code">       
    private void initComponents() { 

     jTextField1 = new javax.swing.JTextField(); 
     jLabel1 = new javax.swing.JLabel(); 
     jButton1 = new javax.swing.JButton(); 
     jDesktopPane1 = new javax.swing.JDesktopPane(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

     jTextField1.setText("jTextField1"); 

     jLabel1.setText("The finalized word is :"); 

     jButton1.setText("Show Internal"); 
     jButton1.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       jButton1ActionPerformed(evt); 
      } 
     }); 

     javax.swing.GroupLayout jDesktopPane1Layout = new javax.swing.GroupLayout(jDesktopPane1); 
     jDesktopPane1.setLayout(jDesktopPane1Layout); 
     jDesktopPane1Layout.setHorizontalGroup(
      jDesktopPane1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGap(0, 356, Short.MAX_VALUE) 
     ); 
     jDesktopPane1Layout.setVerticalGroup(
      jDesktopPane1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGap(0, 0, Short.MAX_VALUE) 
     ); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addContainerGap() 
       .addComponent(jDesktopPane1) 
       .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) 
        .addComponent(jTextField1, javax.swing.GroupLayout.Alignment.TRAILING) 
        .addComponent(jLabel1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 173, Short.MAX_VALUE) 
        .addComponent(jButton1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
       .addContainerGap()) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addContainerGap() 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
        .addComponent(jDesktopPane1) 
        .addGroup(layout.createSequentialGroup() 
         .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
         .addComponent(jLabel1) 
         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
         .addComponent(jButton1) 
         .addGap(0, 149, Short.MAX_VALUE))) 
       .addContainerGap()) 
     ); 

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

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
     String word = jTextField1.getText(); 
     MyInternalFrame frame = new MyInternalFrame(jLabel1, word); 
     frame.setVisible(true); 
     jDesktopPane1.add(frame); 
    }           

    public static void main(String args[]) { 

     try { 
      for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
       if ("Nimbus".equals(info.getName())) { 
        javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
        break; 
       } 
      } 
     } catch (ClassNotFoundException ex) { 
      java.util.logging.Logger.getLogger(MainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (InstantiationException ex) { 
      java.util.logging.Logger.getLogger(MainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (IllegalAccessException ex) { 
      java.util.logging.Logger.getLogger(MainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
      java.util.logging.Logger.getLogger(MainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } 
     //</editor-fold> 

     /* Create and display the form */ 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       new MainFrame().setVisible(true); 
      } 
     }); 
    } 

    // Variables declaration - do not modify      
    private javax.swing.JButton jButton1; 
    private javax.swing.JDesktopPane jDesktopPane1; 
    private javax.swing.JLabel jLabel1; 
    private javax.swing.JTextField jTextField1; 
    // End of variables declaration     
} 

MyInternalFrame.java

import javax.swing.JLabel; 

public class MyInternalFrame extends javax.swing.JInternalFrame { 

    JLabel label; 
    String word; 

    public MyInternalFrame(JLabel label, String word) { 
     this.label = label; 
     this.word = word; 
     initComponents(); 
     jTextField1.setText(word); 
    } 

    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code">       
    private void initComponents() { 

     jTextField1 = new javax.swing.JTextField(); 
     jLabel1 = new javax.swing.JLabel(); 
     jButton1 = new javax.swing.JButton(); 

     jTextField1.setText("jTextField1"); 

     jLabel1.setText("Confirm/Change then FInalize"); 

     jButton1.setText("FInalize"); 
     jButton1.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       jButton1ActionPerformed(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(51, Short.MAX_VALUE) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) 
        .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, 235, Short.MAX_VALUE) 
        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) 
         .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 235, Short.MAX_VALUE) 
         .addComponent(jTextField1))) 
       .addGap(49, 49, 49)) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addGap(39, 39, 39) 
       .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addGap(18, 18, 18) 
       .addComponent(jLabel1) 
       .addGap(18, 18, 18) 
       .addComponent(jButton1) 
       .addContainerGap(43, Short.MAX_VALUE)) 
     ); 

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

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
     label.setText(jTextField1.getText()); 
     this.dispose(); 
    }           


    // Variables declaration - do not modify      
    private javax.swing.JButton jButton1; 
    private javax.swing.JLabel jLabel1; 
    private javax.swing.JTextField jTextField1; 
    // End of variables declaration     
} 

Вы просто хотите посмотреть на код на конструктору MyInternalFrame и actionPerformed в обоих классе


Другой Простой Fix будет просто сделать InternalFrame внутренний класс MainFrame поэтому они могут использовать одни и те же объекты, которые являются членами JFrame

+0

не работает для меня – user3181652

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