2014-09-10 35 views
0

我是新來的java編程。訪問變量的調用類java

我的問題是:

如何從式2或幀3訪問變量在調用類(內幀1的容器)?

例如:在下面的代碼中,我想要在Frame2中的文本框a1(在PanelA嵌套在Frame1中)中顯示值,並在框架Frame3中顯示Textfield a2(在PanelB嵌套在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 
{ 

} 

調用類幀1是一樣的東西

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

感謝所有的快速回復。 – Ray 2014-09-10 11:46:31

回答

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做同樣的事情。

我確實建議使用清晰的類/變量名稱,所以它更容易看到他們做什麼。

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"); 
} 

輸出將是如下

一個

兩個

0

下面的代碼可以幫助你,

幀1

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(""); 

} 

} 

在這個例子中,值從一個類通過構造函數傳遞到另一個。

0

當然,也有不同的方式,但一個簡單的方法是在Frame類實現的方法getTextField()(我不會把它Frame,如果幀具有相同的功能,你不需要Frame1等,但你只是說Frame f3 = new Frame()),或者是getPanel().getTextField()。此方法返回JTextField,您可以隨意操作它。