-1

我有一种用于两种不同操作的方法。动作由用户按下哪个按钮来识别。

我正在使用布尔值来识别按钮按下。

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

这似乎是最好的方法吗?

编辑粘贴的按钮片段中的错字。有2个按钮不是一个。我想要做的是在 IF 逻辑中设置一个条件,所以我知道按下了哪个按钮来激活 buildArray 方法。

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

我知道一种方法是创建一个类似于 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。

此外,您的代码中至少有两个错误。

  • 首先,您当前的代码从未将数组值设置回 false,因此每次按下按钮时,所有先前按下的按钮也会执行。除非这是你想要的...
  • 其次,就像第一次一样,如果按钮被按下得太快,第二次按下按钮可能会在第一次按下按钮代码将状态更改回 false 之前执行。除非你添加一个同步块,否则会有一个时序条件,其行为与我的第一个项目符号中描述的一样。
于 2013-03-20T21:24:47.217 回答