2013-06-02 135 views
1

可以說我有:得到局部變量值類變量

class BlaBla{ 
int x; 
int y; 

public void actionPerformed(ActionEvent e){ 

int m1; 
int m2; 
// algorhythm where i get values for m1 and m2 
} 
} 

我該怎麼分配的m1xm2y

因爲我想在另一個類中使用m1m2的值?在另一個類中,我有繪畫方法,我想用它們作爲繪畫的座標。

謝謝

我的動作按鈕將解析XML文件。比我更需要塗料的方法,這是在其他類四個變量

public void actionPerformed(ActionEvent e){ 
     try{ 


     JFileChooser fch = new JFileChooser(); 
     int i = fch.showOpenDialog(null); 
     if(i==JFileChooser.APPROVE_OPTION){ 
      File f = fch.getSelectedFile(); 

      DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
      DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
      Document doc = dBuilder.parse(f); 
      doc.getDocumentElement().normalize(); 
      NodeList nList = doc.getElementsByTagName("line"); 

      // NodeList nList = doc.getElementsByTagName("point"); 

      for (int temp = 0; temp < nList.getLength(); temp++) { 

       Node nNode = nList.item(temp); 

       if (nNode.getNodeType() == Node.ELEMENT_NODE) { 




        Element eElement = (Element) nNode; 


        Element line = (Element) nList.item(0); 

        Element point1 = (Element) line.getElementsByTagName("point").item(0); 
        Element point2 = (Element) line.getElementsByTagName("point").item(1); 

        int m1 = Integer.parseInt(point1.getElementsByTagName("X").item(0).getTextContent()); 
        int n1 = Integer.parseInt(point1.getElementsByTagName("Y").item(0).getTextContent()); 
        int m2 = Integer.parseInt(point2.getElementsByTagName("X").item(0).getTextContent()); 
        int n2 = Integer.parseInt(point2.getElementsByTagName("Y").item(0).getTextContent()); 

我的主類是:

public class Line { 
public static void main(String[] args){ 
     JFrame frame = new JFrame(); 
frame.setSize(500, 500); 
frame.setTitle("Test"); 
    frame.setLayout(new FlowLayout()); 
final JPanel pnl = new JPanel(){ 
     public void paintComponent(Graphics g){ 
      super.paintComponent(g); 
      Vyber v = new Vyber(); 
      g.drawLine(x1, y1, x2, y2); //values from method from another class 
      } 
+2

實現getter和setter的東西。 – Maroun

+0

@HovercraftFullOfEels我編輯我的問題並添加更多信息 – DRastislav

回答

2

爲了從一個班獲取信息到另一個,我會避免使用局部變量而是設置類字段,比如:

public class SomeClass { 
    Point p1; 
    Point p2; 

    public void actionPerformed(ActionEvent e) { 

    // some code.... 

    int m1 = Integer.parseInt(point1.getElementsByTagName("X").item(0).getTextContent()); 
    int n1 = Integer.parseInt(point1.getElementsByTagName("Y").item(0).getTextContent()); 
    int m2 = Integer.parseInt(point2.getElementsByTagName("X").item(0).getTextContent()); 
    int n2 = Integer.parseInt(point2.getElementsByTagName("Y").item(0).getTextContent()); 

    p1 = new Point(m1, n1); 
    p2 = new Point(m2, n2); 
    } 

    public Point getP1() { 
    return p1; 
    } 

    public Point getP2() { 
    return p2; 
    } 

} 

然後具有有效引用任何類到SomeClass的正確實例可以在需要獲取p1和p2的當前副本時調用getter方法。有一個有效的引用是關鍵,因爲你不能重新創建另一個SomeClass實例,並期望它的字段將保存程序正在使用的另一個SomeClass實例的值。

如果您希望在事件驅動的方式下獲得信息(如果您希望在發生actionPerformed之後獲得p1和p2 Points),那麼就會出現更棘手的部分。如果是這樣,我會使用PropertyChangeSupport實例來允許偵聽器在這些字段發生更改時得到通知。例如,請看this answer以瞭解這可能如何完成。

+0

它的工作.....謝謝你先生 – DRastislav

+0

@DRastislav:不客氣。 –

0

您需要您的班級實例,我將使用已存在的Point類來說明。

可以說我有一個JTextField,我想一個ActionListener添加到它,這將工作:

private void addListener(final JTextField textField, final Point point) { 
    textField.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      final double m1 = point.getX(); 
      final double m2 = point.getY(); 
     } 
    }); 
} 

,你將有問題的是,在這個例子中,Point必須final,你不能引用非匿名內部類中的非final方法參數。

您也可以宣佈你的類爲類變量,這樣

//somewhere in your class 
private Point point; 

//somewhere else in your class 
private void addListener(final JTextField textField) { 
    textField.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      final double m1 = point.getX(); 
      final double m2 = point.getY(); 
     } 
    }); 
}