Swing更改JScrollPane内容

时间:2012-11-03 09:47:17

标签: swing jscrollpane

您好我正在尝试更改JScrollPane内容,例如

scrollPanel = new JScrollPane(new Welcome().display());

        for(final JMenuItem i : items) {
            i.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    String txt = i.getText();

                    if(txt.equals("Open")) {
                        scrollPanel = new JScrollPane(new Open().display());
                    } else if(txt.equals("Save")) {
                        scrollPanel = new JScrollPane(new Save().display());
                    } else if(txt.equals("Save as")) {
                        scrollPanel = new JScrollPane(new SaveAs().display());
                    } else if(txt.equals("Close")) {
                        new Close().ask();
                        scrollPanel = new JScrollPane();
                    }

                    scrollPanel.revalidate();
                    scrollPanel.repaint();
                }
            });
        }   

        scrollPanel.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        scrollPanel.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);

        menuBar.add(menu);
        frame.setJMenuBar(menuBar);
        frame.add(scrollPanel);

        frame.pack();
        frame.setSize(640, 480);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);

但它不起作用。 每个类Open,Save,SaveAs返回JPane里面有JLabel。 实施例

public class Open {
    public JPanel display() {
        JPanel panel = new JPanel();
        panel.add(new JLabel("Open"));
        return panel;
    }
}

1 个答案:

答案 0 :(得分:3)

您没有更改滚动窗格内容。您正在为scrollPanel字段分配新的JScrollPane实例。您添加到框架中并显示的滚动窗格保持原样。

如果要更改滚动窗格内容,则应使用

scrollPanel.setViewportView(new Open().display());