如何为SWT弹窗内多个按钮编写ActionListener实现点击值写入文本框
实现方案
你只需要在弹窗的按钮点击监听器中直接关联labelTxt控件的赋值逻辑即可,Java SWT 环境下完整修改代码如下:
// 注意如果labelTxt是方法内局部变量,需要添加final修饰保证匿名内部类可访问 final Text labelTxt = new Text(composite, SWT.BORDER); label.setText("Test:"); labelTxt.setText("56"); //value here might be empty or might be already set with // any value from demo image labelTxt.addMouseListener(new MouseListener() { @Override public void mouseUp(MouseEvent arg0) { } @Override public void mouseDown(MouseEvent arg0) { } @Override public void mouseDoubleClick(MouseEvent arg0) { System.out.println(" mouse double clicked"); // 创建弹窗 Shell popupShell = new Shell(composite.getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); popupShell.setText("选择数值"); popupShell.setLayout(new GridLayout(3, false)); // 按你的弹窗按钮布局调整列数 // 示例创建几个选项按钮,和演示图对应 String[] btnValues = {"R1", "R2", "R3", "R4", "R5", "R6", "R7", "R8", "R9"}; for (String value : btnValues) { Button btn = new Button(popupShell, SWT.PUSH); btn.setText(value); btn.setData(value); // 按钮点击事件 btn.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { // 直接给labelTxt赋值 labelTxt.setText(btn.getData().toString()); // 赋值完成后关闭弹窗,可按需保留或删除 popupShell.dispose(); } }); } popupShell.pack(); popupShell.open(); } });
核心逻辑说明
- 要保证
labelTxt可以被按钮的匿名监听器访问:如果是类成员变量无需额外处理,如果是方法内局部变量,必须用final修饰(JDK 1.8+只要变量未被二次赋值,隐式符合effectively final要求也可) - 如果你已经完成了弹窗和按钮的绘制,不需要调整原有结构,只需要给每个已有的按钮添加对应的
SelectionListener,在回调方法中执行labelTxt.setText(按钮对应值)即可。
内容的提问来源于stack exchange,提问作者Dee
相关产品推荐
相关产品推荐

