首页 > 解决方案 > 如何将返回的 ArrayList 中的 TextArea 添加到框架中?

问题描述

我正在尝试返回一个带有两个值、文本和文本区域的 ArrayList。但是,当我按下本应执行此操作的按钮时,什么也没有发生。你能解释一下为什么会这样吗?

返回 ArrayList 的方法:

public ArrayList<Object> newFile(){
      ArrayList<Object> objectArrayList = new ArrayList<>();
      TextArea textField = new TextArea("Type File Information.., ");
      AtomicReference<String> fileText = new AtomicReference<>();


      textField.addTextListener((textListener) -> {
          fileText.set(textField.getText());
      });
      objectArrayList.add(String.valueOf(fileText));
      objectArrayList.add(textField);

      return objectArrayList;
    }
}

执行该方法并获取文本区域的代码片段:

public void actionPerformed(ActionEvent e) {
        String action = e.getActionCommand();

        switch (action) {
            case "New":
                fileText = (String) newFile().get(0);
                MainMenu mainMenu = new MainMenu();
                mainMenu.add((TextArea)newFile().get(1));
                break;

我添加处理程序的代码片段:

newFile.addActionListener(mainMenuHandler);

标签: javaawt

解决方案


你为什么使用 AWT。您至少应该使用 Swing。

MainMenu mainMenu = new MainMenu();
mainMenu.add((TextArea)newFile().get(1));

在您的情况下,您将文本区域添加到 MainMenu,但您从未将 MainMenu 添加到框架中。

因此,您需要将“mainMenu”添加到框架中。

此外,在使用 Swing 时,如果您将组件添加到可见框架,那么您需要调用revalidate()repaint()在您将组件添加到的容器上。


推荐阅读