JScrollPane + Drawning Area

Bom minha duvida eh o seguinte, como eu faço para que as scroll bar apareçam quando eu usar o java2d e por exemplo desenhei uma linha de tamanho 380 e minha scroll fica numa area de tamanho 200, como faço para as scroll aparecerem ?
O que ta acontecendo comigo é que o java desenha e vai embora mas as scroll nao aparecem D:

Ja defini algumas propriedades ditas por alguns em outros tópicos mas mesmo assim não foi…

Você tem que aumentar a dimensão do que seja lá o que estiver dentro do scrollpane. Num adianta você criar uma linha maior que o componente se você num aumentar o componente junto.

Poste o código onde você cria ojscroopane e onde vocẽ insere sua área de desenho nele.

Desculpa a demora

Eis meu código main
http://pastebin.com/n8zwtaim

classe complementar que efetua os desenhos e é o JPanel
http://pastebin.com/agpaG6SH

Desculpa pela falta de experiencia, não sabia que parte colocar D:, um pouco é pelo nervosismo

Da um help ae por favor

Basicamente, o que você tem que fazer é alterar o preferredSize do componente que está dentro do JScrollPane (no seu caso, creio que seja um objeto Painting, que estende JPanel).

Algo assim:

// este código pode estar dentro do componente Painting, e um método chamado redimensionarPainel, por exemplo
(...)
maxx = 1024; // obviamente, aqui você coloca os valores que precisa
maxy = 768;  // para as dimensões x e y do seu painel
Dimension area = new Dimension(maxx, maxy);

this.setPreferredSize(area);
(...)

Abraço.

Não resolveu, ele não aparece o Scroll, não sei se altera o tamanho mas o scroll nao está aparecendo.

Basicamente eu quero que ele atualize a cada elemento que eu inserir, aumentando o tamanho em 100pixels, e diminuindo em 100pixels caso eu remova…

    public void insertStart(String valor){
        list.add(0, valor);
        dx += 100;
    }

    public void setSizePane(){
        Dimension size = new Dimension(dx, dy);
        this.setPreferredSize(size);
    }

fiz dessa forma e toda vez que eu acionar o evento no JFrame ele executa o insertStart() depois o setSizePane() e por ultimo o repaint();
mesmo assim ele não está alterando o tamanho da Panel e se está o scroll nao está aparecendo e eu setei que ele aparecesse quando a tela fosse maior que o tamanho dele mesmo…

Uma coisa que deixei de fora: o revalidate(). Veja:

public void insertStart(String valor){ list.add(0, valor); this.setPreferredSize(new Dimension(this.getWidth() + 100, this.getHeight())); this.revalidate(); }

Testando rapidamente aqui, resolveu. Não sei se há alguma implicação de usá-lo.

Abraço.

Deu esse problema ae cara…

fiz como vc falou adicionei um Dimension e um revalidate(); sempre no final de cada parametro…

Estranho. Aqui não dá esse problema.

De qualquer modo, fiz algumas alterações. Adicionei um @Override, mudei a assinatura para protected em vez de public e mudei a chamada a super do paintComponent. Note que paintComponent é diferente de paintComponents (note o “s” no final). Isso faz toda a diferença, pois são métodos de pais diferentes: um pertence ao java.swing.JComponent, outro ao java.awt.Container. Todos os exemplos que já vi de desenho nesse estilo sempre sobrescrever o paintComponent do java.swing.JComponent. Por causa dessa alteração, foi necessário adicionar um construtor à classe, só para mudar o fundo para branco (tire esse construtor e veja o que acontece). Veja:

[code]import java.awt.Graphics;
import java.awt.Color;
import java.util.ArrayList;
import javax.swing.JPanel;
import java.awt.Dimension;

