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
}
}

如何分配m1toxm2to的值y

因为我想在另一个类中使用m1and的值?m2在我有绘画方法的另一个班级中,我想将它们用作绘画的坐标。

谢谢

我的操作按钮将解析 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
            }
4

2 回答 2

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 实例的值。

如果你想以事件驱动的方式获取信息,如果你想要 p1 和 p2 点,在 actionPerformed 发生之后,更棘手的部分来了。如果是这样,我将使用 PropertyChangeSupport 实例来允许在这些字段发生更改时通知侦听器。例如,请查看此答案以了解如何做到这一点。

于 2013-06-02T20:29:07.633 回答
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();
        }
    });
}
于 2013-06-02T20:32:01.377 回答