我目前正在尝试创建一个JFrame,它应该包含一个String,后跟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);
相反,我想要一个框架出现,它将显示相同的消息,但将具有&#34; longToShortNameMap.get(keys.get(i))&#34;部分出现在可编辑的文本字段中。我不太清楚怎么回事,但这是我到目前为止用一个标签弹出一个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个字符。当我这样做时,我想通知用户每个修剪过的字段已被修剪到什么位置,并且还为他们提供了更改修剪名称的选项
答案 0 :(得分:2)
您的主要问题是您选择的布局管理器。 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);
}