Jak dynamicznie tworzyć elementy gui?

0

Dopiero zaczynam z javą, pracuję w NetBeans.

Mam jFrame oraz kilka komponentów na niej. Ogólnie backend już mam, zaciąłem się przy "fajnym" gui, nie wiem jak to ugryźć. Mój program ma wykonywać kilka zadań jednocześnie (0, jeden lub więcej). Lista zadań jest w jListBox, co sekundę zmieniam każdy item ii wyświetlam je w takim formacie
Nazwa zadania (55%)
Nazwa zadania (3%)
Nazwa zadania (23%)
Przy 100% zadanie znika z listy.

Chciałbym jednak żeby zamiast jListBoxa był jakiś parent component, aa zamiast pozycji na liście np jLabel z nazwą zadania, kilka małych przycisków i jProgressBar. Nie za bardzo wiem jak się do tego podchodzi. Za każdym razem tworzyć i zwalniać komponenty? Wszystkie po kolei czyy zrobić jeden swój komponent który ma wszystko? Może tylko pokazywać ii ukrywać panele?

Nie proszę o kod tylko o jakieś wskazówki, wytyczne?

0

Jak kiedyś robiłem aplikacje która musiała takich dynamicznych trików używać, bardzo dużo pomogły mi własne komponenty które dziedziczyły po np tabelach czy labelach i ich listenery. Nadpisywanie metod klas bazowych tez sporo pomaga

1

Tworzysz sobie klasę dziedziczącą po JPanel, ewentualnie JComponent na której umieszczasz wszystkie potrzebne elementy. Do niej dodajesz jeszcze klasę która zarządza jej polami (która wypisuje nazwę np do JLabel i nadaje kolor). Wszystko wrzucasz do jakiejś kolekcji którą odrysowujesz na swoim głównym Oknie. Po upłynięciu odpowiedniego czasu usuwasz dany element z listy (zastanów się co Ci będzie najbardziej pasowało List,ArrayList,Map) a element odrysowujący już sam będzie wiedział że nie trzeba go odrysowywać bo nie będzie go w kolekcji :)

ja bym się tak do tego zabrał.

Z ProgressBarem się zastanów bo będziesz musiał jeszcze SwingWorkera do tego dodać. Ja tam wolę swoją klasę zawsze pisać :)

pozdrawiam

0

Okej, chciałbym stworzyć klasę dziedziczącą po JPanel, alee jak na niej odpowiednio ustawić elementy? Trochę nie rozumiem o co chodzi z tą kolekcją i rysowaniem jej w głównym oknie :/

1

piszesz sobie klasę dziedziczącą po JPanel

public class MojaKlasa extends JPanel{
private JLabel labelkaInfo,labelkaZdjecie;
private JComboBox box;


public MojaKlasa(String text, Image image){
this.setLayoutMenager(new BorderLayout());
labelkaInfo=new JLabel(text);
labelkaZdjecie=new JLabel(image);
box=new JComboBox();
this.add(labelkaInfo,BorderLayout.WEST);
this.add(labelkaZdjecie,BorderLayout.CENTER);
this.add(box,BorderLayout.EAST);
};
}

przyklad. dodajesz jeszcze metody do zmian (np. setImage, ) i piszesz klasę która to obsłuży.

Później dodajesz to do kolekcji a na głównym oknie piszesz funckje odrysowującą kolekcje

ArrayList listaPanel=new ArrayList()<MojaKlasa>;


public void ustawListe(List<MojaKlasa> lista){
this.setLayout(new GridLayout(0,1);
for(MojaKlasa mk:lista){
this.add(mk);

}
}

i jeszcze napisać kod który zarządz wyrzucaniem i dodawanie na główne okno dodatkowych Paneli. Po jakiejś akcji wywalasz Panel z kolekcji i zastępujesz stary widok nowym.

Ja bym tak to zrobił, nie wiem czy jest mądrzejszy sposób.

kod pisany z palca także nie sugeruj się zbytnio składnią :P

pzdr

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