Jak znalezc komponent na JFame po nazwie

0

Witam
potrzebuje wyszukac komponent typu JLabel po jego nazwie, jest na to jakis prosty sposob ??
W Delphi robi sie to mnije wiecej tak:

TLabel(Form1.FindComponent("nazwa komponentu")).Text = "ble";

czy java udostepnia podobne metody ??

znalazlem funkcje findComponentAt(int int) findComponentAt(point) ale nie wiem jak ich uzyc to tego celu.

wyswietlanie JFrame robie w taki sposob:

 Interface Program = new Interface();
  Program.setVisible(true);

z góry dziekuje za pomoc.

0

W Javie możesz użyć obiektu JLabel na jeden z trzech sposobów:

add(new JLabel("a kuku")): // nie istnieje nawet zmienna lokalna
JLabel l=new JLabel("a kuku"); // istnieje zmienna lokalna l wskazująca na JLabel
add(l);
l=new JLabel("a kuku"); // l jest polem w klasie
add(l);

O jaki przypadek ci chodzi ?

0

Chodzi pewnie o to trzecie. Po co szukać komponentu ? Nie można napisać tak ?

okno.l.setText("Hokus-pokus");
0

W klasie "Interface" mam metode private void initComponents() w ktroej tworze JLabel w taki sposob:

jLabel1 = new javax.swing.JLabel();

dodawanie odbywa sie w taki sposob:

      javax.swing.GroupLayout jPanel6Layout = new javax.swing.GroupLayout(jPanel6);
        jPanel6.setLayout(jPanel6Layout);
        jPanel6Layout.setHorizontalGroup(
            jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel6Layout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(jLabel3)
                .addContainerGap())
        );
        jPanel6Layout.setVerticalGroup(
            jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel6Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel3)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

{tworze to w IDE wiec samo mi wygenerowalo taki kod}

pozniej mam jLabela zrobionego na public w tej samej klasie:

public javax.swing.JLabel jLabel1;

i chcialbym w klasie np. "Main" wyszukac po nazwie dany jLabel.

0

Nie rozumiem po co szukać, dlaczego nie możesz napisać tak

Main.jLabel1.setText("Hokus pokus");
0

Stary problem ;) moje rozwiązanie jeszcze ze starych czasów i pisane z głowy ;)

class MyFrame extends JFrame{
	 Map<String, Component> elementy = new HashMap<String, Component>();
	
	//... jakieś duperele typu konstruktory
	// clu programu czyli własna implementacja add(String, Component):Component
	@Override
	public Component add(String name, Component arg1) {
		if(elementy.containsKey(name))
			throw new IllegalArgumentException("Istnieje element o takiej nazwie");
		elementy.put(name, arg1);
		return super.add(name, arg1);
	}
	// metoda wyszukująca 
	public Component getComponentByName(String name){
		return elementy.get(name);
	}

}
0

Szukanie jest mi potrzebne bo na JFrame mam okolo 30 JLabelow i kazdemu cos przypisuje. W przypadku takiej metody Program.JLabel.settext('sds') bede musial uzyc az 30 takich samych polecen a nie chodzi tu tylko o ustawienie tekstu, wiec lepiej bylo by zrobic to w petli zeby wygladalo mniej wieecj tak:

PSEUDO KOD:

For(i=1; i<=30; i++)
{
Program.findComponent("JLabel"+i).setext = "hokus pokus";
}

prosze o jakies podpowiedzi ;)

0

Przed utworzeniem etykiet (obiektów JLabel):

Hashtable<String,JLabel> etykiety=new Hashtable<String,JLabel>();

podczas tworzenia etykiet (lub po utworzeniu)

etykiety.add("jLabel1",jLabel1);
...
etykiety.add("jLabel19",jLabel19);

...
podczas zmiany tekstu

for(int i=0;i<2315;i++)
  etykiety.get("jLabel"+i).setText("Abrakadabra "+i);
0

Wielkie dzieki bogdans :) Naprawde mi pomogles [browar]

Jest tam tylko mały bład (powinno byc put a nie add)

podczas tworzenia etykiet (lub po utworzeniu)

etykiety.put("jLabel1",jLabel1);
...
etykiety.put("jLabel19",jLabel19);

1 użytkowników online, w tym zalogowanych: 0, gości: 1