Komponenten von JScrollPane werden nicht richtig ermittelt

ernst

Top Contributor
Hallo allerseits,
Im Programmausschnitt unten werden die Komponenten von JScrollPane sp nicht richtig ermittelt.
In JScrollPane sp wurde ein JTextArea eingebettet.
Dieses wird aber in tempComp mit:
tempComp = sp.getComponents();
nicht angezeigt.
Was muss man machen, damit dieses JTextArea in tempComp auftaucht ?

mfg
Ern


Java:
package renametestxx;

import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import javax.swing.*;

public class Startklasse extends JFrame {

    public static void main(String[] args) {
        Container myCont;
        JPanel myPan;
        JButton myRenameButton;
        JTextArea ta;
        JScrollPane sp;
        JLabel myMeldungenLabel;
        GridBagLayout myGBL_10_1;
       //  myCont = getContentPane();
        myPan = new JPanel();
        myRenameButton = new JButton("Start");
        myMeldungenLabel = new JLabel("Meldungen des Programms:");

        ta  = new JTextArea("xyz");        
        sp = new JScrollPane(ta);
        sp.add(ta);
        sp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);        
        sp.setViewportView(ta);

        System.out.println("ACHTUNG ein Text");
        JTextArea textAreaTemp;
        Component tempComp[];        
        tempComp = sp.getComponents();
        for (int k = 0; k < tempComp.length; k++) {
            if (tempComp[k] instanceof JTextArea) {
                textAreaTemp = (JTextArea) tempComp[k];
                textAreaTemp.append("\nDies ist ein Test ");
                System.out.println("TextArea=" + textAreaTemp.getText());
            }
        }
    }
}
 
Wenn man sich die JavaDocs von JScrollPane mal ansieht, sieht man recht schnell, wie die Komponenten in der JScrollPane verwaltet werden. Die Komponente - hier deine JTextArea - wird nicht direkt als Komponente der JScrollPane gehalten sondern in einer separaten JViewPort Komponente (daher auch setViewportView).
Hier mal ein kleines Testprogramm:
Java:
public class Test {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setSize(500,500);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          
        JTextArea area = new JTextArea();
        JScrollPane pane = new JScrollPane(area);
      
        frame.add(pane);
        frame.setVisible(true);
      
        System.out.println("Scrollpane Components");
        for(Component comp : pane.getComponents()) {
            System.out.println(comp.getClass());
        }
      
        System.out.println("\nViewport Components");
        for(Component comp : pane.getViewport().getComponents()) {
            System.out.println(comp.getClass());
        }
    }
}
Output:
Code:
Scrollpane Components
class javax.swing.JViewport
class javax.swing.JScrollPane$ScrollBar
class javax.swing.JScrollPane$ScrollBar

Viewport Components
class javax.swing.JTextArea
 

Zurück
Oben