31. juli 2001 - 23:36Der er
9 kommentarer og 1 løsning
CardLayouy og setBounds()-metoden
Når jeg laver en single-panel-Applet kan jeg lave [setLauout(null)] og derefter bruge setbounds()-metoden til manuelt at placere elementer som knapper og lignende. Men jeg vil bruge CardLayout, som indkorporerer flere panels. Hvis jeg laver [panelX.setLauout(null)] på et af disse panels er elementerne som hører til dette panel ikke længere synlige i min Applet selvom jeg har \"addet\" dem og benyttet setBounds()-metoden! Hvordan kan jeg have flere panels i én Applet og alligevel placere elementerne i de forskellige panels manuelt???
Et fyldestgørende svar ville betyde SÅ meget for mig, da dette problem totalt blokerer et lille spil-projekt jeg er igang med...
hej Jeg véd ikke om det kan hjælpe dig men har du prøvet at kalde setVisible() på de componenter der er \'borte\'? -Det ku jo være...
Historien om GridBagLayout er ikke så simpel ( Layoutet iøvrigt heller ikke ;) GridbagLayout et lavet af en 3. part for at bevise at det var muligt at skrive egne layoutmanagers med de komponeneter som java tilbyder. Derefter blev GridbagLayout så at sige \'inviteret\' ind i sproget. Det er ret sprødt og anvender sig af Constraints til styring af placering.. Iøvrigt er der mange flere varianter af layout. Det er muligt at du kan finde noget som hjælper dig på Sun\'s hp. Søg på layoutmanagers mvh.
CardLayout-klassen indeholder ikke en show-metode. Jeg har kigget på Sun\'s hjemmeside og kunne ikke finde svar. Det jeg har gjort er at sætte layoutet på de forsk. panels til null : <panel>.setLauout(null); Det lykkedes at få komponenterne frem ved ikke alene at kalde setBounds-metoden på komponenterne, men også på de PANELS som komponenterne ligger i. Mit problem er nu bare at man kun ser de forsk. panels og de knapper jeg har addet til dem. Resultaterne af drawString(...) og drawImage(...) er ikke synlige som de var før jeg satte Layout til null og benyttede setBounds på komponenterne og de forsk. panels. Det tilbageværende problem er altså at klare dette! Hvis jeg kan få en løsning på dette skal jeg nok give ham der giver svaret de fulde 201 point.
//Valg af Font final Font startFont = new Font(\"SansSerif\", Font.BOLD, 22); final Font gameFont = new Font(\"SansSerif\", Font.BOLD, 12);
//Skal senere være i et Array med andre Images... Image back;
public void init() {
setBackground(Color.red); m = new Map(1); //dan instans af Map +-> Mangler:(user-input-level) m.generateMap(); //initiér Map
location = m.getStartingPoint();
setFont(startFont); setBackground(Color.black);
//knapper til gameWindow south = new Button(\"SYD\"); north = new Button(\"NORD\"); east = new Button(\"ØST\"); west = new Button(\"VEST\"); up = new Button(\"TRAPPE-OP\"); down = new Button(\"TRAPPE-NED\");
setLayout(null);
cardLayout = new CardLayout(0,0); gamePanel = new Panel(); gamePanel.setLayout(cardLayout);
Panel startWindow = new Panel(); startWindow.setBounds(0,0,604,450); startWindow.setLayout(null); startGame = new Button(\"Spil LUC-2001\"); startGame.setBounds(100,100,100,100); startWindow.add(startGame); startWindow.setBounds(0,0,604,450);
public String getDirectionInfo() { String s = \"\"; if(location.getFw() != null) s += (\"Der er en dør imod nord. \"); if(location.getBw() != null) s += (\"Der er en dør imod syd. \"); if(location.getLeft() != null) s += (\"Der er en dør imod vest. \"); if(location.getRight() != null) s += (\"Der er en dør imod øst. \"); if(location.getUp() != null) s += (\"Der er en trappe der leder op. \"); if(location.getDown() != null) s += (\"Der er en trappe der leder ned. \"); return s; }
HA - problemet har hele tiden været at de panels jeg har ligger OVENPÅ min grafik såsom billeder og tekststrenge, idet jeg anvender setLayout(null), og X.setBounds(...) - hvordan får jeg billeder og tekst til at ligge ØVERST oven på mine panels? - det er det jeg vil vide!
Hej Drop dit kald af setLayout(null). Det tømmer dine paneler. Jeg tror ikke det dækker din grafik det er bare tomt! Iøvrigt er det forkert at show ikke kan bruges (iøvrigt deprecated der sskal bruges setvisible(true) nu ) Her er udklip fra ref:
For Java.awt.Component: setVisible public void setVisible(boolean b) Shows or hides this component depending on the value of parameter b. Parameters: b - If true, shows this component; otherwise, hides this component. Since: JDK1.1 See Also: isVisible()
-------------------------------------------------- show public void show() Deprecated. As of JDK version 1.1, replaced by setVisible(boolean).
Du kan altså kalde show() men bedre setVisible(true) på enhver component, også et panel med cardlayout. mvh.
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.