将Ok / Cancel按钮添加到现有JFrame

时间:2015-08-06 13:20:33

标签: java swing jbutton

我有一个弹出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的底部才能看到它们,这是不可取的。

1 个答案:

答案 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}}