2013-06-02 91 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(); 
     } 
    }); 
}