public minhaClasse() {
JPanel p1 = new JPanel();
JTextArea texto = new JTextArea(20, 20);
texto.setLineWrap(true);
texto.setWrapStyleWord(true);
texto.setFont(new Font("Serif", Font.ITALIC, 14));
JScrollPane barra = new JScrollPane(texto); //Adiciona Scroll no TextArea
barra.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
p1.add(barra); //Adiciona a Scroll ao painel
}
R
Rage
fabiofalci:
Isso!
Tu nao está acrescentando texto e quer que o scroll acompanhe?
…
[/code]
Kra, estranho, o append tb não está fazendo o scroll descer…
Vc está usando java 6?
[]´s
R
Rage
Kra, pois é, não sei o q está acontecendo, mas dá um erro…não sei se é pq eu mando a thread adormecer…
Os objetivos são dois: fazer o primeito botão chamar o método, e preencher a jTextarea da classe MainGui pela classe Tarefa.
Porém, nenhum dos dois acontece:
Classe da GUI:
packagetestsPack;importjava.awt.Color;importjava.awt.EventQueue;importjava.awt.Font;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;publicclassMainGuiextendsjavax.swing.JFrame{privatestaticfinallongserialVersionUID=1L;privatestaticjavax.swing.JButtonjButton1,jButton2,jButton3;privatestaticjavax.swing.JScrollPanejScrollPane1;privatestaticjavax.swing.JScrollPanejScrollPane2;publicstaticjavax.swing.JTablejTable1;publicstaticjavax.swing.JTextAreajTextArea1;publicMainGui(){initComponents();}publicstaticvoidmain(Stringargs[]){java.awt.EventQueue.invokeLater(newRunnable(){publicvoidrun(){newMainGui().setVisible(true);}});}privatevoidinitComponents(){setTitle("WebService Consulta");setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);jButton1=newjavax.swing.JButton();jButton1.setText("_Start_");jButton1.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente1){TarefaContinua.start();}});jButton2=newjavax.swing.JButton();jButton2.setText("_Stop_");jButton2.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente2){TarefaContinua.stop();}});jButton3=newjavax.swing.JButton();jButton3.setText("_Logs_");jButton3.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente3){TarefaContinua.exit();}});jScrollPane1=newjavax.swing.JScrollPane();jScrollPane2=newjavax.swing.JScrollPane();jTextArea1=newjavax.swing.JTextArea();jTextArea1.setColumns(20);jTextArea1.setRows(5);jTextArea1.setEditable(false);jTextArea1.setBackground(Color.BLACK);jTextArea1.setDisabledTextColor(Color.ORANGE);jTextArea1.setEnabled(false);jScrollPane1.setViewportView(jTextArea1);jTable1=newjavax.swing.JTable();jTable1.setEnabled(false);jTable1.setModel(newjavax.swing.table.DefaultTableModel(newObject[][]{{1,111},{2,222},{3,333},{4,444},{5,555},{6,666}},newString[]{"Status","Total"}));jScrollPane2.setViewportView(jTable1);//INICIO NAO SE PREOCUPE COM ISSO E APENAS O POSICIONAMENTO DOS //COMPONENTES GERADO AUTOMATICAMENTE PELO NETBEANSorg.jdesktop.layout.GroupLayoutlayout=neworg.jdesktop.layout.GroupLayout(getContentPane());getContentPane().setLayout(layout);layout.setHorizontalGroup(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.CENTER).add(layout.createSequentialGroup().addContainerGap().add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.CENTER).add(layout.createSequentialGroup().add(jScrollPane1,org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,460,org.jdesktop.layout.GroupLayout.PREFERRED_SIZE).addContainerGap()).add(org.jdesktop.layout.GroupLayout.TRAILING,layout.createSequentialGroup().addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED).add(jScrollPane2,org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,375,org.jdesktop.layout.GroupLayout.PREFERRED_SIZE).addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED,org.jdesktop.layout.GroupLayout.DEFAULT_SIZE,Short.MAX_VALUE).add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING).add(jButton3).add(jButton2).add(jButton1)).add(31,31,31)))));layout.setVerticalGroup(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.CENTER).add(layout.createSequentialGroup().add(19,19,19).add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING).add(layout.createSequentialGroup().add(jButton1).addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED).add(jButton2).addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED).add(jButton3)).add(jScrollPane2,0,0,Short.MAX_VALUE)).addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED).add(jScrollPane1,org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,300,org.jdesktop.layout.GroupLayout.PREFERRED_SIZE).add(15,15,15)));pack();//FIM NAO SE PREOCUPE COM ISSO E APENAS O POSICIONAMENTO DOS //COMPONENTES GERADO AUTOMATICAMENTE PELO NETBEANS}}
Quando clico no Start ele congela junto com a Thread, e depois dá o seguinte erro:
Agradeço qq ajuda pessoal, abraços!
R
RenataFA
Olá amigo!
Não sei se entendi direito, eu tenho um JList que fica dentro de um JScrollPane e tive o mesmo problema que vc. No meu caso, para resolver, criei o método abaixo. Claro que está configurado com os tamanhos para o meu caso. Veja se funciona se algo parecido consegue te ajudar:
OBS: É um JList dentro de um JScrollPane, configurado pra que apareça 8 itens antes de começar a rolagem da barra.
/** * Verifico se na lista foi excedido o número de itens que cabem na tela (8 itens). Se isso ocorrer, * faço a rolagem da barra de rolagem vertical do scroll pane que a lista está dentro. * @param lista Lista em questão * @param tamanhoArray Quantidade de elementos no array da lista * @param posicao Posição que deverá ser apresentada depois da rolagem da barra */publicvoidrolarBarraLista(JListlista,inttamanhoArray,intposicao){// se tiver até 8 itens, não preciso fazer nadaif(tamanhoArray<=8)return;JScrollPanescroll=(JScrollPane)lista.getParent().getParent();// altura que cada label ocupa dentro da lista (incluindo seu espaço entre um e outro):// altura do scroll dividido pela quantidade de labels que aparecem no viewportintalturaLabel=scroll.getHeight()/8;// medida de espaço que cada label ocupa no scroll (incluindo o espaco entre eles)// posição onde o viewport do scroll deve ficar: a altura dos labels + espaço entre eles, multiplicado// pela quantia de labels que já tem na lista (menos o label atual) + a altura entre o último label e// o label atualintposY=alturaLabel*posicao;// crio o novo ponto que será o X já existente e o novo Y calculadoPointp=newPoint((int)scroll.getViewport().getViewPosition().getX(),posY);// aplico o ponto ao scrollscroll.getViewport().setViewPosition(p);scroll.validate();}
E
eclipso
Dê uma olhada no ViewPort do JScrollPane…Você pode setar o recorte (o retângulo) que deseja ver do que está dentro do scroll setando alguns parâmetros da viewport…
V
v_vinicius_v
Vale a pena ressucitar .
Pesquisando sobre o assunto encontrei uma solução mais elegante.
Modificando o caret ( caret é o ponto de entrada do textarea , algo como o cursor ).
v_vinicius_v, a sua resposta está correta, funcionou sim, levou a scroll bar para o final do textArea, mas encontrei uma dificuldade quanto a sua velocidade, pois printei muitas coisas juntas no mesmo textArea e ele travou bastante!