Utilizando Scroll em AWT

3 respostas
Andre_Fonseca

Pessoal,

Eu preciso fazer uma coisa que procurando acho que já não é possivel, vou explicar:

Eu tenho um Frame AWT que possui um Panel e alguns List também do AWT

Eu preciso produzir um efeito de Scroll nessa tela, a qual vai preenchendo os List com valores vindos de outro lugar do meu Software

Ou seja, quando eu rodar a interface AWT ele vai preenchendo um List e o ScroolBar vai descendo passando para o usuário o efeito de Scroll

Acontece que eu tenho que fazer isso usando apenas AWT 1.3

Parece que é super facil fazer isso usando Swing e o tal do invokeLater

Achei um snippet de código que faz mais ou menos o que eu preciso (abaixo)

Minha pergunta é:
- vale a pena continuar fuçando pra ver se é possível fazer usando AWT 1.3
- digo para o meu chefe que não é possível (existe uma possibilidade de que o dispositivo onde vai rodar a aplicação tenha um java um pouquinho mais novo.. )

Qualquer ajuda é bem vinda

Obrigado, André

import java.awt.Color;
import java.awt.Frame;
import java.awt.GridBagLayout;
import java.awt.List;

public class Snippet3 extends Frame {

	private static final long serialVersionUID = 1L;
	
	private static boolean closeApplication;	
	
	public static void main (String args[]) {
		long tempoAnterior = System.currentTimeMillis();		
		
		GridBagLayout layout = new GridBagLayout();		
				
		final Snippet3 snippet = new Snippet3();
		snippet.setTitle("Lazy Table");
		snippet.setSize (200, 200);
		snippet.setBackground(new Color(255,255,255));
		snippet.setLayout(layout);
		
		final List list = new List(8,false);
		
		final Thread thread = new Thread() {
			public void run() {
				int i;				
				for (i=0; i&lt1000; i++) {
					final int [] index = new int [] {i};
					Thread thread2 = new Thread() {						
						public void run() {
							list.add("Table Item "+index[0]);
						}
					};
					thread2.start();					
				}
				snippet.add(list);
				snippet.setVisible(true);
				
				if (i==1000){
					closeApplication=true;
				}	
				
			}
		};
		
		thread.start();
		try {
			thread.join();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		
		if (closeApplication) {
			snippet.dispose();
		}
		
		long tempoPosterior = System.currentTimeMillis();
		
		System.out.println("tempo decorrido: "+(tempoPosterior - tempoAnterior));		
	}

3 Respostas

diego2005

Um ScrollPane não resolve o problema???

T+

Andre_Fonseca

Olá,

Na verdade o ScroolPane e o List tem que ficar sendo preenchidos tipo em background, e eu não tava conseguindo simular isso usando Threads, achei que no awt vc pode fazer também java.awt.EventQueue.invokeLater(Runnable)

Vou fazer uns testes aqui…

Andre_Fonseca

Olá, estou quase lá,

Só precisaria agora que o foco fosse caminhando de acordo com a lista sendo preenchida, ou seja, ele vai adicionando itens ao List e o scroll vai descendo, de tal forma que ele sempre mostre os itens "centrais" na tela…

Por exemplo, suponha que o Frame exibe 8 itens, e meu list tem 8 itens, ele vai exibir os 8 itens, se eu tiver 14 itens ele vai exibir apenas os ultimos 8 itens, ou seja, 7,8,9,10,11,12,13,14

Obrigado, André :slight_smile:

import java.awt.Color;
import java.awt.Frame;
import java.awt.GridBagLayout;
import java.awt.List;
import java.awt.ScrollPane;

/**
 * @author andre.fonseca
 *
 */
public class Snippet5 extends Frame {

	public static void main(String[] args) {
		long tempoAnterior = System.currentTimeMillis();
	
		final Snippet5 snippet = new Snippet5();
		snippet.setTitle("Lazy Table");
		snippet.setSize(200,200);
		snippet.setBackground(new Color(255,255,255));
		snippet.setLayout(new GridBagLayout());
		
		final List list = new List(10,false);
		
		final ScrollPane scrollpane = new ScrollPane(ScrollPane.SCROLLBARS_AS_NEEDED);
			
		final Thread thread = new Thread() {
			public void run() {
				int i;				
				for (i=0; i&lt100; i++) {
					final int [] index = new int [] {i};
					Thread thread2 = new Thread() {						
						public void run() {
							list.add("Table Item "+index[0]);
						}
					};
					thread2.start();										
				}
				scrollpane.add(list);
				snippet.add(scrollpane);
				snippet.setVisible(true);		 	
			}
		};
		
		thread.start();
		java.awt.EventQueue.invokeLater(thread);
		
		long tempoPosterior = System.currentTimeMillis();
		
		System.out.println("tempo decorrido: "+(tempoPosterior - tempoAnterior));
	}
}
Criado 11 de julho de 2007
Ultima resposta 11 de jul. de 2007
Respostas 3
Participantes 2