我是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);
}
}
答案 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
,您可以根据需要对其进行操作。