/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Layoutmanager og double buffer
Fra : Morten Green Hermans~


Dato : 17-08-01 09:19

Heya!

Jeg har behov for at 'double buffer' en java.awt.Container. Jeg skal
ikke bruge den i en GUI, men Containeren skal converteres til en
java.lang.Image, da den senere skal converteres til GIF
Se lige dette kode:

------------

import java.awt.*;
import javax.swing.*;

public class Test extends JFrame
{
public static void main(String[] args)
{
new Test();
}

public Test()
{
JPanel panel = new JPanel();
Image image;
Graphics g;
Canvas canvas;
JLabel label;

addNotify(); // Create the peer
label = new JLabel("This is a test");
panel.setSize(280, 280);
panel.setBackground(Color.green);
panel.add(label);

image = createImage(280, 280);
g = image.getGraphics();

//panel.doLayout(); (NOTE 1)
panel.paint(g); // Paint the panel in the image
//label.paint(g); (NOTE 2)

getContentPane().add(new MyCanvas(image), BorderLayout.CENTER);
pack();
setVisible(true);
}
}

class MyCanvas extends Canvas
{
public MyCanvas(Image image)
{
setSize(280, 280);
this.image = image;
}

public void paint(Graphics g)
{
g.drawImage(image, 0, 0, this);
}

private Image image;
}

----------

Når programmet kører vises en 280x280 grøn skærm. Det beviser at panelet
(som tegnes grønt) er blevet konverteret til Image'et, da kun Image'et
bliver vist (panelet bliver aldrig vist direkte). Problemet er bare at
labelen ikke kommer med. Den er ellers added til panelet.

Hvorfor er jeg nødt til selv at kalde doLayout() (Note 1) for alle
nestede paneler, samt paint() på alle componenter? (Note 2)

- Morten Green Hermansen, Fanitas


 
 
Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408928
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste