java - 在 JOptionPane.showOptionDialog 中使用 Arraylist 作为消息

标签 java user-interface arraylist joptionpane

我正在开发一个可以由其他人更改单词的程序,并且我尝试让用户在按下“添加”时可以更改任意数量的单词,以添加更多行。我会尝试解释一下自己,程序应该如下所示:

enter image description here

如果我按添加:

enter image description here

如果我继续按“添加”,它应该会添加越来越多的“行”。

为此,我使用这个:

    JTextField oldword = new JTextField(5);
    JTextField newword = new JTextField(5);
    JPanel Panel = new JPanel();
    List<JPanel> message = new ArrayList<JPanel>();
    String[] options = new String[] {"Ok", "Cancel", "Add", "Delete"};

    Panel.add(new JLabel("Change: "));
    Panel.add(oldword);
    Panel.add(Box.createHorizontalStrut(15));
    Panel.add(new JLabel("by:"));
    Panel.add(newword);

    message.add(Panel);

    while(response!=0 && response!=1){      
        response = JOptionPane.showOptionDialog(null, message, "Title",
        JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, null, options, options[0]);
        if(response==2){
          message.add(Panel);
        }
    }

但是当它到达“response = JOptionPane.showOptionDialog”时,我只得到一个带有以下内容的框:

Message

如果我按“添加”,它就会开始重复该消息。

抱歉,如果我没有清楚地解释我的问题,我的语言能力很差。

最佳答案

您正在使用 ArrayList<JPanel>作为消息。自 message参数不是String ,但是Object ,任何对象都被接受。 在您的情况下,该列表包含 JPanel其具有 toString()这不适合您的消息(它更适合调试)。 对象的toString()被调用并显示其结果,这是完全合法的代码,但很可能不是您想要的。 也许您想使用 StringBuilder构建要显示的字符串。

例如

 StringBuilder builder = new StringBuilder();
 builder.append("Change: ")
       .append(oldword.getText()) 
       .append("by:")
       .append(newword.getText())
       .toString();

编辑: 实际上可以显示 JPanel在消息中,当您使用Component时,它将被显示(但是当使用 ArrayList 时,它将不起作用):

    JPanel panel = new JPanel();
    JTextField oldword = new JTextField(5);
    JTextField newword = new JTextField(5);
    String[] options = new String[] {"Ok", "Cancel", "Add", "Delete"};

    panel.add(new JLabel("Change: "));
    panel.add(oldword);

    panel.add(new JLabel("by:"));
    panel.add(newword);

    JOptionPane.showOptionDialog(null, panel, "Title",
            JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, null, options, options[0]);

如果你想显示多个Panel,你可以将它们放入一个 super Panel中并像Stack swing elements from top to bottom那样堆叠起来。

关于java - 在 JOptionPane.showOptionDialog 中使用 Arraylist 作为消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31774943/

相关文章:

java - 如何使用 swing 创建可定制的用户界面

java - JButton 未添加带有 ActionListener 的 JLabel

java - 检查 ArrayList 中是否存在值

java - NullPointerException:尝试在空对象引用上调用虚拟方法 'void android.widget.TextView.setText(java.lang.CharSequence)'

java - 如何创建一个方法来检查字符串中的模式并使用 ArrayList 返回模式后的字符? (描述中提示)

Java 或 Groovy 相当于 python for loop + izip

java - RMI 服务器 java.security.AccessControlException : access denied

java - 使 JPanel 不绘制其背景(透明)

java - 网络驱动程序异常 : Timed out waiting for driver server to start error with Selenium ChromeDriver and Chromium through Java

java - NameNotFoundException 将 JNDI 数据源映射到本地名称