Barra de rolagem em uma JPanel

2 respostas
K

Galera, me ajudem com um problema que está rolando aqui no meu código. Eu tento colocar uma JScrollPanel() na minha JPanel, porém, a barra de rolagem não aparece. Detalhe eu fiz a mesma coisa em componente menores da minha tela, e deu certo, soh na hora que colocar a scroll no componente maior que ele fica com um Bug. Segue abaixo o meu código

As partes do código que estão comentadas é o código com a scroll. Eu deixei ela sem a scrolls pra vcs verem a tela...

Eu queria colocar uma scroll no corpo da tela, pra que caso haja mais mensagens nela (ali soh tem 3 mensagens) quebrasse a barra de rolagem.

package ManterTopicos;
//pacote necessário para utilizar a classe
//JButton
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.Rectangle;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.border.Border;
public class layoutTopicosMensagens extends JFrame{
	private JFrame mainFrame;
	private Container quadro;
    private JPanel quadroTitulo;
    private JPanel quadroTituloCorpo;
    private JPanel fundoUsu;
    private JPanel quadroCorpoUsuario;
    private JPanel quadroCorpoUsuario2;
    private JPanel quadroCorpoUsuario3;
    private JPanel quadroNomeUsuario;
    private JPanel quadroNomeUsuario2;
    private JPanel quadroNomeUsuario3;
    private JPanel quadroRodape;
    private JPanel fundoUsu2;
    private JPanel fundoUsu3;
    private JLabel titulo;
	private JLabel tituloUsuario;
    private JLabel tituloMsg;
    private JLabel nomeUsu;
    private JLabel nomeUsu2;
    private JLabel nomeUsu3;
    private JLabel tipoUsu;
    private JLabel tipoUsu2;
    private JLabel tipoUsu3;
    private JTextArea textCorpoUsuario;
    private JTextArea textCorpoUsuario2;
    private JTextArea textCorpoUsuario3;
    private JScrollPane barraRolagemCaixaMsg;
    private JScrollPane barraRolagemCaixaMsg2;
    private JScrollPane barraRolagemCaixaMsg3;
    private JScrollPane mainScroll;
    private JButton btExcluir;
    private JTable tabela;
  
   
    
