2010-11-18 3 views
2

J'ai un JPanel qui ne fait pas partie d'un JFrame. Pour diverses raisons, je dois appeler la méthode de peinture du panel à l'aide de ma propre méthode de «mise à jour».Mise en page JPanel dans l'applet

Ceci est mon code:

public void onLoad() 
{ 
    panel = new JPanel(); 
    panel.setBounds (0,0,Main.WIDTH,Main.HEIGHT); 

    panel.setLayout (new BoxLayout (panel, BoxLayout.Y_AXIS)); 

    addButton ("button1", panel); 
    addButton ("button2", panel); 
} 

private void addButton (String text, Container container) 
{ 
    JButton button = new JButton (text); 
    button.setPreferredSize (new Dimension (100,20)); 
    button.setAlignmentX (Component.CENTER_ALIGNMENT); 
    container.add (button); 
} 

public void onRender (Graphics2D g) 
{ 
    panel.paint (g); 
} 

Cela ne peint la couleur de fond du panneau. Si j'ajoute button.setBounds (...) dans la méthode addButton alors il peint les boutons mais n'est pas affecté par le BoxLayout. Je veux donc que les boutons soient affectés par le BoxLayout évidemment. Je ne suis pas très avisé sur la façon dont Swing fonctionne exactement, donc je ne suis pas sûr de savoir comment faire cela. JFrame a une méthode pack() dont je pense avoir besoin mais un équivalent pour JPanels puisque JPanels n'a pas cette méthode.

+0

Utilisez-vous la classe JApplet? Je crois que les composants Swing ne seront pas rendus correctement dans les applets ordinaires. – perp

Répondre

3

Je ne sais pas ce que vous cherchez, mais pour moi cela fonctionne bien.

import java.awt.Component; 
import java.awt.Dimension; 
import javax.swing.BoxLayout; 
import javax.swing.JApplet; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class TestApplet extends JApplet{ 
    public static void main(String[] args){ 
     new TestApplet(); 
    } 
    public TestApplet(){ 
     this.setSize(400,400); 
     this.add(getCustPanel()); 
     this.setVisible(true); 
    } 
    private JPanel getCustPanel() { 
     JPanel panel = new JPanel(); 
     panel.setLayout (new BoxLayout(panel, BoxLayout.Y_AXIS)); 
     addButton ("button1", panel); 
     addButton ("button2", panel); 
     return panel; 
    } 
    private void addButton (String text, JPanel container) 
    { 
     JButton button = new JButton (text); 
     button.setPreferredSize (new Dimension(100,20)); 
     button.setAlignmentX (Component.CENTER_ALIGNMENT); 
     container.add (button); 
    } 

} 

alt text

+0

Merci. J'essayais de peindre le panneau sans l'attacher à l'applet. Je cherchais comment le panneau "emballe" les boutons pour définir les limites correctes. Je n'ai pas pu trouver comment j'ai fait une solution de contournement dans le code pour ajouter le panneau à l'applet afin qu'il le "pack" correctement, comme dans votre exemple. – hesselbom