【问题标题】:Problem in passing value of JTable cell of one JFrame form to another form's JTextField将一个 JFrame 表单的 JTable 单元格的值传递给另一个表单的 JTextField 的问题
【发布时间】:2011-04-13 12:18:59
【问题描述】:


我有两个 JFrame Forms-SelectContactsfrm.java 和 Taskfrm.java。 SelectContactsfrm 文件中有 JTable 来显示联系人。当用户从 JTable 中选择联系人并按下 OK 按钮时,应将所选值复制到 Taskfrm.java 的 JTextField 中。

Taskfrm.java 的 JTextField 的名字是-txtContacts 和访问修饰符是-public

下面是我在SelectContactsfrm的OK按钮的actionPerformed.Button name-btnOK上写的代码

private void btnOKActionPerformed(java.awt.event.ActionEvent evt) {
    // Code to get the selected rows value and paste Contact's full name in Taskfrm's txtContacts JTextField:        

    selrow=ctable.getSelectedRow();
    selcol=ctable.getSelectedColumn();
    Object value=ctable.getModel().getValueAt(selrow,1);
    new Taskfrm().txtContacts.setText(value.toString());                                                            

    //Just to check whether I get the correct values or not.                                      
    System.out.println("selrow=="+selrow);
    System.out.println("selcol=="+selcol);
    System.out.println("txtContacts=="+value);

}  

我可以在输出中看到正确的选择值,但不明白为什么没有在 Taskfrm 的 JTextField 中设置该值。在 Taskfrm 的构造函数中,只有 initComponents() 存在。有没有办法在此处附加类文件而不是粘贴?

【问题讨论】:

    标签: java swing jtable jtextfield


    【解决方案1】:

    这取决于 Taskfrm 的设置方式以及它的构造函数中的内容。 我试过这样的东西,它有效

    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JTextField;
    
    public class ClassA extends JFrame {
        JTextField text;
    
        public ClassA() {
            JLabel l = new JLabel("Name: ");
            text = new JTextField(20);
            JButton b = new JButton("Send");
            setLayout(null);
            l.setBounds(10, 10, 100, 20);
            text.setBounds(120, 10, 150, 20);
            b.setBounds(120, 40, 80, 20);
            add(l);
            add(text);
            add(b);
            setVisible(true);
            setSize(300, 100);
            b.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    new ClassB().text.setText(ClassA.this.text.getText());
                }
            });
        }
    
        public static void main(String a[]) {
            new ClassA();
        }
    }
    
    class ClassB extends JFrame {
        JTextField text;
    
        public ClassB() {
            JLabel l = new JLabel("Name: ");
            text = new JTextField(20);
    
            setLayout(null);
            l.setBounds(10, 10, 100, 20);
            text.setBounds(120, 10, 150, 20);
    
            add(l);
            add(text);
    
            setVisible(true);
            setSize(300, 100);
    
        }
    }
    

    【讨论】:

    • 请不要鼓励使用空布局。新手倾向于在不理解为什么使用它的情况下复制代码。应该提升布局管理器。实际上,如果您将布局管理器更改为 FlowLayout,则代码更容易理解。
    【解决方案2】:

    设置它的可见性并在 Taskfrm 的构造函数中进行了更改。现在它可以工作了。

    new Taskfrm(value);  
    new Taskfrm(value).setVisible(true);
    

    【讨论】:

    • 请注意,每次执行“new Taskfrm()”时,都会创建该类的不同实例。这意味着第一行正在创建一个以后不使用的对象。您看到的是在第二行中创建的对象。考虑为表单声明一个变量:Taskfrm myForm = new Taskfrm(value); myForm.setVisible(true);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-01
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多