Problema com JTextArea

import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class Textos {

 public JScrollPane Pagina(){
	JTextArea TXT = new JTextArea("Olá Mundo!");
	JScrollPane SCROLL = new JScrollPane(TXT);
	SCROLL.setBounds(0,0,295,121);
	
	return SCROLL;
  }
}

Tenho uma outra classe principal que adiciona SCROLL em uma janela, más ele não aparece na janela.
Quando minimizo a janela e depois maximizo novamente ela aparece normalmente.

O que pode estar acontecendo ?
Estou fazendo algo errado ?

Muito obrigado a quem puder me ajudar :slight_smile:

Quando minimizo a janela e depois maximizo novamente ela aparece normalmente.
O que?

Sua pergunta não é simplesmente: como adicionar o JScrollPane a um JTextArea?
obs: corrija os erros

public class Txt  {

   static JTextArea txa;
    static JScrollPane scroll;
    static JFrame frame;
    static JPanel painel;


    public static void listar() {
        txa = new JTextArea();
        txa.setFont(new Font("Times", Font.BOLD, 14));
        txa.setEditable(false);
        txa.append("Coloque aqui o que voce quer que apareça na textarea");
        
        scroll = new JScrollPane();
        scroll.setVerticalScrollBar(new JScrollBar());
        scroll = new JScrollPane(txa);
        scroll.setViewportView(txa);
        
        frame = new JFrame("");
        frame.setResizable(false);
        frame.getContentPane().add(scroll);
        frame.setSize(400,500); 
        frame.setDefaultCloseOperation(2);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true); 
    }

 psvm(String arguments) {
 new Instancia.listar();
}
}
1 curtida

Não o problema é que o meu JTextArea não apareçe na janela na hora da inicialização do programa entende?
Más ao clicar na janela para minimizar e depois maximizar novamente ai sim o JTextArea apareçe.

Eu não entendo o por que disso acomteçer.

Com que tamanho você definiu seu JFrame?
Tente aumentar o JFrame com o mouse, asim que você abre ele. Isso parece muito obvio. Mas acredito que so em maximizar ou minimizar não iria ter relação com o codigo

Meu JFrame tem 300,199.

Ele estava para não ser redimencionavel, Mas eu coloquei para ser redimencionavel novamente e quando movi com o mouse o JTextArea apareceu.

más eu queria que ele aparecesse ao iniciar o programa.

Defina o seu JTextArea um pouco menor que o JFrame. Pelo que percebi ele já está sendo iniciado com seu programa. Caso queria ter certeza disso, só para garantir ainda mais você pode colocar o codigo relacionado ao JFrame e o JTextArea dentro do construtor do JFrame. Digo, por ex: textArea.setSize(300,400); e frame.setSize(330,430); e outros setters.

import javax.swing.JFrame;

public class Principal extends JFrame{

public Principal(){
	
	setVisible(true);
	setSize(300,199);
	setTitle("Titulo da janela");
	setResizable(true);
	setLayout(null);
	setLocationRelativeTo(null);
	setDefaultCloseOperation(EXIT_ON_CLOSE);
	
	Textos TE = new Textos();
	add(TE.Pagina());
	
}

public static void main(String[] args) {
	
	new Principal();

}

}

De uma olhada na minha classe Principal acho que o erro pode estar nela, ou eu estou fazendo algo de maneira muito não apropriada.

Lembrando que são duas classes a Textos la em cima e essa Principal

Ta estranho. Melhor você colocar tudo em uma classe só, elas não precisam ficar separadas, já que você vai ter um JScrol, JFrame e JTextArea em uma janela apenas.


public class Frame {

   static JTextArea txa;
    static JScrollPane scroll;
    static JFrame frame;
    static JPanel painel;

    public Frame() {
    txa = new JTextArea();
    txa.setFont(new Font("Times", Font.BOLD, 14));
    txa.setEditable(false);
    txa.append("Coloque aqui o que voce quer que apareça na textarea");
    
    scroll = new JScrollPane();
    scroll.setVerticalScrollBar(new JScrollBar());
    scroll = new JScrollPane(txa);
    scroll.setViewportView(txa);
    
    frame = new JFrame("");
    frame.setResizable(false);
    frame.getContentPane().add(scroll);
    frame.setSize(400,500); 
    frame.setDefaultCloseOperation(2);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true); 
}
 public static void main (String[] args) {
 new Frame();
}
}

Para colocar as importações presione Crtl + Shift + i, caso esteja usando NetBeans

Sim eu separei em 2 classes pra não ficar muita coisa em uma classe só e me confundir.

Então eu não posso fazer dessa forma esse que é o problema ?
Por que quando eu faço tudo em uma unica classe funciona perfeitamente e separado não ?

Coloque como static Pagina().

 public static JScrollPane Pagina()

ve o que acontece

Não mudou nada, continua sem aparecer.

E o eclipse sinalizou em amarelo o

add(TE.Pagina());

The static method Pagina() from the type Textos should be accessed in a static way

Faz assim:
Tire a instancia de Textos e coloque:
add(Textos.Pagina());

Enfim, acho que isso não vai funcionar mesmo. Veja o exemplo que fiz, você não vai ficar confuso, pois você pode fazer comentarios, identação do codigo, e colocar separados o que for scroll, jframe e textarea.

A melhor forma de fazer, que eu acho é tudo dentro de uma classe só. Voce complica mais fazendo separado

Eu fiz da maneira que você pediu e continua na mesma.

O problema apareceu pq
Eu não consegui encontrar outra maneira de usar meu textarea na classe Principal sen ter que instanciar a classe Textos, por isso coloquei para retornar o SCROLL ai sim eu consegui add o scroll na minha janela que estava em outra classe.

Da maneira que vc faz tudo em uma unica classe funciona perfeitamente, más se por acaso eu quiser usar um textarea que esta em outra classe como fazer de maneira correta?
Se eu fizer a mesma coisa com um JButton ele aparece sem problemas eu já comprovei esse problema e só com o textarea.