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.
Cara sou iniciante também, achei teu código um pouco confuso! Fiz um aqui pra tentar te ajudar:
publicclassJanelaextendsJFrame{// extende(herda) de JFrameJTextAreaarea;JScrollPanescrollPane;publicstaticvoidmain(String[]args){newJanela();// instancia a janela}publicJanela(){super("Janela Teste");Containerc=getContentPane();//referencia o container default p/ poder manipulá-loc.setLayout(newBorderLayout());//escolhe um layout (esse já é padrão - só pra constar)area=newJTextArea();area.setSize(150,300);area.setLineWrap(true);//quebra de linha quando atingir limite da areaarea.setFont(newFont("Serif",Font.PLAIN,20));scrollPane=newJScrollPane(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 ultimosetDefaultCloseOperation(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)
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…
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: