09. marts 2005 - 11:52Der er
13 kommentarer og 1 løsning
Problemer med setLayout
Jeg henter et JPanel fra en klasse over i en anden klasse, og lægger JPanelet ind i et nyt panel i denne anden klasse. Mit problem er, at jeg tilsyneladende KUN kan bruge LayoutManageren FlowLayout og ingen andre. Hvis ikke JPanel fra klasse nr. 1 ikke er FlowLayout, vises det simpelthen ikke i klasse nr. 2.
Hvordan kan jeg få et JPanel med setLayout(null) fra klasse1, addet til et andet JPanel i klasse2?
Jeg bruger en en del klasser der allesammen lavet en JPanel, som lægges ind i et 'masterpanel' der kan sætte hvilket et af dem der skal være synligt. Jeg skal altså ikke overskrive nogle panels, kun add'e til masterpanelet.
Du skal nok starte med at kigge i lærebogen en gang mere, du får rodet tingene lidt sammen, jeg vil ikke kommentere hele koden eller rette i den, men istedet give et eksempel.
Lad os tage udgangspunkt i din egen klasse SubPanel, hvis SubPanel skal give sig ud for at være et panel, skal du lade klassen extende JPanel og bruge den som et JPanel, men det tjener kun et formål hvis det JPanel skal have tilføjet/ændret sin oprindelige funktionalitet, det kunne være en masse komponenter man ville tilføje og derefter adde panelet til en JFrame
Eks.
import javax.swing.*;
public class SubPanel extends JPanel{ public SubPanel(){ add(new JLabel("TEST 1"); add(new JLabel("TEST 2"); add(new JLabel("TEST 3"); } }
public class MyFrame extends JFrame{ public MyFrame(){ getContentPane().add(new SubPanel()); }
public static void main(String[] args){ new MyFrame().setVisible(true); } }
Klassen SubPanel er nu at betragte som et JPanel, jeg har bare ændret lidt i funktionaliteten, da dette JPanel ALTID indeholder 3 JLabels - ved ikke om det fremmer forståelsen, men bedre kan jeg ikke gøre det
Der er mange måder at gøre det på, det afhænger meget af hvad du har gang i, normalt ville jeg aldrig skifte paneler i en gui, da det kan give flimmer, skulle jeg endelig gøre det ville jeg bruge CardLayout, hvilket indebærer at mine paneler får nøjagtig den samme størrelse. En nem løsning er dog (hvis man kan leve med det) simpelthen bare at adde og remove de JPanels der er behov for, når det er gjort kommer det aller vigtigste, nemlig at få valideret sit layout igen.
Eks
JPanel panel1 = new JPanel(); JPanel panel2 = new JPanel(); JPanel panel3 = new JPanel(); JPanel panel4 = new JPanel();
Hvis du skal skifte mellem mange paneler, så brug CardLayout, det fungerer på samme måde som et spil kort, kun det øverste er synligt, alle kort har samme størrelse og et hvilket som helst kort kan hives ud af bunken og lægges øverst. Så du laver bare nogle paneler som så fungerer som kort i et CardLayout.
Du har selvfølgelig også mulighed for at bruge faner (JTabbedPane).
For at gøre en gui "rolig" er det vigtigt at alle komponenter forbliver på samme plads og ikke ændrer størrelse og kun om nødvendigt gøres synlige/usynlige, ellers bruges en af ovenstånde muligheder, derved tvinges brugeren til selv at ændre skærmbilledet, og det bliver derfor en naturlig oplevelse for brugeren.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.