-1

2 つの異なるアクションに使用されるメソッドがあります。アクションは、ユーザーが押したボタンによって識別されます。

ボタンの押下を識別するためにブール値を使用しています。

PDFButton.addSelectionListener(new SelectionAdapter() {
   public void widgetSelected(SelectionEvent e) {
      buildArray(true);
   }
});

PlotButton.addSelectionListener(new SelectionAdapter() {
   public void widgetSelected(SelectionEvent e) {
      buildArray(false);
   }
});

public void buildArray(boolean buttonId) {
   get indexs etc...
   if(true) {
      PDF.getInstance.buildArray(index);
   }
   else { 
      Plot.getInstance.buildArray(index);
   }
 }  

これはこれを行うための最良の方法のようですか?

貼り付けたボタン スニペットの編集タイプミス。ボタンは1つではなく2つ。私がやろうとしているのは、IF ロジックで条件を設定することです。そのため、buildArray メソッドをアクティブにするためにどのボタンが押されたかがわかります。

public void buildArray() {
   get indexs, mode code.....
   if**(button press equals PDFButton)** {
      PDF.getInstance.buildArray(index);
   }
   else { 
      Plot.getInstance.buildArray(index);
   }
 }  

1 つの方法は、buildArray に似た別のメソッドを作成することです。次に、各ボタンが独自のメソッドを実行します。

PDFButton.addSelectionListener(new SelectionAdapter() {
   public void widgetSelected(SelectionEvent e) {
      PDFbuildArray(true);
   }
});

PlotButton.addSelectionListener(new SelectionAdapter() {
  public void widgetSelected(SelectionEvent e) {
      PlotbuildArray(false);
  }
});

しかし、できるだけ多くのコードを統合したいと考えています。

4

2 に答える 2

0

最終的に Action Event getSource().getText() を使用しました。そのため、メソッドは次のようになりました。

 ublic void getSelectedTableData(SelectionEvent e) {
  int[] row = viewer.getTable().getSelectionIndices();
  Arrays.sort(row);
  if (row.length > 0) {
     for(int i = row.length-1; i >= 0; i--){
        if(((Button) e.getSource()).getText() == "Plotting")   
           AplotPlotDataModel.getInstance().buildPlotArray(row[i]);
        else {
           AplotPDFDataModel.getInstance().buildArray(row[i]);
        }
     }
  }
 }
于 2013-03-21T16:07:39.183 に答える
-1

Swing チュートリアルを読みましたか? これを行う方法についての例があり、通常は setActionCommand() および getActionCommand() IIRC を使用します。

また、コードには少なくとも 2 つのバグがあります。

  • まず、現在のコードでは配列の値が false に戻されることはないため、ボタンが押されるたびに、以前に押されたすべてのボタンも実行されます。これがあなたが望むものでない限り...
  • 2 つ目は、1 つ目と同様に、ボタンをすばやく押すと、最初のボタン プレス コードが状態を false に戻す前に、2 つ目のボタン プレスが実行される可能性があります。同期ブロックを追加しない限り、最初の箇条書きで説明したように動作するタイミング条件が発生します。
于 2013-03-20T21:24:47.217 に答える