Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Komponenty na GUI uznat' (Java)

98  
mamma_sita прохожий10.07.07 17:50
mamma_sita
10.07.07 17:50 
Привет Спициалисты,
у меня проблема в том, мне нужно узнат какие Компоненты находятса на GUI и кание Компоненты находятса в етих компонентах и так далие.....
вот я так попробывала но я ничего не понимаю....
помогите пожалуиста
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Panel;
public class Scan2 {

public static void main(String[] args) {

Test mir = new Test();
Frame frame = new Test();
for (int i =0; i< frame.getComponentCount(); i++){
Component comp = frame.getComponent(i);
System.out.println("Component:"+comp);

System.out.println(frame);
}


mir.pack();
scan(mir);
mir.show();

System.out.println("Hallo" + mir);


}

public static void scan(Test mir) {
// Liste aller Dateien und Unterverzeichnisse holen
Container ob = mir.getParent();
if (ob == null || ob.getComponentCount() < 1) {
return;
}
for (int i = 0; i < ob.getComponentCount(); i++) {
Test kind = new Test();

if (mir == ob.getParent()) {
scan(mir); // rekursiv ins Unterverzeichnis verzweigen
System.out.println("Eltern" + mir);
} else {
// entry ist ein Kind
System.out.println("kind(er)" + kind);
}
}
}
}
Vydaöt na Konsole:
Component:java.awt.Panel[panel0,0,0,0x0,invalid,layout=java.awt.BorderLayout]
screen.Test[frame0,0,0,0x0,invalid,hidden,layout=java.awt.BorderLayout,title=mit Komponenten,resizable,normal]
Halloscreen.Test[frame1,0,0,172x113,invalid,layout=java.awt.BorderLayout,title=mit Komponenten,resizable,normal]
#1 
MrSanders прохожий26.07.07 17:56
NEW 26.07.07 17:56 
в ответ mamma_sita 10.07.07 17:50
Этта... Если честно - то в коде у вас творится страшное :)
Проще, наверное будет мне написать как бы я решил такое, а вы - посмотрите.
import java.awt.Container;
import java.awt.Component;
public class ContainerCrawler {
/**
* Метод, который нужно вызывать. Толком ничего не делает. Выдаёт сообщение в консоль и вызывает приватный метод, который и делает всю работу.
*/
public static void crawl(Container container){
System.out.println("Проверяем контейнер: "+container+"\n--- --- ---");
crawl(container, "");
}
/**
* Метод нужный исключительно для форматирования вывода в консоль. Чем глубже в иерархию контейнеров уходим - тем больше отступ слева.
*/
private static void crawl(Container container, String prefix){
System.out.print(prefix+"Kонтейнер: "+container);
if(container==null || container.getComponentCount() < 1){
System.println(" пуст.");
} else {
System.println(" содержит "+containet.getComponentCount()+" компонент.");
// Контейнер не пуст. Пробегаем по всем его компонентам и печатаем информацию о них. Если компонента тоже контейнер, вызываем метод рекурсивно.
for(Component child : container.getComponents()){
System.out.println(prefix+"--> "+child);
if(child instanceof Container){
// вызываем метод для вложенной компоненты, которая тоже контейнер. Удлиняем отступ слева для форматирования вывода.
crawl((Container) child, prefix+" ");
}
}
}
}
}
#2 
stinol гость26.07.07 22:01
stinol
NEW 26.07.07 22:01 
в ответ mamma_sita 10.07.07 17:50
Ты исползуеш AWT но вс╦ равно должно сработат и на ней. По крайней мере на SWT библиотеке это рабатоет с простим Befehlем getChildren. Попробуй, если не получится напиши, я тогда сам попробую найти что-нибудь.
#3