|
| Problemer med layoutManager Fra : Poul Christoffersen |
Dato : 19-08-01 19:33 |
|
Hej gruppe
//kode-eksempel længere nede...
Følgende har faktisk - i forskellige sammenhænge - "plaget" mig igennem
længere tid:
* En Label, en textField og en Button skal anbringes i rækkefølge på et
Panel
* Panelet sættes til FlowLayout
* Panelet anbringes på en applet der sættes til BorderLayout
Meningen er at de 3 komponeneter skal stå på linie, hvis der er plads nok,
ellers vil de automatisk
blive placeret på 2 evt. 3 linier, hvis pladsen bliver mindre (dvs
Browser-vinduet gøres mindre).
Problemet er nu flg.:
* Placeres Panelet (med de 3 komponenter) i applettens CENTER, virker det
hele bare helt perfekt.
* Men jeg skal også kunne placere disse paneler i NORTH, SOUTH osv., og
så går det galt:
komponeneterne omplaceres ikke men skæres af!
Dette er selvfølgelig ikke acceptabelt!
(i eksemplet nedenfor virker det fint med Panel p5 men ikke p3, - prøv selv)
Jeg har på fornemmelsen at det jeg forsøger på slet ikke kan gøres sådan som
jeg beskriver, - men hvad
gør man så?
Venlig hilsen
Poul Christoffersen
// ------------- KODE START--------------------------
import java.io.*;
import java.awt.*;
import java.applet.*;
public class layoutTest extends Applet {
Font f= new Font("TimesRoman",Font.BOLD,16);
Button b1;
Label l1;
TextField input;
Panel p1,p2,p3,p4,p5;
public void init() {
setLayout(new BorderLayout());
p1 = new Panel(new FlowLayout()); p1.setBackground(Color.yellow);
add(p1,BorderLayout.NORTH);
p2 = new Panel(new FlowLayout()); p2.setBackground(Color.red);
add(p2,BorderLayout.SOUTH);
p3 = new Panel(new FlowLayout()); p3.setBackground(Color.green);
add(p3,BorderLayout.EAST);
p4 = new Panel(new FlowLayout()); p4.setBackground(Color.blue);
add(p4,BorderLayout.WEST);
p5 = new Panel(new FlowLayout()); p5.setBackground(Color.lightGray);
add(p5,BorderLayout.CENTER);
input = new TextField("InputFelt",6);
b1 = new Button("Knap 1");
l1 = new Label("Dette er en label");
/* prøv at skifte mellem p3 og p5 */
// p5.add(l1); p5.add(input); p5.add(b1);
p3.add(l1); p3.add(input); p3.add(b1);
}
public void paint(Graphics g) {
g.setFont(f);
g.setColor(Color.blue);
g.drawString("Test grafisk Panel",100,35);
}
}
// ------------- KODE SLUT--------------------------
| |
The MaXx (19-08-2001)
| Kommentar Fra : The MaXx |
Dato : 19-08-01 22:05 |
|
> * Placeres Panelet (med de 3 komponenter) i applettens CENTER, virker
det
> hele bare helt perfekt.
> * Men jeg skal også kunne placere disse paneler i NORTH, SOUTH osv., og
> så går det galt:
Davs Poul.
Problemet er at BorderLayout er lavet sådan at den resizer CENTER til at
udfylde pladsen der er "til overs" fra de fire andre områder. Mens den vil
prøver at give alt restpladsen til CENTER, begynder den at croppe de andre
områder hvis den ikke har plads nok.
Jeg har ikke lige nogen ideer til dig om hvordan du løser det, men det kan
være du kan komme lidt videre med det nu....
The MaXx
| |
Poul Christoffersen (20-08-2001)
| Kommentar Fra : Poul Christoffersen |
Dato : 20-08-01 06:42 |
|
Hej
The MaXx skrev:
> Jeg har ikke lige nogen ideer til dig om hvordan du løser det, men det kan
> være du kan komme lidt videre med det nu....
>
Ja, for nu behøver jeg jo ikke at spilde mere tid på at finde en løsning af
den vej som jeg beskrev i mit første brev, - så:
- mange tak for svaret.
Jeg hører stadig gerne fra nogle, der måtte have en løsning til dette -
egentlig ret generelle - layoutproblem.
Venlig hilsen
Poul Christoffersen.
| |
Filip Larsen (20-08-2001)
| Kommentar Fra : Filip Larsen |
Dato : 20-08-01 07:38 |
|
Poul Christoffersen skrev
> Jeg hører stadig gerne fra nogle, der måtte have en løsning til dette -
> egentlig ret generelle - layoutproblem.
Måske du kan bruge en GridBagLayout til at "simulere" en BorderLayout uden
klipning?
Mvh,
--
Filip Larsen <filip.larsen@mail.dk>
| |
Ulrik Magnusson (20-08-2001)
| Kommentar Fra : Ulrik Magnusson |
Dato : 20-08-01 18:39 |
|
Poul Christoffersen wrote:
> * En Label, en textField og en Button skal anbringes i rækkefølge på et
> Panel
> * Panelet sættes til FlowLayout
> * Panelet anbringes på en applet der sættes til BorderLayout
>
> Meningen er at de 3 komponeneter skal stå på linie, hvis der er plads nok,
> ellers vil de automatisk
> blive placeret på 2 evt. 3 linier, hvis pladsen bliver mindre (dvs
> Browser-vinduet gøres mindre).
Følgende er hentet fra dokumentationen til java.awt.BorderLayout i
JDK 1.2.2:
"The components are laid out according to their preferred sizes and
the constraints of the container's size. The NORTH and SOUTH
components may be stretched horizontally; the EAST and WEST
components may be stretched vertically; the CENTER component
may stretch both horizontally and vertically to fill any space left over. "
Som jeg læser ovenstående kan EAST og WEST ikke kan 'strækkes'
(eller sammentrækkes) horisontalt og deres bredde er derfor statisk.
Jeg har ikke umiddelbart noget pænt bud på en løsning..
Ulrik Magnusson
| |
|
|