【发布时间】:2017-08-14 02:31:35
【问题描述】:
我正在使用 Java (Swing) 开发文本编辑器。到目前为止,我已经制作了身体。我在使用此功能时遇到问题:
- New (JMenuItem)(清空 JTextArea 的内容)。
当用户单击按钮时,JTextArea 内容应替换为空字符串。 这是我的代码(我省略了与问题无关的代码,例如菜单创建、菜单项添加、仅添加类。)
这是 TextArea 类:
class MyTextArea extends JTextArea implements ActionListener {
JTextArea myTextArea;
public MyTextArea() {
init();
}
public void init(){
setLineWrap(true);
}
@Override
public void actionPerformed(ActionEvent e) {
}
}
(如您所见,为空。)
这是 MenuBar 类:
class MyMenuBar extends JMenuBar implements ActionListener {
private JMenu mArchivo;
private JMenuItem mNuevo;
public MyMenuBar(){
init();
add(mArchivo);
}
private void init() {
mArchivo = settingUpMenus("Archivo", "Archivo", 'A');
mNuevo = settingUpMenuItems("Nuevo", "Nuevo", 'N');
mArchivo.add(mNuevo);
}
private JMenu settingUpMenus(String mTitle, String mDescription,
char mMnemonic) {
JMenu mMenu;
mMenu = new JMenu(mTitle);
mMenu.setMnemonic(mMnemonic);
mMenu.getAccessibleContext().setAccessibleDescription(mDescription);
mMenu.setActionCommand(mTitle);
mMenu.addActionListener(this::actionPerformed);
return mMenu;
}
private JMenuItem settingUpMenuItems(String mTitle, String
mDescription, char mMnemonic) {
JMenuItem mMenuItem;
mMenuItem = new JMenuItem(mTitle);
mMenuItem.setMnemonic(mMnemonic);
mMenuItem.getAccessibleContext().
setAccessibleDescription(mDescription);
mMenuItem.setActionCommand(mTitle);
mMenuItem.addActionListener(this::actionPerformed);
return mMenuItem;
}
@Override
public void actionPerformed(ActionEvent e) {
switch(e.getActionCommand()) {
case "Nuevo":
onNew();
break;
}
}
private void onNew() {
}
}
这是类构造函数,我在其中添加 JTextArea 和 JMenu 及其项目和所有内容。
public Editor() {
JScrollPane myScrollPane = new JScrollPane(new MyTextArea(),
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
systemLook();
setTitle("Text editor");
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(new Dimension(800, 700));
setVisible(true);
setJMenuBar(new MyMenuBar());
add(myScrollPane);
}
但是,我尝试了很多方法让我的新按钮访问 JTextArea 的当前实例并对其进行修改,例如在 JMenu 类的 actionPerformed 方法中获取具有 ActionEvent 对象的父类。但是我所做的任何意图都不能访问 JTextArea。有任何想法吗?我应该以其他方式实现它吗?
【问题讨论】:
-
在构造函数中将其作为参数传递。无论如何,您不应该不必要地对组件进行子类化,您可以将它们实例化,这样您就可以直接访问。
-
创建和实例实际上会创建该类的 new 实例。我需要的是在实际实例上工作。我会尝试将它作为参数传递给构造函数。
-
作为参数发送给我的 JMenu 构造函数!像魅力一样工作;)
-
直接地址,@YagoMéndezVidal 可以回复,也可以answer your own question。