java - 使用 JMenuItem actionListener 关注一个 JInternalFrame 对象

标签 java swing focus jinternalframe jmenuitem

我正在尝试编写一个多文档界面程序绘图应用程序。 绘图应用程序的每个实例都显示在 JDesktopane 内的 JInternalFrame 对象中。 用户可以通过“文件-新窗口”(JMenu)创建多个子窗口绘图应用程序。

对于创建的每个内部框架,都会创建相应的描述性 JMenuitem 并将其添加到 JMenu(Windows)中。

然后,JMenu Window 命令会显示打开的窗口列表并允许用户选择一个窗口。

这就是我的心理障碍,有没有一种方法可以将 JMenuitem 链接到创建的窗口?

13年6月7日 感谢您的建议。 每次实例化一个ArrayList时,我都会向ArrayList添加一个internalFrame,然后通过操作字符串标题从数组中检索它以获取帧号(请参见下面的代码),但是ArrayList大小始终为1,并且始终是最后一个帧实例化......有什么想法吗?

windowList = new ArrayList();
            windowList.add(internalFrame);
            //windowMenuItem = new ArrayList(200);
            windowMenuItem.add(newWindow);

            //picNumber = new int[200];
            //allow suer to select internalFrame according to menuItem selceted
            newDrawFrame.addActionListener(new ActionListener(){

          @Override
          public void actionPerformed(ActionEvent menuEvent) {



                  //call method to handle this event
                  winItemActionPreformed(menuEvent);
                  //frames[openFrameCount].setSelected(true);


          }//end actionPerformed

            }//end annon actionListener class

        );//end method calal to actionListener 

然后是 winItemActionPerfomed 方法...

 //handle menu selction for a internalFrame and set to front/on focus
public void winItemActionPreformed(ActionEvent menuEvent){
    //get selected menuItem via event and casdt to JMenuItem type
    //manipulate returned String object to retrive frame number

    JMenuItem tempItem = (JMenuItem) menuEvent.getSource();
    String tempItemString = tempItem.getText();
    int getFrameNumber = tempItemString.lastIndexOf("#");
    String frameNumberSelected = tempItemString.substring(getFrameNumber+1); 

    //convert String to int representong frameNumber in ArrayList
    int frameNumber;
    try 
    {
        frameNumber = Integer.parseInt(frameNumberSelected);
        JInternalFrame tempFrame = (JInternalFrame) windowList.get(frameNumber-1);
        tempFrame.toFront();
    }//end try
    catch (NumberFormatException ex) {
        System.err.println("No Such Number.");


    }//end catch 




}//end winActionPreformed

最佳答案

我会利用Actions API

例如...

public class SelectWindowAction extends AbstractAction {

    private JInternalFrame frame;

    public SelectWindowAction(JInternalFrame frame) {
        putValue(NAME, frame.getTitle());
    }

    public void actionPerformed(ActionEvent evt) {
        frame.setSelected(true);
    }
}

然后你可以简单地创建一个 JMenuItem 使用类似...

JMenuItem mi = new JMenuItem(new SelectWindowAction(frame));

关于java - 使用 JMenuItem actionListener 关注一个 JInternalFrame 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17485133/

相关文章:

java - ElasticSearch Java API "Should"数组

java - 将一个元素插入已排序的数组中

java - 单击按钮后将对象添加到 JPanel

android - AlertDialog 在关闭时专注于 EditText..导致键盘出现..该怎么办?

java - JSF 自定义组件 : How to get attribute of <f:ajax/>

java - 结果集开始之前

java - 在 JPanel 中显示 Word 文档

java - 为什么不可能有效地覆盖 Swing 的 setEnabled?

wpf - 仅使用 XAML 的焦点文本框

forms - HTML 点击提交按钮两次