Não consigo adicionar barra de rolagem em uma JTextArea

10 respostas
brunoties

Olá Pessoal,

me desculpem pelo tópico repetido, é que infelizmente, mesmo sendo um tópico repetido eu não consegui adaptar os exemplos ao meu cenário…
Quando mando compilar, a textArea fica desalinhada com o JScrollPane e claro, a barra não funciona.
Segue parte código que estou tendo escrever:

janela = new JFrame("Teste");
        janela.setVisible(true);
        janela.setSize(800, 600);
        janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        janela.setLayout(null);

JTextArea area = new JTextArea();
        area.setSize(150, 300);
        area.setLocation(10, 50);
        area.setFont(new Font("sans serif", Font.PLAIN,20));

        JScrollPane barra = new JScrollPane(area,
                ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
                ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        barra.setViewportView(area);
        barra.setSize(150, 400);
        barra.setLocation(10, 50);
        barra.setVisible(true);

        janela.add(area);

        janela.add(barra);

Já tentei uma série de variações mas não consegui.

poderiam me ajudar, por favor?

10 Respostas

FernandoKozlov

Cara sou iniciante também, achei teu código um pouco confuso! Fiz um aqui pra tentar te ajudar:

public class Janela extends JFrame { // extende(herda) de JFrame

	JTextArea area;
	JScrollPane scrollPane;
	
	public static void main(String[] args) {
		
		new Janela(); // instancia a janela
	}
	
	public Janela() {
		super("Janela Teste");
		Container c = getContentPane(); //referencia o container default p/ poder manipulá-lo
		c.setLayout(new BorderLayout()); //escolhe um layout (esse já é padrão - só pra constar)
		
		area = new JTextArea();
		
		area.setSize(150, 300);
		area.setLineWrap(true); //quebra de linha quando atingir limite da area
		area.setFont(new Font("Serif", Font.PLAIN, 20));
		
		scrollPane = new JScrollPane(area); // passa a view no construtor 
		
		c.add(BorderLayout.WEST, scrollPane); // aqui vc fala a posição no layout
		
		
		//configurações do frame geralmente vem por ultimo
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(800, 600);
		setLocationRelativeTo(null);
		setVisible(true);
	}
	

}

Qualquer duvida só falar! :D

brunoties

Fernando, obrigado pela paciência e parabéns pela excelente didática.

Desculpe pela bagunça do código, vou tentar colocar mais detalhes.

Um dos problemas, é que isso se trata de um exercício da faculdade, e estou apanhando mais, pelo Professor ter proibido usar layout, todos os componentes devem ser posicionados manualmente no frame, usando setBounds.

Uma das minhas dúvidas, é se tem como usar o JScrollPane sem container, ou com o layout do frame e do container com setLayout(null)

FernandoKozlov

Valeu pelo elogio…

Tô olhando a documentação aqui: http://docs.oracle.com/javase/7/docs/api/javax/swing/JFrame.html

Lá fala assim:
Like all other JFC/Swing top-level containers, a JFrame contains a JRootPane as its only child. The content pane provided by the root pane should, as a rule, contain all the non-menu components displayed by the JFrame. This is different from the AWT Frame case. As a conveniance add and its variants, remove and setLayout have been overridden to forward to the contentPane as necessary.

Coloquei em negrito a parte que diz que o container que é fornecido pelo frame deve, como regra, conter todos os componentes que serão mostrado no frame, exceto os menus…

Não tenho certeza de como vc pode fazer esse trampo da faculdade… espero que alguém mais experiente possa te ajudar… :frowning:

ViniGodoy

Ou pare de usar Layout Null e aprenda sobre layout managers.

Caso contrário, nada garante que esses componentes estarão alinhados em outras plataformas…

brunoties

Mais uma vez muito obrigado Fernando, pela ajuda.

Agradeço também ao ViniGodoy, pela orientação. Vou pesquisar sobre isso.

Vou fazer uns testes aqui e cloco o resultado…

brunoties

Eu estava também, com outra dificuldade, preciso que o usuário possa escolher uma linha de uma textArea e mande-a para outra textArea e vice versa… São os dois problemas que estou aqui…
Esse é até mais importante que o da barra de rolagem.

Ironlynx

Isso não é problema.Só implementar um DocumentListener e no método insertUpdate fazer a transferência.

Seu professor proibiu de usar layout???Que pérola… :roll:

brunoties

Pois é Ironlynx, estou apanhando para colocar a scrollbar na textarea, já estou quase desistindo…

Vou partir para a sua dica… vou pesquisar sobre como implementar o que você falou… Obrigado pela dica…

brunoties

Olá Pessoal, consegui fazer todas as funcionalidades de um jogo de baralho de cartas…

Só não consegui, de jeito nenhum, foi colocar a bendita barra de rolagem na textarea. Lembrando que não estou usando container e o layout da frame esta como null;

As textarea estao posicionadas como no exemplo abaixo:

txaBaralho = new JTextArea();
        txaBaralho.setSize(200, 490);
        txaBaralho.setLocation(20, 50);
        txaBaralho.setFont(new Font("sans serif", Font.PLAIN, 20));
        txaBaralho.setText(baralho.toString());
        this.add(txaBaralho);

E as propriedades do frame estao assim:

super("Jogo de Cartas");
        this.setVisible(true);
        this.setSize(960, 720);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLayout(null);

Tentei

Alguém poderia me dar um exemplo?

brunoties

Eu sou bem iniciante, no java e mais ainda no java swing, se eu você usar layouts pré-definidos no swing, eu tinha pensado da seguinte forma:

Um container principal em flow layout,

Mais 3 containers, um esquerdo, um central e um direito em border layout, que acomodariam minhas 3 partes da janela.

O que acham? como eu posso mostrar um print da tela pelo fórum aqui?

Criado 1 de outubro de 2012
Ultima resposta 3 de out. de 2012
Respostas 10
Participantes 4