让我说我有:
class BlaBla{
int x;
int y;
public void actionPerformed(ActionEvent e){
int m1;
int m2;
// algorhythm where i get values for m1 and m2
}
}
如何将m1
的值x
和m2
分配给y
?
因为我想在另一个类中使用m1
和m2
的值?在另一个我有绘画方法的课程中,我想用它们作为绘画的坐标。
由于
我的操作按钮将解析XML文件。我需要四个变量用于paint方法,这是另一个类
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
}
答案 0 :(得分: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点,那么如果你想以事件驱动的方式获取信息,就会出现更棘手的部分。如果是这样,我将使用PropertyChangeSupport实例来允许在更改这些字段时通知侦听器。例如,请查看this answer以了解如何做到这一点。
答案 1 :(得分: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();
}
});
}