現在SWTにて簡単なGUIの作成を行っています。 流れとしては、mainにてシェルを作ってボタンが押された場合、テキストボックスに入力された値を計算して返す、というものです。 public static void main(String[] args) { Display display = new Display (); Shell shell = new Shell(display); shell.setLayout(new GridLayout(1,true)); shell.setText("集計"); shell.setSize(250, 200); Label label1 = new Label(shell,SWT.NULL); label1.setText("値1"); Text text1 = new Text(shell,SWT.SINGLE|SWT.BORDER); GridData gridData1 = new GridData(); gridData1.horizontalAlignment = GridData.FILL; gridData1.grabExcessHorizontalSpace = true; text1.setLayoutData(gridData1); Label label2 = new Label(shell,SWT.NULL); label2.setText("値2"); Text text2 = new Text(shell,SWT.SINGLE|SWT.BORDER); GridData gridData2 = new GridData(); gridData2.horizontalAlignment = GridData.FILL; gridData2.grabExcessHorizontalSpace = true; text2.setLayoutData(gridData2); Label label3 = new Label(shell,SWT.NULL); label3.setText("値3"); Text text3 = new Text(shell,SWT.SINGLE|SWT.BORDER); GridData gridData3 = new GridData(); gridData3.horizontalAlignment = GridData.FILL; gridData3.grabExcessHorizontalSpace = true; text3.setLayoutData(gridData3); Button button1 = new Button(shell,SWT.NULL); button1.setText("集計"); shell.open(); while (!shell.isDisposed ()){ if (!display.readAndDispatch ()){ display.sleep (); } } display.dispose (); } ここで、調べたところ、ボタンが押された場合の処理としてaddSelectionListenerを定義すると良い、というのもわかりました。 button1.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { System.out.println("widgetDefaultSelected"); } public void widgetSelected(SelectionEvent e) { keisan(値1, 値2, 値3); } }); ここで、このaddSelectionListener内で上記テキストボックスtext1~3の値をkeisanメソッドに渡したいのですが、どうしても 「異なるメソッドで定義されたインナー・クラス内で非 final 変数 text1 を参照できません」 とエラーが出てしまいます。 addSelectionListener内でテキストボックスに入力された値を使うにはどうすれば良いのでしょうか。
↧