确定方法逻辑按下哪个按钮的最佳方法

时间:2013-03-20 21:02:49

标签: java button swt

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

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

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

但我希望尽可能地整合代码。

2 个答案:

答案 0 :(得分: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]);
        }
     }
  }
 }

答案 1 :(得分:-1)

您是否阅读过Swing Tutorial?它有关于如何执行此操作的示例,通常使用setActionCommand()和getActionCommand()IIRC。

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

  • 首先,您当前的代码不会将数组值设置为false,因此每次按下按钮时,所有先前按下的按钮也将执行。除非这是你想要的......
  • 其次,就像第一个一样,如果按下按钮太快,第二个按钮按下可以在第一个按钮按下代码将状态改回假之前执行。除非你添加一个synchronized块,否则会有一个时序条件,其行为与我的第一个项目符号中描述的相同。