访问调用类java的变量

时间:2014-09-10 11:16:55

标签: java swing

我是java编程的新手。

我的问题是:

如何从Frame2或Frame3访问调用类(Frame1中的容器)中的变量?

例如:在下面的代码中,我想在Frame2中的textfield a1(在Panel1中嵌套在Panel1中)中显示值,并在Frame3框架中显示textfield a2(在Panel1中嵌套在Frame1中)的值。

这是一个示例代码:

import javax.swing.*; 
import java.awt.event.*;
import java.awt.*;

class PanelA extends JPanel implements ActionListener
{
    JTextField a1;
    JButton b1;

    PanelA()
    {
        a1=new JTextField("");
        b1=new JButton("Click me");
        b1.addActionListener(this);
        add(a1);
        add(b1);
    }

    public void actionPerformed(ActionEvent e)
    {
        if(e.getSource()==b1){
        SwingUtilities.getWindowAncestor(this).setVisible(false);
        Frame2 x=new Frame2("Frame2");
        x.setSize(Toolkit.getDefaultToolkit().getScreenSize());
        x.setVisible(true);
        }
    }
}

class PanelB extends JPanel implements ActionListener
{
    JTextField a2;
    JButton b2;

    PanelA()
    {
        a2=new JTextField("");
        b2=new JButton("Click me");
        b2.addActionListener(this);
        add(a2);
        add(b2);
    }

    public void actionPerformed(ActionEvent e)
    {
        SwingUtilities.getWindowAncestor(this).setVisible(false);
        Frame3 x=new Frame3("Frame3");
        x.setSize(Toolkit.getDefaultToolkit().getScreenSize());
        x.setVisible(true);
    }
}

public class Frame1 extends JFrame
{
    Frame1(String s)
    {
        super(s);
        setLayout(newFlowLayout(FlowLayout.CENTER));
        PanelA x=new PanelA();
        x.setSize();
        x.setVisible(true);
        PanelB y=new PanelB();
        y.setSize();
        y.setVisible(true);
        JTabbedPane pan1=new JTabbedpane();
        pan1.addTab("A",x);
        pan1.addTab("B",y);
        add(pan1);
    }
}

public class Frame2 extends JFrame
{

}

public class Frame3 extends JFrame
{

}

Frame1的调用类类似于

public class FrameMain
{
    public static void main(String[] args)
    {
        Frame1 x= new Frame1("Frame1");
        x.setSize(Toolkit.getDefaultToolkit().getScreenSize());
        x.setVisible(true);
    }
}

4 个答案:

答案 0 :(得分:0)

嗨朋友你可以使用该类的对象来访问它的变量。 使用关键字public进行全局访问。 如果你想获得textfield的值,可以使用类JTextField的getText()。

import javax.swing.*;


public class test {

    public static void main(String a[])
    {
        A aobj=new A();
        B bobj=new B();
        System.out.println(aobj.tf1.getText());
        System.out.println(bobj.tf2.getText());
    }

}


class A
{
    JTextField tf1=new JTextField("one");
}
class B
{
    JTextField tf2=new JTextField("Two");
}

输出如下

一个

两个

答案 1 :(得分:0)

您可以为Frame2创建自己的构造函数,如下所示:

public class Frame2 extends JFrame
{
    public Frame2(String textBoxValue)
    {
        //do whatever you want with your textbox value(set it to the textbox (make sure it's initialized at this point!), set it to a local variable)
    }
}

然后像这样调用这个框架:

Frame2 x = new Frame2("Frame2", a1.getText());

您可以为Frame3做同样的事情。

我建议使用清晰的类/变量名,这样就可以更容易地看到它们的作用。

答案 2 :(得分:0)

以下代码可以为您提供帮助,

Frame1中

import java.awt.Button;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;


 public class Frame1 implements ActionListener{
 JFrame frame;
 JTextField t1;
 JButton btn;
 public PopupExample()
 {
   frame=new JFrame();
   frame.setLayout(null);
   frame.setSize(700,700);
   frame. setLocation(300,10);

   t1=new JTextField();
   t1.setBounds(82,10,100,20);

   frame.add(t1);

   btn=new JButton("SUBMIT");
   btn.setBounds(200,10,100,20);
    btn.addActionListener(this);
   frame.add(btn);


   frame.setVisible(true);
 }
 public static void main(String ar[])

 {
  Frame1 obj=new Frame1 ();

  }

 @Override
 public void actionPerformed(ActionEvent e) {
    if(e.getSource()==btn)
    {
        String input=t1.getText();
       Frame2 obj=new Frame2(input);


      }
  }
 }

式2

import javax.swing.JFrame;
import javax.swing.JLabel;


public class Frame2 {
JFrame frame;
public Frame2(String text)
{
   frame=new JFrame();
   frame.setLayout(null);
   frame.setSize(700,700);
   frame. setLocation(300,10);

   JLabel l1=new JLabel(text);
    l1.setBounds(82,10,100,20);
    frame.add(l1);

   frame.setVisible(true);
 }

  public static void main(String ar[])

{
  Frame2 obj=new Frame2("");

 }

}

在此示例中,value通过构造函数从一个类传递到另一个类。

答案 3 :(得分:0)

当然,有多种方法,但一种简单的方法是在getTextField()类中实现方法Frame(我不会将其称为Frame,如果框架具有相同的功能,您不需要Frame1等,但您只需说Frame f3 = new Frame()),或者getPanel().getTextField()。此方法返回JTextField,您可以根据需要对其进行操作。