gpt4 book ai didi

java - 使用可变数量的 JLabel 创建 JFrame

转载 作者:行者123 更新时间:2023-11-30 03:18:53 24 4
gpt4 key购买 nike

我目前正在尝试制作一个 JFrame,它应该包含一个字符串,后跟 HashMap (longToShortNamesMap) 中每个条目的文本输入字段。目前,我在 JOptionPane 中显示如下条目:

 String paneMessage = "";
List keys = new ArrayList(longToShortNameMap.keySet());
for(int i = 0 ; i < keys.size();i++){
paneMessage += "Field name " + keys.get(i) + " has been shortened to " + longToShortNameMap.get(keys.get(i)) + "\n";
}
JOptionPane.showMessageDialog (null, paneMessage, "Data Changed", JOptionPane.INFORMATION_MESSAGE);

相反,我希望出现一个框架,该框架将显示相同的消息,但“longToShortNameMap.get(keys.get(i))”部分将出现在可编辑文本字段中。我不太确定如何解决这个问题,但这就是我到目前为止所拥有的,即弹出一个带有一个标签的 JFrame(这不是一个可编辑的文本字段)。

private static void showFrames(Map<String,String> longToShortNameMap) {
JFrame frame = new JFrame("Data Changed");
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setSize(400, 500);
frame.setResizable(true);
frame.setLocationRelativeTo(null);
JPanel panel = new JPanel(new BorderLayout());
List<String> keys = new ArrayList(longToShortNameMap.keySet());
for (String key : keys) {
JLabel label = new JLabel(longToShortNameMap.get(key));
panel.add(label);
}
frame.add(panel);
}

编辑:作为上下文附注,我这样做是因为应用程序中某个位置的字段名称限制为 10 个字符,因此我被迫将字段名称修剪为 10 个字符。当我执行此操作时,我想通知用户每个修剪字段已被修剪为什么,并另外为他们提供更改修剪名称的选项

最佳答案

您的主要问题是您对布局管理器的选择。 BorderLayout 允许在其 5 个区域中的每一个区域中使用一个组件。当您将标签添加到中心区域(默认)时,您会不断替换最后一个标签,而不是附加它。我建议将每个标签和 JTextField(您的可编辑字段)添加到 GridLayout 面板。

private static void showFrames(Map<String,String> longToShortNameMap) {
JFrame frame = new JFrame("Data Changed");
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setSize(400, 500);
frame.setResizable(true);
frame.setLocationRelativeTo(null);
JPanel panel = new JPanel(new GridLayout(0, 2)); //use gridlayout
List<String> keys = new ArrayList(longToShortNameMap.keySet());
for (String key : keys) {
JLabel label = new JLabel(key); // your label is the key itself
JTextField textField = new JTextField(longToShortNameMap.get(key));
panel.add(label); // Populate textfield with the key's value
panel.add(textField);
}
frame.add(panel);
}

关于java - 使用可变数量的 JLabel 创建 JFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31842276/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com