2 Stimmen

Änderung der JScrollPane-Komponente

Ich habe ein JScrollPane. Aber standardmäßig zeigt es JTextArea.

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

Hier ist also alles in Ordnung. Aber jetzt möchte ich JScrollPane Komponente durch Benutzeraktion zu ändern:

pane.remove(jTextArea);
pane.add(new JTable(data[][], columns[]));
pane.revalidate();
frame.repaint();

Rahmen in meinem Hauptfenster. JScrollPane wird dem Hauptfenster mit GridBagLayout hinzugefügt. Aber das funktioniert nicht. Nach dem Ausführen der Aktion JScrollPane wird grau.

4voto

StanislavL Punkte 55993
jScrollPane.getViewport().remove/add

3voto

Andrew Thompson Punkte 166383

Eine Alternative ist das Anbringen einer JPanel mit einer CardLayout 1 in die JScrollPane Fügen Sie die beiden Komponenten zum Panel hinzu und wechseln Sie dann einfach zwischen dem Textbereich und der Tabelle, je nach Bedarf.

  1. Wie man CardLayout verwendet

In Anbetracht der Tatsache, dass die Komponenten sehr unterschiedlich groß sein können, könnte es besser sein, es auf diese Weise zu tun:

JPanel con CardLayout contiene viele JScrollPane Instanzen, von denen jede eine einzelne Komponente enthält. Das funktioniert auch von Natur aus besser für eine JTable .

2voto

nIcE cOw Punkte 24268

Ich habe meine Antwort geändert, nachdem ich einen wertvollen Vorschlag von Seiner Majestät @camickr erhalten habe, setViewportView(componentObject); wird für solche Dinge verwendet.

Ein Beispielcode für Ihr Anliegen :

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();
            }
        });
    }
}

Ich hoffe, das hilft Ihnen irgendwie weiter.

Mit freundlichen Grüßen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X