public class Painting extends JPanel{

private int count_paint;
private int x1 = 10,x2 = 95,y1,y2;
ArrayList list = new ArrayList();

// construtor só pra mudar a cor do painel
public Painting(){
	this.setBackground(Color.WHITE);
}

@Override
protected void paintComponent(Graphics g){
    super.paintComponent(g);

    g.setColor(Color.BLACK);
    g.drawRect(10, 30, 75, 46);
    g.drawLine(70, 30, 70, 76);

    g.setColor(Color.BLUE);
    g.drawString("HEAD", 28, 58);
    if(!list.isEmpty()){
        for(int i = 0; i < list.size(); i++){
            g.setColor(Color.BLACK);
            g.drawLine((75+(x2*(i))), 53, (10+(x2*(i+1))), 53);
            g.drawRect((10+(x2*(i+1))), 30, 75, 46);
            g.drawLine((70+(x2*(i+1))), 30, (70+(x2*(i+1))), 76);
            g.setColor(Color.BLUE);
            g.drawString(""+list.get(i)+"", (28+(x2*(i+1))), 58);
        }    
    }
}
public void insertStart(String valor){
    list.add(0, valor);
    this.setPreferredSize(new Dimension(this.getWidth() + 100, this.getHeight()));
    this.revalidate();
}

public void removeStart(){
    if(list.isEmpty()){
        javax.swing.JOptionPane.showMessageDialog(null, "Nenhum NÓ inserido...");
        return;
    }
    list.remove(0);
    this.setPreferredSize(new Dimension(this.getWidth()-100, this.getHeight()));
    this.revalidate();
}

public void insertEnd(String valor){
    list.add(valor);
    this.setPreferredSize(new Dimension(this.getWidth()+100, this.getHeight()));
    this.revalidate();
}

public void removeEnd(){
    if(list.isEmpty()){
        javax.swing.JOptionPane.showMessageDialog(null, "Nenhum NÓ inserido...");
        return;
    }
    list.remove(list.size()-1);
    this.setPreferredSize(new Dimension(this.getWidth()-100, this.getHeight()));
    this.revalidate();
}

public String valueStartRemove(){
    String txt = String.valueOf(list.get(0));
    return txt;
}

public String valueEndRemove(){
    String txt = String.valueOf(list.get(list.size()-1));
    return txt;
}

}[/code]

Abraço.

Funcionou perfeitamente, só que, ele da um erro satânico e imenso no monitor, mas nenhum deles apontam para as minhas classes…
Vou postar a classe novamente com o erro…

http://pastebin.com/2hNSVBwi MainClass
http://pastebin.com/NefZ8kQ1 Painting

Posta a mensagem de erro aqui. Pra mim, seus códigos compilam e rodam normal. Aproveitando, use a tag code e poste os códigos aqui no fórum mesmo. É melhor do que ter que ficar abrindo eles nesse Pastebin.

Abraço.

uma outra coisa que você pode fazer também mano é definir um gerenciador de layout pro Jsroll pane, considerando que é só um jpanel que tu vai botar, pode usar o borderlayout ou o flow layout

@TerraSkilll
Descobri o motivo do erro monstruoso que estava aparecendo no meu console, eh um erro de Look and Feel. Eu estava usando o Windows 8 - CP no meu notebook e por esse motivo estava dando “tilt” assim por dizer, mas nada que atrapalhou o funcionamento do programinha, no Windows 7 ele rodou normal sem dar erro algum. O motivo que me levou a usar o pastebin.com foi único, manter o post limpo de poluição, se eu postasse o código iria ficar imensamente grande, e não há opção de SHOW/HIDE também conhecido como SPOILER aqui no GUJ.

Bom queria agradecer pela ajuda, muito obrigado. [color=white](Dúvida Resolvida, tópico encerrado…)[/color]

=\ Olha eu aqui novamente…
Programa começou a dar um erro e meu professor meio que não aceitou aceitando o meu trabalho se alguém puder me dar um luz.

Eis o erro

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.DebugGraphics cannot be cast to java.awt.Graphics2D at com.sun.java.swing.plaf.windows.AnimationController$AnimationState.paintSkin(AnimationController.java:383) at com.sun.java.swing.plaf.windows.AnimationController.paintSkin(AnimationController.java:251) at com.sun.java.swing.plaf.windows.XPStyle$Skin.paintSkin(XPStyle.java:589) at com.sun.java.swing.plaf.windows.WindowsScrollBarUI.paintThumb(WindowsScrollBarUI.java:193) at javax.swing.plaf.basic.BasicScrollBarUI.paint(BasicScrollBarUI.java:429) at javax.swing.plaf.ComponentUI.update(ComponentUI.java:161) at javax.swing.JComponent.paintComponent(JComponent.java:778) at javax.swing.JComponent.paint(JComponent.java:1054) at javax.swing.JComponent.paintToOffscreen(JComponent.java:5221) at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1482) at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1413) at javax.swing.RepaintManager.paint(RepaintManager.java:1206) at javax.swing.JComponent._paintImmediately(JComponent.java:5169) at javax.swing.JComponent.paintImmediately(JComponent.java:4980) at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:770) at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:728) at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:677) at javax.swing.RepaintManager.access$700(RepaintManager.java:59) at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1621) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705) at java.awt.EventQueue.access$000(EventQueue.java:101) at java.awt.EventQueue$3.run(EventQueue.java:666) at java.awt.EventQueue$3.run(EventQueue.java:664) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:675) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Você em algum momento chamou seuComponente.setDebugGraphics(true) ou setDebugGraphicsOptions?
O problema é que o DebugGraphics, que passa a ser passado como parâmetro nos métodos de pintura, não é filho de Graphics2D, só de Graphics, por isso, seu cast não funciona.

Isso já está descrito até no bug database, veja:
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4262543

Simplesmente remova as linhas que habilitam o DebugGraphics.
Seu programa, além de mais rápido, vai funcionar corretamente.