    //método construtor                
    public layoutTopicosMensagens(){
        
    	//Instancia um objeto JFrame
        JFrame mainFrame = new JFrame("Projeto de LTP - IV");
        mainFrame.setLayout(null);
        mainFrame.setBounds(0,0 , 820, 600);
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //adiciona um conteiner
        quadro =  mainFrame.getContentPane();
        
      //MENUS DA BARRA SUPERIOR
        JMenuBar menuSuperior = new JMenuBar();
        JMenu menuOpcoes = new JMenu("Opções");
        menuSuperior.add(menuOpcoes);
        setJMenuBar(menuSuperior);    	
        //TITULO
        quadroTitulo = new JPanel();
        quadroTitulo.setBackground(Color.WHITE);
        
        
        //INSERE UM TITULO NO QUADRO DO TITULO
        titulo = new JLabel("Mensagens");
        titulo.setFont(new Font("Chiller", Font.BOLD,30));
        quadroTitulo.setBounds(5, 10, 795, 40);
        quadroTitulo.add(titulo);
        quadro.add(quadroTitulo);
        
        // FUNDO DOS TITULOS DO CORPO DA MENSAGEM
        quadroTituloCorpo = new JPanel();
        quadroTituloCorpo.setLayout(null);
        Rectangle retanguloTituloCorpo = new Rectangle();
        retanguloTituloCorpo.setLocation(0, 60);
        retanguloTituloCorpo.setSize(800, 30);
        quadroTituloCorpo.setBounds(retanguloTituloCorpo);
        quadroTituloCorpo.setBackground(Color.GRAY);
        
       // TITULOS DO CORPO DA MENSAGEM
        tituloUsuario = new JLabel("Usuario");
        tituloUsuario.setFont(new Font("Verdana",Font.BOLD,12));
        tituloUsuario.setForeground(Color.WHITE);
        tituloUsuario.setLayout(null);
        tituloUsuario.setBounds(80, 0, 150, 20);
        quadroTituloCorpo.add(tituloUsuario);
        
        tituloMsg = new JLabel("Mensagens");
        tituloMsg.setFont(new Font("Verdana",Font.BOLD,12));
        tituloMsg.setForeground(Color.WHITE);
        tituloMsg.setLayout(null);
        tituloMsg.setBounds(450, 0, 150, 20);
        quadroTituloCorpo.add(tituloMsg);
        
        quadro.add(quadroTituloCorpo);
        
//-------------------------------------------------------------------------------//
        
        //CORPO DO FÓRUM
 
        
        JPanel quadroCorpo = new JPanel();
        quadroCorpo.setLayout(null);
        quadroCorpo.getAutoscrolls();
        Rectangle retanguloCorpo = new Rectangle();
        retanguloCorpo.setLocation(0,100);
        retanguloCorpo.setSize(800, 400);
        quadroCorpo.setBackground(Color.WHITE);
        Border bordaCorpo = BorderFactory.createLineBorder(Color.BLACK); 
        quadroCorpo.setBounds(retanguloCorpo);
        quadroCorpo.setBorder(bordaCorpo);
        /*         
	        mainScroll = new JScrollPane(quadroCorpo);
	        mainScroll.setBounds(retanguloCorpo);
	        mainScroll.setBorder(bordaCorpo);
        */
        
       
//-----------------------------------------------------------------------------//        
        //INSERE O FUNDO QUE DEFINE CADA USUARIO
        
        fundoUsu = new JPanel();
        fundoUsu.setLayout(null);
        fundoUsu.setLocation(10,10);
        fundoUsu.setSize(780,130);
        fundoUsu.setBackground(Color.LIGHT_GRAY);
        Border bordaFundoUsu = BorderFactory.createLineBorder(Color.BLACK); 
        fundoUsu.setBorder(bordaFundoUsu);
       
        //INSERE O FUNDO DO NOME DO USUARIO QUE ENVIOU A MENSAGEM
        quadroNomeUsuario = new JPanel();
        quadroNomeUsuario.setLayout(null);
        quadroNomeUsuario.setLocation(20,10);
        quadroNomeUsuario.setSize(200,50);
        quadroNomeUsuario.setBackground(Color.GRAY);
        Border bordaQuadroNomeUsuario = BorderFactory.createLineBorder(Color.BLACK); 
        quadroNomeUsuario.setBorder(bordaQuadroNomeUsuario);
        fundoUsu.add(quadroNomeUsuario);
        
      //INSERE O NOME DO USUARIO QUE ENVIOU A MENSAGEM
        nomeUsu = new JLabel("Frederico");
        nomeUsu.setLayout(null);
        nomeUsu.setFont(new Font("Verdana",Font.CENTER_BASELINE,15));
        nomeUsu.setForeground(Color.WHITE);
        nomeUsu.setBounds(60, 5, 200, 20);
        quadroNomeUsuario.add(nomeUsu);
        
      // INSERE O TIPO DO USUARIO QUE ENVIOU A MENSAGEM
      
        tipoUsu = new JLabel("Professor");
        tipoUsu.setLayout(null);
        tipoUsu.setFont(new Font("Verdana",Font.CENTER_BASELINE,10));
        tipoUsu.setForeground(Color.WHITE);
        tipoUsu.setBounds(80, 25, 200, 20);
        quadroNomeUsuario.add(tipoUsu);
        
      //INSERE O FUNDO DO CORPO DA MENSAGEM
        
        quadroCorpoUsuario = new JPanel();
        textCorpoUsuario = new JTextArea();
        textCorpoUsuario.setLayout(null);
        textCorpoUsuario.setLineWrap(true);
        textCorpoUsuario.setWrapStyleWord(true);
        textCorpoUsuario.setEditable(false);
        textCorpoUsuario.setBackground(Color.GRAY);
        Border bordaQuadroCorpoUsuario = BorderFactory.createLineBorder(Color.WHITE); 
        textCorpoUsuario.setBorder(bordaQuadroCorpoUsuario);
        textCorpoUsuario.setText("blablablablablablablablablablablablablablablabla" +
        "blablablablablablablablablablablablablablablablablablablablablablablablablablabla" +
        "blablablablablablablablablablablablablablablablablablablablablablablablablabla" +
        "blablablablablablablablablablablablablablablablablablablablablablablablabla" +
        "blablablablablablablablablablablablablablablablablablablablablablablablablabla" +
        "blablablablablablablablablablablablablablablablablablablablablablablablabla" +
        "blablablablablablablablablablablablablablablablablablablablablablabla");
        textCorpoUsuario.setForeground(Color.WHITE);
        textCorpoUsuario.setLocation(240,10);
        textCorpoUsuario.setSize(500,100);
        quadroCorpoUsuario.add(textCorpoUsuario);
        quadroCorpoUsuario.setBackground(Color.GRAY);
        barraRolagemCaixaMsg = new JScrollPane(quadroCorpoUsuario);
        barraRolagemCaixaMsg.setLocation(240,10);
        barraRolagemCaixaMsg.setSize(500,100);
         
        fundoUsu.add(barraRolagemCaixaMsg);
        
        quadroCorpo.add(fundoUsu);
      //mainScroll.add(fundoUsu);
/*##################### SEGUNDA MENSAGEM ###############################*/     
        
        //INSERE O FUNDO QUE DEFINE CADA USUARIO
        
        fundoUsu2 = new JPanel();
        fundoUsu2.setLayout(null);
        fundoUsu2.setLocation(10,150);
        fundoUsu2.setSize(780,130);
        fundoUsu2.setBackground(Color.LIGHT_GRAY);
        Border bordaFundoUsu2 = BorderFactory.createLineBorder(Color.BLACK); 
        fundoUsu2.setBorder(bordaFundoUsu2);

        //INSERE O FUNDO DO NOME DO USUARIO QUE ENVIOU A MENSAGEM
        quadroNomeUsuario2 = new JPanel();
        quadroNomeUsuario2.setLayout(null);
        quadroNomeUsuario2.setLocation(20,10);
        quadroNomeUsuario2.setSize(200,50);
        quadroNomeUsuario2.setBackground(Color.GRAY);
        Border bordaQuadroNomeUsuario2 = BorderFactory.createLineBorder(Color.BLACK); 
        quadroNomeUsuario2.setBorder(bordaQuadroNomeUsuario2);
        fundoUsu2.add(quadroNomeUsuario2);
        
      //INSERE O NOME DO USUARIO QUE ENVIOU A MENSAGEM
        nomeUsu2 = new JLabel("Diego Gay");
        nomeUsu2.setLayout(null);
        nomeUsu2.setFont(new Font("Verdana",Font.CENTER_BASELINE,15));
        nomeUsu2.setForeground(Color.WHITE);
        nomeUsu2.setBounds(60, 5, 200, 20);
        quadroNomeUsuario2.add(nomeUsu2);
        
      // INSERE O TIPO DO USUARIO QUE ENVIOU A MENSAGEM
      
        tipoUsu2 = new JLabel("Aluno");
        tipoUsu2.setLayout(null);
        tipoUsu2.setFont(new Font("Verdana",Font.CENTER_BASELINE,10));
        tipoUsu2.setForeground(Color.WHITE);
        tipoUsu2.setBounds(80, 25, 200, 20);
        quadroNomeUsuario2.add(tipoUsu2);
        
 //INSERE O FUNDO DO CORPO DA MENSAGEM
       
        quadroCorpoUsuario2 = new JPanel();
        textCorpoUsuario2 = new JTextArea();
        textCorpoUsuario2.setLayout(null);
        textCorpoUsuario2.setLineWrap(true);
        textCorpoUsuario2.setWrapStyleWord(true);
        textCorpoUsuario2.setEditable(false);
        textCorpoUsuario2.setBackground(Color.GRAY);
        Border bordaQuadroCorpoUsuario2 = BorderFactory.createLineBorder(Color.WHITE); 
        textCorpoUsuario2.setBorder(bordaQuadroCorpoUsuario2);
        textCorpoUsuario2.setText("blablablablablablablablablablablablablablablabla" +
        "blablablablablablablablablablablablablablablablablablablablablablablablablablabla" +
        "blablablablablablablablablablablablablablablablablablablablablablablablablabla" +
        "blablablablablablablablablablablablablablablablablablablablablablablablabla" +
        "blablablablablablablablablablablablablablablablablablablablablablablablablabla" +
        "blablablablablablablablablablablablablablablablablablablablablablablablabla" +
        "blablablablablablablablablablablablablablablablablablablablablablabla");
        textCorpoUsuario2.setForeground(Color.WHITE);
        textCorpoUsuario2.setLocation(240,10);
        textCorpoUsuario2.setSize(500,100);
        quadroCorpoUsuario2.add(textCorpoUsuario2);
        quadroCorpoUsuario2.setBackground(Color.GRAY);
        barraRolagemCaixaMsg2 = new JScrollPane(quadroCorpoUsuario2);
        barraRolagemCaixaMsg2.setLocation(240,10);
        barraRolagemCaixaMsg2.setSize(500,100);
         
        fundoUsu2.add(barraRolagemCaixaMsg2);
   
        quadroCorpo.add(fundoUsu2);
      //mainScroll.add(fundoUsu2);
        
//################## Terceira Mensagem ####################################//        
        
//INSERE O FUNDO QUE DEFINE CADA USUARIO
        
        fundoUsu3 = new JPanel();
        fundoUsu3.setLayout(null);
        fundoUsu3.setLocation(10,290);
        fundoUsu3.setSize(780,130);
        fundoUsu3.setBackground(Color.LIGHT_GRAY);
        Border bordaFundoUsu3 = BorderFactory.createLineBorder(Color.BLACK); 
        fundoUsu3.setBorder(bordaFundoUsu3);
       
        //INSERE O FUNDO DO NOME DO USUARIO QUE ENVIOU A MENSAGEM
        quadroNomeUsuario3 = new JPanel();
        quadroNomeUsuario3.setLayout(null);
        quadroNomeUsuario3.setLocation(20,10);
        quadroNomeUsuario3.setSize(200,50);
        quadroNomeUsuario3.setBackground(Color.GRAY);
        Border bordaQuadroNomeUsuario3 = BorderFactory.createLineBorder(Color.BLACK); 
        quadroNomeUsuario3.setBorder(bordaQuadroNomeUsuario3);
        fundoUsu3.add(quadroNomeUsuario3);
        
      //INSERE O NOME DO USUARIO QUE ENVIOU A MENSAGEM
        nomeUsu3 = new JLabel("Frederico");
        nomeUsu3.setLayout(null);
        nomeUsu3.setFont(new Font("Verdana",Font.CENTER_BASELINE,15));
        nomeUsu3.setForeground(Color.WHITE);
        nomeUsu3.setBounds(60, 5, 200, 20);
        quadroNomeUsuario3.add(nomeUsu3);
        
      // INSERE O TIPO DO USUARIO QUE ENVIOU A MENSAGEM
      
        tipoUsu3 = new JLabel("Professor");
        tipoUsu3.setLayout(null);
        tipoUsu3.setFont(new Font("Verdana",Font.CENTER_BASELINE,10));
        tipoUsu3.setForeground(Color.WHITE);
        tipoUsu3.setBounds(80, 25, 200, 20);
        quadroNomeUsuario3.add(tipoUsu3);
        
 //INSERE O FUNDO DO CORPO DA MENSAGEM
        
        quadroCorpoUsuario3 = new JPanel();
        textCorpoUsuario3 = new JTextArea();
        textCorpoUsuario3.setLayout(null);
        textCorpoUsuario3.setLineWrap(true);
        textCorpoUsuario3.setWrapStyleWord(true);
        textCorpoUsuario3.setEditable(false);
        textCorpoUsuario3.setBackground(Color.GRAY);
        Border bordaQuadroCorpoUsuario3 = BorderFactory.createLineBorder(Color.WHITE); 
        textCorpoUsuario3.setBorder(bordaQuadroCorpoUsuario3);
        textCorpoUsuario3.setText("blablablablablablablablablablablablablablablabla" +
        "blablablablablablablablablablablablablablablablablablablablablablablablablablabla" +
        "blablablablablablablablablablablablablablablablablablablablablablablablablabla" +
        "blablablablablablablablablablablablablablablablablablablablablablablablabla" +
        "blablablablablablablablablablablablablablablablablablablablablablablablablabla" +
        "blablablablablablablablablablablablablablablablablablablablablablablablabla" +
        "blablablablablablablablablablablablablablablablablablablablablablabla");
        textCorpoUsuario3.setForeground(Color.WHITE);
        textCorpoUsuario3.setLocation(240,10);
        textCorpoUsuario3.setSize(500,100);
        quadroCorpoUsuario3.add(textCorpoUsuario3);
        quadroCorpoUsuario3.setBackground(Color.GRAY);
        barraRolagemCaixaMsg3 = new JScrollPane(quadroCorpoUsuario3);
        barraRolagemCaixaMsg3.setLocation(240,10);
        barraRolagemCaixaMsg3.setSize(500,100);
         
        fundoUsu3.add(barraRolagemCaixaMsg3);
        
        quadroCorpo.add(fundoUsu3);
        //mainScroll.add(fundoUsu3);
        
//-----------------------------------------------------------------------------//        
        //RODAPE DO FÓRUM
        quadroRodape = new JPanel();
        quadroRodape.setLayout(null);
        Rectangle retanguloRodape = new Rectangle();
        retanguloRodape.setLocation(0,505);
        retanguloRodape.setSize(800, 50);
        quadroRodape.setBounds(retanguloRodape);
        quadroRodape.setBackground(Color.WHITE);
        btExcluir = new JButton("Responder o tópico");
        btExcluir.setFont(new Font("Verdana",Font.ITALIC,12));
        btExcluir.setLayout(null);
        btExcluir.setSize(50, 0);
        btExcluir.setBounds(5, 5, 150, 20);
        quadroRodape.add(btExcluir);
        
 
//---------------------------- Adicionar o rodape e o corpo no container-------------------------------//        
        
        quadro.add(quadroRodape);
        
        quadro.add(quadroCorpo);
      //quadro.add(mainScroll);
        mainFrame.setLocation(100,100);
        mainFrame.setVisible(true);
        
    }    
    
   
    
    
    public static void main(String args[]){
        
        //chama o construtor da classe
    	layoutTopicosMensagens topicosEspecificos = new layoutTopicosMensagens();
    }    
	
}

