我有一个弹出JFrame / JScrollPane的方法,它有2列,一列用于散列映射的键,另一列用于散列映射的值。值可填充在可编辑的文本字段中。我正在尝试向JFrame添加一个ok和cancel按钮,但是在进行更改后我没有看到我的应用程序中的任何更改。 (没有收到任何错误,运行时或编译)。知道我的按钮没有显示的原因吗?
private static List<JTextField> 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));
List<String> keys = new ArrayList(longToShortNameMap.keySet());
List<JTextField> textFields = new ArrayList<>();
for (String key : keys) {
JLabel label = new JLabel(key);
JTextField textField = new JTextField(longToShortNameMap.get(key));
panel.add(label);
panel.add(textField);
textFields.add(textField);
}
JScrollPane scrollPane = new JScrollPane(panel);
JButton okButton = new JButton("ok"); //added for ok button
JButton cancelButton = new JButton("cancel");//added for cancel button
okButton.setVisible(true);//added for ok button
cancelButton.setVisible(true);//added for cancel button
scrollPane.add(okButton);//added for ok button
scrollPane.add(cancelButton);//added for cancel button
scrollPane.setVisible(true);
scrollPane.setSize(500, 500);
frame.add(scrollPane);
return textFields; //make clicking ok button return this, this method should return void
}
我还尝试将按钮直接添加到JFrame而不是JScrollPane,这会产生相同的结果:没有更改也没有错误(注意:这些按钮应该在JScrollPane下面)
如果我将按钮添加到面板,则会出现按钮DO但是我必须滚动到我的JScrollPane的底部才能看到它们,这是不可取的。
答案 0 :(得分:3)
您需要为放置滚动视图的layout
frame
和带按钮的面板提供帮助。这是一个例子:
在向frame.getContentPane().setLayout(new BorderLayout());
添加任何内容之前,请写
JPanel panel = new JPanel(); //Flow layout by default
//If you want to anchor the buttons to the right you might try
panel.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
panel.add(okButton);
panel.add(cancelButton);
为按钮创建一个面板
scrollPane
然后像这样添加frame.getContentPane().add(scrollPane, BorderLayout.CENTER);
frame.getContentPane().add(panel, BorderLayout.NORTH);
和面板中的按钮
{{1}}