Methode von Ursprungsklasse unsichtbar

Xondio

Grünschnabel
Hallo ,

Ich wollte die Methode getAccessibleChildrenCount() aus der klasse java.awt.Container.AccessibleAWTContainer .

und ich bekomm die Meldung das die Methode nicht sichtbar ist ...
habe auch schon versucht Accessible (das Interface von den Accessible-Klassen) zu implementieren ...

im grunde will ich nur die Componenten in einerm swing container abfragen und drauf zugreifen ...
 
gute idee ... die gibts ja auch noch ...
nur bekomm ich da ein Component zurück ... das ich nicht auf eine erweiterte Classe von Jpanel casten kann ...

das ganze sieht so aus :
JPanel ... da liegen mehrere erweiterte JPanel's drin. (nur um 2 strings erweitert)
mit ComponentCount lese ich die anzahl aus und geh mit einer for Schleife und getComponent dürch alle Componenten dürch , bei jedem will ich einen von den erweiterten Strings auslesen und mit dem Soll-String vergleichen.
Wenn die übereinstimmen will ich den 2ten string auslesen ... und weiterverarbeiten ...

Nur wenn ich ein Component auslese und auf das erweiterte JPanel caste bekomm ich ein AWT-EventQueue-0 error ...

weiss jemand warum ? ;D
 
hier ist er ... in auszügen ^^
Erweiterte JPanel class:
Code:
public class DaleSegment extends JPanel {

	private CellConstraints cc = new CellConstraints();  // Jgoodies Forms
	private FormLayout layout = new FormLayout(
		  	"80dlu, 5dlu, 80dlu, 5dlu, 80dlu, 5dlu, 80dlu, 5dlu, 80dlu, 5dlu, 80dlu",  // col 
  			"20dlu, 3dlu, 20dlu, 3dlu, 20dlu, 3dlu, 20dlu, 3dlu, 20dlu");           // rows
	private String SegName, SegTitel;

//Konstruktor
	DaleSegment(String name, String beschr){
		 super();
		 this.SegName=name;
		 this.SegTitel=beschr;
		 this.setLayout(layout);
		 this.setSize(1100, 500);
		 this.add(new JLabel(SegTitel),			cc.xy  (1, 1));
	}
	DaleSegment(){
		 super();
		 this.setLayout(layout);
		 this.setSize(1100, 500);
	}

Aufruf aus einem JFrame

Code:
public class daleStartFrame extends JFrame implements ActionListener
{
public static void main(String[] args)
	{
		daleStartFrame fenster = new daleStartFrame();
		fenster.InsertSeg();
		fenster.show();
		//fenster.setVisib();
	}

	public daleStartFrame()
	{
		super("DALE - UV plus");
		
		this.setSize(1200, 860);
		this.setLocation(50, 70);
		this.setLayout(new BorderLayout());
        JPanel JPground =new JPanel();
		
		JButton JBbeenden = new JButton("Beenden");
		JBbeenden.addActionListener(this);
		JButton JBshow = new JButton("show");
		JBshow.addActionListener(this) ;
		FlowLayout flr = new FlowLayout(FlowLayout.RIGHT);
		JPground.setLayout(flr);
		JPground.add(JBbeenden);
		JPground.add(JBshow);
		
		this.add("South", JPground);
		
		
		pan.setBackground(Color.GRAY);
		//innerScroll.add(pan);
		
	
	}

public void actionPerformed(ActionEvent e){

			String quelle = e.getActionCommand();
		    if(quelle.equals("Beenden")){
		       System.exit(0); 
		    }   
		    if(quelle.equals("show")){
		    	System.out.println(this.getComponentCount());
		    	for(int i=0;i < this.getComponentCount();i++){
		    		DaleSegment d = this.getDComponent(i);
		    		if(d.getSegName().equals("unb")){
		    		System.out.println(d.getFieldtext("unb_2"));
		    		}
		    	}
		    }   
		   			
		}
 
Code:
for(int i=0;i < this.getComponentCount();i++){
		    		DaleSegment d = this.getDComponent(i);
		    		if(d.getSegName().equals("unb")){
		    		System.out.println(d.getFieldtext("unb_2"));
		    		}
		    	}

Ich schätze mal den Code hast du eben abgetippt, oder? Normal müsstest du hier nämlich casten.
Überprüfst du vorher überhaupt, ob du es überhaupt zu deinem Panel casten kannst?

MFG

zEriX
 
ups ja stimmt habe eben zum testen das casten ausgelagert ... und getComponent überschrieben ^^

Code:
	public DaleSegment getDComponent(int g){
		DaleSegment b = (DaleSegment)this.getComponent(g);
		
		
		
		return b;
	}

Überprüffen tu ich das nicht ... ? wie ? ;D
bzw hab in der API nachgeschaut , und ich dachte ich kann jede Ancestor-class zu einer abgeleiteten class casten in java ....

EDIT: getComponent ist hier nicht überladen .. wegen dem get D Com...
 
Zuletzt bearbeitet:
Die Methode sollte besser so aussehen.

Code:
public DaleSegment getDComponent(int g){
                
   DaleSegment b = null; 
   Component c = this.getComponent(g);
   if(DaleSegment.class.isAssignableFrom(c.getClass())){

      b = (DaleSegment)c;

   }
		
		
		
   return b;
}

oder

Code:
public DaleSegment getDComponent(int g){
                
   DaleSegment b = null; 
   Component c = this.getComponent(g);
   if(c instanceof DaleSegment){

      b = (DaleSegment)c;

   }
		
		
		
   return b;
}

So musst du nachher nur noch prüfen ob die Rückgabe null war.

MFG

zEriX
 
Zurück