2 Respostas

bruno_7317

Cara, eu não sei resolver teu problema, mas sei que você não precisa importar assim:

import javax.swing.BorderFactory;   
import javax.swing.JButton;   
import javax.swing.JFrame;   
import javax.swing.JLabel;   
import javax.swing.JMenu;   
import javax.swing.JMenuBar;   
import javax.swing.JPanel;   
import javax.swing.JScrollBar;   
import javax.swing.JScrollPane;   
import javax.swing.JTable;   
import javax.swing.JTextArea;   
import javax.swing.border.Border;

Basta:

import javax.swing.*;
import javax.swing.border.*;

que vai fazer a mesmíssima coisa que aquelas truculentas 12 linhas de código que você usou.

Danillo_Moreno

bruno_7317:
Cara, eu não sei resolver teu problema, mas sei que você não precisa importar assim:

import javax.swing.BorderFactory;   
import javax.swing.JButton;   
import javax.swing.JFrame;   
import javax.swing.JLabel;   
import javax.swing.JMenu;   
import javax.swing.JMenuBar;   
import javax.swing.JPanel;   
import javax.swing.JScrollBar;   
import javax.swing.JScrollPane;   
import javax.swing.JTable;   
import javax.swing.JTextArea;   
import javax.swing.border.Border;

Basta:

import javax.swing.*;
import javax.swing.border.*;

que vai fazer a mesmíssima coisa que aquelas truculentas 12 linhas de código que você usou.

Aquelas truculentas 12 linhas são a maneira correta de importar…

Importando apenas o que ele vai usar e mais nada…

Criado 16 de abril de 2008
Ultima resposta 16 de abr. de 2008
Respostas 2
Participantes 3