JScrollPane组件更改

时间:2012-01-27 10:33:48

标签: java swing jscrollpane

我有一个JScrollPane。 但默认情况下它显示JTextArea。

JTextArea jTextArea = new JTextArea();
JScrollPane pane = new JScrollPane(jTextArea);

所以这里一切都很好。但现在我想通过用户操作更改JScrollPane组件:

pane.remove(jTextArea);
pane.add(new JTable(data[][], columns[]));
pane.revalidate();
frame.repaint();
我的主窗口中的

帧。使用GridBagLayout将JScrollPane添加到主窗口。 但这不起作用。运行后,JScrollPane变为灰色。

3 个答案:

答案 0 :(得分:4)

jScrollPane.getViewport().remove/add

答案 1 :(得分:3)

另一种方法是将JPanel CardLayout 1 放入JScrollPane,将两个组件添加到面板中,然后简单地在文本区域和表格。

  1. How to Use CardLayout

  2. 鉴于组件的大小可能大不相同,最好这样做:

    带有JPanel

    CardLayout包含许多 JScrollPane个实例,每个实例都包含一个组件。对JTable来说,这也会更好地发挥作用。

答案 2 :(得分:2)

在收到陛下@camickr提出的一个有价值的建议后编辑了我的答案,setViewportView(componentObject);习惯于这样做。

帮助您解决问题的示例代码:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ScrollPaneExample extends JFrame
{
    private JPanel panel;
    private JScrollPane scrollPane;
    private JTextArea tarea;
    private JTextPane tpane;
    private JButton button;
    private int count;

    public ScrollPaneExample()
    {
        count = 0;
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationByPlatform(true);

        panel = new JPanel();
        panel.setLayout(new BorderLayout());

        tarea = new JTextArea();
        tarea.setBackground(Color.BLUE);
        tarea.setForeground(Color.WHITE);
        tarea.setText("TextArea is working");
        scrollPane = new JScrollPane(tarea);

        tpane = new JTextPane();
        tpane.setText("TextPane is working.");

        button = new JButton("Click me to CHANGE COMPONENTS");
        button.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent ae)
            {
                if (count == 0)
                {
                    scrollPane.setViewportView(tpane);
                    count++;
                }
                else if (count == 1)
                {
                    scrollPane.setViewportView(tarea);
                    count--;
                }
            }
        });

        setContentPane(panel);
        panel.add(scrollPane, BorderLayout.CENTER);
        panel.add(button, BorderLayout.PAGE_END);

        pack();
        setVisible(true);
    }

    public static void main(String... args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                new ScrollPaneExample();
            }
        });
    }
}

希望这可能会对你有所帮助。

此致