Java 2D

gostaria de saber se tem como criar um desenho(retangulo) com um jlist dentro, usando o java 2d?

e como eu faria isso.

Certamente há, para você aprender mais sobre a “pintura” de componentes Swing recomendo o link abaixo:

http://java.sun.com/docs/books/tutorial/uiswing/painting/

Mas acho que o seu problema é mais simples, não envolveria o uso de Java2D: por que não colocar sua JList dentro um JPanel, e definir a borda desse JPanel como linhas sólidas?

é que para o que eu tenho que fazer tem q ser com java 2D. Não encontrei outra solução.

Voce pode desenhar um retangulo depois iterar na lista e desenhar cada item com o drawString.

[quote=roger_rf]Certamente há, para você aprender mais sobre a “pintura” de componentes Swing recomendo o link abaixo:

http://java.sun.com/docs/books/tutorial/uiswing/painting/

Mas acho que o seu problema é mais simples, não envolveria o uso de Java2D: por que não colocar sua JList dentro um JPanel, e definir a borda desse JPanel como linhas sólidas?[/quote]

Olá, sou novo no forúm xD
mas gostaria de tirar uma dúvida sobre o tutorial apresentado acima, mais precisamente na parte 3 do tutorial:
http://download.oracle.com/javase/tutorial/uiswing/painting/step3.html

não consigo compreender como o funciona a execução desta parte do codigo:
I

... 
   private void moveSquare(int x, int y) {
        int OFFSET = 1;
        if ((squareX!=x) || (squareY!=y)) {
            repaint(squareX,squareY,squareW+OFFSET,squareH+OFFSET);
            squareX=x;
            squareY=y;
            repaint(squareX,squareY,squareW+OFFSET,squareH+OFFSET);
        } 
    }
...

No primeiro repaint ele faz com a região delimitada pelos parametros seja atualizada, ou seja, faz o retangulo sumir dessa região. No segundo faz ele aparecer na nova região.

O que eu não compreendo é o porque disso estar funcionando…

sendo que ao meu ver essa parte deveria ser assim:
II

...
    private void moveSquare(int x, int y) {
        int OFFSET = 1;
        if ((squareX!=x) || (squareY!=y)) {
            int auxX,auxY;
            auxX = squareX;
            auxY = squareY;
            squareX=x;
            squareY=y;
            repaint(x,y,squareW+OFFSET,squareH+OFFSET);           
            repaint(auxX,auxY,squareW+OFFSET,squareH+OFFSET);
        }
    }
...

pois assim a região em que o meu segundo repaint atualiza não contem mais o retangulo.
Obs.: segundo repaint em II corresponde ao primeiro repaint do codigo I.

Desde ja agradeço.

   private void moveSquare(int x, int y) {
        int OFFSET = 1;
        if ((squareX!=x) || (squareY!=y)) {
            //Os valores de squareX e squareY ainda são o que eram
repaint(squareX,squareY,squareW+OFFSET,squareH+OFFSET);
            squareX=x;
            squareY=y;
            //Os valores de squareX e squareY agora são o que foi passado por parametro repaint(squareX,squareY,squareW+OFFSET,squareH+OFFSET);
        } 
    }

[quote=Marky.Vasconcelos] private void moveSquare(int x, int y) { int OFFSET = 1; if ((squareX!=x) || (squareY!=y)) { //Os valores de squareX e squareY ainda são o que eram repaint(squareX,squareY,squareW+OFFSET,squareH+OFFSET); squareX=x; squareY=y; //Os valores de squareX e squareY agora são o que foi passado por parametro repaint(squareX,squareY,squareW+OFFSET,squareH+OFFSET); } } [/quote]

a questão é exatamente essa já que o valor de squareX e squareY, no primeiro repaint, ainda não mudaram isso não deveria fazer com que o retangulo fosse impresso no mesmo local?? :?:

xD

Cade o métodoq ue voce realmente pinta o quadrado?

package painting;

import javax.swing.SwingUtilities;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.BorderFactory;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics; 
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseMotionAdapter; 

public class SwingPaintDemo3 {
    
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI(); 
            }
        });
    }

    private static void createAndShowGUI() {
        System.out.println("Created GUI on EDT? "+
        SwingUtilities.isEventDispatchThread());
        JFrame f = new JFrame("Swing Paint Demo");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        f.add(new MyPanel());
        f.pack();
        f.setVisible(true);
    } 
}

class MyPanel extends JPanel {

    private int squareX = 50;
    private int squareY = 50;
    private int squareW = 20;
    private int squareH = 20;

    public MyPanel() {

        setBorder(BorderFactory.createLineBorder(Color.black));
        
        addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent e) {
                moveSquare(e.getX(),e.getY());
            }
        });

        addMouseMotionListener(new MouseAdapter() {
            public void mouseDragged(MouseEvent e) {
                moveSquare(e.getX(),e.getY());
            }
        });
        
    }
    
    private void moveSquare(int x, int y) {
        int OFFSET = 1;
        if ((squareX!=x) || (squareY!=y)) {
            repaint(squareX,squareY,squareW+OFFSET,squareH+OFFSET);
            squareX=x;
            squareY=y;
            repaint(squareX,squareY,squareW+OFFSET,squareH+OFFSET);
        } 
    }
    

    public Dimension getPreferredSize() {
        return new Dimension(250,200);
    }
    
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);       
        g.drawString("This is my custom Panel!",10,20);
        g.setColor(Color.RED);
        g.fillRect(squareX,squareY,squareW,squareH);
        g.setColor(Color.BLACK);
        g.drawRect(squareX,squareY,squareW,squareH);
    }  
}