通过 MenuItem 触发方法
Trigger a method through a MenuItem
我试图通过单击 MenuItem
来调用方法,因此(基本上)打开了另一个 window。
我的标准方法是使用这个:
mntmAbout.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
About.main(null);
}
};
其中 mntmAbout
是 MenuItem
。但是,这是不可能的,因为 eclipse 警告我 addActionListener
不是 MenuItem
.
类型的已知方法
整个 class 是通过在 WindowBuilder 中设计一个 UI 构建的,所以我想这个功能需要不同的方法,因为我正在处理一个 MenuItem
的 JMenuItem
。 (或者我在这里错过了完全不同的东西)
class 的完整来源:
package kingfisher;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.custom.CLabel;
import org.eclipse.swt.SWT;
import org.eclipse.wb.swt.SWTResourceManager;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import java.awt.event.*;
public class ControlPanel {
protected Shell shell;
/**
* Launch the application.
* @param args
*/
public static void main(String[] args) {
try {
ControlPanel window = new ControlPanel();
window.open();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Open the window.
*/
public void open() {
Display display = Display.getDefault();
createContents();
shell.open();
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
/**
* Create contents of the window.
*/
protected void createContents() {
shell = new Shell();
shell.setSize(450, 300);
shell.setText("Control Panel");
CLabel lblNewLabel = new CLabel(shell, SWT.NONE);
lblNewLabel.setImage(SWTResourceManager.getImage(ControlPanel.class, "/kingfisher/rsz_1rsz_icon.png"));
lblNewLabel.setBounds(97, 10, 256, 200);
lblNewLabel.setText("");
Label lblNewLabel_1 = new Label(shell, SWT.SHADOW_IN | SWT.CENTER);
lblNewLabel_1.setBounds(194, 216, 61, 17);
lblNewLabel_1.setText("Kingfisher");
Menu menu = new Menu(shell, SWT.BAR);
shell.setMenuBar(menu);
MenuItem mntmControl = new MenuItem(menu, SWT.CASCADE);
mntmControl.setText("Control");
Menu menu_1 = new Menu(mntmControl);
mntmControl.setMenu(menu_1);
MenuItem mntmQuit = new MenuItem(menu_1, SWT.NONE);
mntmQuit.setText("Quit");
MenuItem mntmWindows = new MenuItem(menu, SWT.CASCADE);
mntmWindows.setText("Windows");
Menu menu_2 = new Menu(mntmWindows);
mntmWindows.setMenu(menu_2);
MenuItem mntmChat = new MenuItem(menu_2, SWT.NONE);
mntmChat.setText("Chat");
MenuItem mntmContacts = new MenuItem(menu_2, SWT.NONE);
mntmContacts.setEnabled(false);
mntmContacts.setText("Contacts");
MenuItem mntmSettings = new MenuItem(menu_2, SWT.NONE);
mntmSettings.setEnabled(false);
mntmSettings.setText("Settings");
MenuItem mntmHelp = new MenuItem(menu, SWT.CASCADE);
mntmHelp.setText("Help");
Menu menu_3 = new Menu(mntmHelp);
mntmHelp.setMenu(menu_3);
MenuItem mntmAbout = new MenuItem(menu_3, SWT.NONE);
//HERE BE CODE
mntmAbout.setText("About");
}
}
SWT 和 Swing 是不同的工具包。他们使用不同的事件队列和侦听器类型。检查 JavaDoc.
对于 SWT,您使用 addSelectionListener
mntmAbout.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(final SelectionEvent event)
{
// TODO Your code
}
});
SWT 是与 Swing/AWT 完全不同的工具包,不使用任何 java.awt 代码。
我试图通过单击 MenuItem
来调用方法,因此(基本上)打开了另一个 window。
我的标准方法是使用这个:
mntmAbout.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
About.main(null);
}
};
其中 mntmAbout
是 MenuItem
。但是,这是不可能的,因为 eclipse 警告我 addActionListener
不是 MenuItem
.
整个 class 是通过在 WindowBuilder 中设计一个 UI 构建的,所以我想这个功能需要不同的方法,因为我正在处理一个 MenuItem
的 JMenuItem
。 (或者我在这里错过了完全不同的东西)
class 的完整来源:
package kingfisher;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.custom.CLabel;
import org.eclipse.swt.SWT;
import org.eclipse.wb.swt.SWTResourceManager;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import java.awt.event.*;
public class ControlPanel {
protected Shell shell;
/**
* Launch the application.
* @param args
*/
public static void main(String[] args) {
try {
ControlPanel window = new ControlPanel();
window.open();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Open the window.
*/
public void open() {
Display display = Display.getDefault();
createContents();
shell.open();
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
/**
* Create contents of the window.
*/
protected void createContents() {
shell = new Shell();
shell.setSize(450, 300);
shell.setText("Control Panel");
CLabel lblNewLabel = new CLabel(shell, SWT.NONE);
lblNewLabel.setImage(SWTResourceManager.getImage(ControlPanel.class, "/kingfisher/rsz_1rsz_icon.png"));
lblNewLabel.setBounds(97, 10, 256, 200);
lblNewLabel.setText("");
Label lblNewLabel_1 = new Label(shell, SWT.SHADOW_IN | SWT.CENTER);
lblNewLabel_1.setBounds(194, 216, 61, 17);
lblNewLabel_1.setText("Kingfisher");
Menu menu = new Menu(shell, SWT.BAR);
shell.setMenuBar(menu);
MenuItem mntmControl = new MenuItem(menu, SWT.CASCADE);
mntmControl.setText("Control");
Menu menu_1 = new Menu(mntmControl);
mntmControl.setMenu(menu_1);
MenuItem mntmQuit = new MenuItem(menu_1, SWT.NONE);
mntmQuit.setText("Quit");
MenuItem mntmWindows = new MenuItem(menu, SWT.CASCADE);
mntmWindows.setText("Windows");
Menu menu_2 = new Menu(mntmWindows);
mntmWindows.setMenu(menu_2);
MenuItem mntmChat = new MenuItem(menu_2, SWT.NONE);
mntmChat.setText("Chat");
MenuItem mntmContacts = new MenuItem(menu_2, SWT.NONE);
mntmContacts.setEnabled(false);
mntmContacts.setText("Contacts");
MenuItem mntmSettings = new MenuItem(menu_2, SWT.NONE);
mntmSettings.setEnabled(false);
mntmSettings.setText("Settings");
MenuItem mntmHelp = new MenuItem(menu, SWT.CASCADE);
mntmHelp.setText("Help");
Menu menu_3 = new Menu(mntmHelp);
mntmHelp.setMenu(menu_3);
MenuItem mntmAbout = new MenuItem(menu_3, SWT.NONE);
//HERE BE CODE
mntmAbout.setText("About");
}
}
SWT 和 Swing 是不同的工具包。他们使用不同的事件队列和侦听器类型。检查 JavaDoc.
对于 SWT,您使用 addSelectionListener
mntmAbout.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(final SelectionEvent event)
{
// TODO Your code
}
});
SWT 是与 Swing/AWT 完全不同的工具包,不使用任何 java.awt 代码。