【问题标题】:pass data from JFrame to JInternalFrame and vice-versa? [closed]将数据从 JFrame 传递到 JInternalFrame,反之亦然? [关闭]
【发布时间】:2014-01-12 12:28:34
【问题描述】:

我有一个 JFrame,当我单击 JFrame 上的按钮时,它会创建一个具有“Finalize”按钮的新 JInternalFrame。我想要的是,当我单击 Finalize 按钮时,JInternalFrame 会处理并向创建 JInternalFrame 的 JFrame 发送一些值(数据)。

我怎样才能做到这一点?任何相关的例子都会对我有很大帮助。

【问题讨论】:

  • 你试过了吗?发布您的尝试
  • @Jugadu 不,我找不到任何解决方案。

标签: java swing netbeans jframe jinternalframe


【解决方案1】:

抱歉,我没有太多时间解释。基本上我在下面的代码中所做的就是从 MainFrame 传递给 InternalFrame 的构造函数。这些值是从 InternalFrame 设置的,然后对值进行处理。我刚刚做了一个混乱的 GUI Builder 演示,但您也可以考虑在 MainFrame 中使用 setter 和 setter,并将整个 MainFrame 传递给 InternalFrame。只是一个想法。您可以运行该程序。有时间我会尝试回来,以获得更好的解释。


编辑

所以我懒得做一个真实的例子而不使用看起来超级凌乱的 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();
}

这是传递信息的一种简单方式。完整的运行代码。请注意,上面的代码是我在自动生成的代码中更改的all。自动生成的代码主要用于样式和定位,所以不要被它淹没。你只关心上面的代码。

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 上的代码


另一个简单的修复就是让InternalFrame成为MainFrame的内部类,这样他们就可以使用与JFrame成员相同的对象

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-20
    • 2020-10-18
    • 2013-11-25
    • 2010-09-29
    • 2011-03-22
    • 2010-12-27
    相关资源
    最近更新 更多