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ますか?

m1と の値をm2別のクラスで使用したいからですか? 私はペイントメソッドを持っている別のクラスで、それらをペイントの座標として使用したいと考えています。

ありがとう

私のアクションボタンは XML ファイルを解析します。別のクラスにあるペイントメソッドに4つの変数が必要なよりも

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 インスタンスの値を保持することを期待できないため、有効な参照を持つことが重要です。

イベント駆動型の方法で情報を取得したい場合や、actionPerformed が発生した後に p1 および p2 ポイントが必要な場合は、よりトリッキーな部分が発生します。その場合、PropertyChangeSupport インスタンスを使用して、これらのフィールドが変更された場合にリスナーに通知できるようにします。たとえば、この回答を見て、これがどのように行われるかを確認してください。

于 2013-06-02T20:29:07.633 に答える