2010-02-21 6 views
4

J'ai une applet Java pour dessiner un tableau (juste un rectangle l'un après l'autre).Comment changer la taille des graphiques

Lorsque l'utilisateur sélectionne pour créer un tableau de taille n, il dessine des rectangles n connectés ensemble. Quand n devient plus grand, les graphiques deviennent plus grands, mais puisque j'utilise JPanel pour dessiner le tableau, et JPanel ne défilera pas, je dois ajouter ce JPanel dans un JScrollPane, mais toujours il ne défilera pas. L'utilisateur ne peut voir qu'une partie du tableau entier.

Quelqu'un peut-il m'aider?

Voici mon code:

public class ArrayPanel extends JPanel { 
    .... 

    public void paintComponent(Graphics g) { 
    ...draw array here.. 
    // I wish to get the updated size of the graphis here, 
    // then i can reset the preferredSize()....? 
    System.out.println("width=" + getWidth() + " height=" + getHeight()); 
    } 
} 

public class ArrayDemo extends JPanel { 
    public ArrayDemo() { 
super(new BorderLayout()); 

arrayPanel = new ArrayPanel(); 
arrayPanel.setPreferredSize(new Dimension(400, 300)); 

JScrollPane container = new JScrollPane(arrayPanel, 
     JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, 
     JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 
container.setPreferredSize(arrayPanel.getPreferredSize()); 
add(container, BorderLayout.CENTER); 
... 
    } 
} 
+0

@ohana: J'ai reformaté votre question pour une meilleure lisibilité, et votre code fourni pour éviter le défilement. N'hésitez pas à annuler mes modifications si vous n'êtes pas d'accord. –

Répondre

3

Ne réglez pas la taille en paintComponent.

Vous n'avez pas fourni ce code, mais vous avez une certaine position dans votre code où vous connaissez la taille de ce tableau, et la taille de vos rectangles, alors réglez les dimensions de votre JPanel là.

Voici un exemple (en utilisant JFrame, non Applet, mais les idées est le même) qui ressemble à ceci:

alt text http://img186.imageshack.us/img186/143/so2305419.png

public class ScrollPanelFrame extends JFrame{ 

    public ScrollPanelFrame() { 
     ArrayPanel panel = new ArrayPanel(20, 20); 
     JScrollPane container = new JScrollPane(
       panel, 
       JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, 
       JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 
     getContentPane().add(container); 
    } 

    class ArrayPanel extends JPanel { 
     final int RECTANGLE_WIDTH = 100; 
     final int RECTANGLE_HEIGHT = 100; 

     int rectangleCountX; 
     int rectangleCountY; 

     public ArrayPanel(int rectangleCountX, int rectangleCountY) { 
      this.rectangleCountX = rectangleCountX; 
      this.rectangleCountY = rectangleCountY; 
      this.setPreferredSize(new Dimension(RECTANGLE_WIDTH * rectangleCountX, 
               RECTANGLE_HEIGHT * rectangleCountY)); 
     } 

     @Override 
     public void paintComponent(Graphics g) { 
      for(int x = 0 ; x < rectangleCountX ; x++) { 
       for(int y = 0 ; y < rectangleCountY ; y++) { 
        g.setColor(new Color(0, 0, (x+y)*64 % 256)); 
        g.fillRect(x*RECTANGLE_WIDTH, y*RECTANGLE_HEIGHT, 
           RECTANGLE_WIDTH, RECTANGLE_HEIGHT); 
       } 
      } 
     } 
    } 

    public static void main(String[] args) { 
     ScrollPanelFrame frame = new ScrollPanelFrame(); 
     frame.setSize(600, 400); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.setVisible(true); 
    } 
} 
+0

Petite faute de frappe: "y <= rectangleCountX" devrait être "y <= rectangleCountY". Ne change pas la sortie du programme. –

+0

@Russ Hayward: Merci, j'ai corrigé cela. –

+0

merci, ça marche !! :) – ohana

Questions connexes