Como colocar ScrollBar?

3 respostas
P

Como faço para colocar ScrollBar no código abaixo, já fiz várias tentativas e nenhuma deu certo.

package br.com.people;

//bibliotecas

import javax.swing.<em>;

import java.awt.</em>;

import java.awt.event.*;

import javax.swing.text.MaskFormatter;

import java.util.Calendar;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

//classe exBlog extendida de JFrame, implementando ActionListener
public class Formulario extends JFrame implements ActionListener{

//Variáveis

private JLabel lblEst,lblNome,lblSex,lblNiv,lblCPF,lblInt;

private JTextField texNome;

private JFormattedTextField texCPF;

private ButtonGroup gruSex;

private JRadioButton radMasc, radFem;

private JComboBox cmbNiv;

private JCheckBox chkIng, chkMat, chkPro, chkLog;

private JButton btnGrav;

private JPanel panel;

private JTextArea txtArea;
//Iniciando o Formulario

public Formulario(){

setLayout(null);
//Label Estudante

lblEst = new JLabel("Estudante: ");

lblEst.setForeground(Color.BLUE);

lblEst.setBounds(120,5,100,20);

add(lblEst);
//Label Nome

lblNome = new JLabel("Nome: ");

lblNome.setBounds(10,35,100,20);

lblNome.setForeground(Color.WHITE);

add(lblNome);
//Text Nome

texNome = new JTextField("");

texNome.setBounds(50,35,250,20);

add(texNome);
//Label Sexo

lblSex = new JLabel("Sexo: ");

lblSex.setBounds(10,65,100,20);

lblSex.setForeground(Color.WHITE);

add(lblSex);
//Radio Masculino

radMasc = new JRadioButton(Masculino);

radMasc.setBounds(60,65,120,20);

radMasc.setForeground(Color.BLUE);

radMasc.setBackground(Color.RED);

radMasc.setSelected(true);
//Radio Feminino

radFem = new JRadioButton(Feminino);

radFem.setBounds(200,65,120,20);

radFem.setForeground(Color.BLUE);

radFem.setBackground(Color.RED);
//Grupo de Botões

gruSex = new ButtonGroup();

gruSex.add(radMasc);

gruSex.add(radFem);

add(radMasc);

add(radFem);
//Label Nível

lblNiv = new JLabel("Nível Estudantil: ");

lblNiv.setBounds(10,95,200,20);

lblNiv.setForeground(Color.WHITE);

add(lblNiv);
//Combo Nível

cmbNiv = new JComboBox();

cmbNiv.setBackground(Color.WHITE);

cmbNiv.addItem(Básico Completo);

cmbNiv.addItem(Médio Completo);

cmbNiv.addItem(Superior Completo);

cmbNiv.addItem(Doutorado e/ou Mestrado Completo);

cmbNiv.setBounds(10,125,250,20);

add(cmbNiv);
//Label CPF

lblCPF = new JLabel("CPF: ");

lblCPF.setBounds(10,155,100,20);

lblCPF.setForeground(Color.WHITE);

add(lblCPF);
//Campo com máscara - CPF

try {

MaskFormatter mk= new MaskFormatter("###.###.###-##");

mk.setPlaceholderCharacter(’<em>’);

/*  ou, pode setar os caracteres que irá receber

MaskFormatter mk= new MaskFormatter("***.***.*<strong>-</strong>");

mk.setPlaceholderCharacter(’</em>’);

mk.setValidCharacters(“ABC0123456.”);

*/

texCPF = new JFormattedTextField(mk);

texCPF.setBounds(50,155,100,20);

add(texCPF);

}

catch(Exception e){}
//Label Interesses

lblInt = new JLabel("Interesses: ");

lblInt.setBounds(10,185,100,20);

lblInt.setForeground(Color.WHITE);

add(lblInt);
//Check Inglês

chkIng = new JCheckBox(Inglês);

chkIng.setBounds(10,205,120,20);

chkIng.setForeground(Color.BLUE);

chkIng.setBackground(Color.RED);

add(chkIng);
//Check Matemática

chkMat = new JCheckBox(Matemática);

chkMat.setBounds(170,205,120,20);

chkMat.setForeground(Color.BLUE);

chkMat.setBackground(Color.RED);

add(chkMat);
//Check Programação

chkPro = new JCheckBox(Programação);

chkPro.setBounds(10,235,120,20);

chkPro.setForeground(Color.BLUE);

chkPro.setBackground(Color.RED);

add(chkPro);
//Check Lógica

chkLog = new JCheckBox(Lógica);

chkLog.setBounds(170,235,120,20);

chkLog.setForeground(Color.BLUE);

chkLog.setBackground(Color.RED);

add(chkLog);
//Botão Ok

btnGrav = new JButton(Ok);

btnGrav.setBounds(110,285,120,40);

btnGrav.setMnemonic(O);

btnGrav.setToolTipText(Ok…”);

btnGrav.setForeground(Color.RED);

btnGrav.addActionListener(this);

add(btnGrav);

}
//Função responsável pelos cliques

public void actionPerformed(ActionEvent acesso){

String  sSexo="";

String  sNivel="";

String  sExec="";

Boolean bChave=true;
//se o acesso for via botão gravar-ok

if(acesso.getSource() == btnGrav){

//pegando o nivel de escolaridade

sNivel=cmbNiv.getSelectedItem().toString();

//verificando os radios

if(radFem.isSelected())

sSexo=F;

if(radMasc.isSelected())

sSexo=M;
Calendar c = Calendar.getInstance();

//montando a frase que será mostrada
sExec="Nome = '"+texNome.getText()+"'\n"+
      "Sexo = '"+sSexo+"'\n"+
      "Nivel= '"+sNivel+"'\n"+
      "CPF  = '"+texCPF.getText()+"'\n"+
      "-----------------------------\n"+
      "Interesses:\n"+
      "Inglês? "+chkIng.isSelected()+"\n"+
      "Matemática? "+chkMat.isSelected()+"\n"+
      "Programação? "+chkPro.isSelected()+"\n"+
      "Lógica? "+chkLog.isSelected()+"\n"+"\n"+
      //c+"\n"+"\n"+
      "Data: "+c.get(Calendar.DAY_OF_MONTH) + "/" + c.get(Calendar.MONTH) + "/" + c.get(Calendar.YEAR)+"\n"+
      "Hora: "+c.get(Calendar.HOUR) + ":" + c.get(Calendar.MINUTE) + ":" + c.get(Calendar.SECOND);

//mostrando a frase
JOptionPane.showMessageDialog(null,sExec,"Atenção",1);
    
//se a chave for verdadeira, chama função limpaDados
if(bChave){
  limpaDados();
}
//Muda o foco do componente
texNome.grabFocus();

}
}

//Função principal que irá criar a janela

public static void main(String arg[])

{

Formulario ex = new Formulario();

ex.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

ex.getContentPane().setBackground(Color.RED);

//ícone na mesma pasta do código fonte

ex.setIconImage(new ImageIcon(ico.png).getImage());

ex.setTitle(Estudantes…”);

//tira o maximizar e alteração do tamanho

ex.setResizable(true);

ex.setSize(350,300);

ex.setVisible(true);

ex.setLocationRelativeTo(null);

}
//função que limpa o programa e deixa ele como executado da primeira vez

private void limpaDados(){

texNome.setText("");

texCPF.setText("");

radMasc.setSelected(true);

chkIng.setSelected(false);

chkMat.setSelected(false);

chkPro.setSelected(false);

chkLog.setSelected(false);

cmbNiv.setSelectedIndex(0);

}

}

3 Respostas

B

Olá tudo bem.

so uma dica, quando for por código vc deve coloca-lo entre as tags [code"][/code"] (sem as aspas dentro do conchetes) fica mais facil para quem vai ver o código.

Vc não pode colocar uma scrollbar em um JFrame pois o mesmo é só a moldura, vc só consegui colocar barra de rolagem em componentes que podem ser adicionado ao JFrame com JPanel, JTextArea…, .
No seu código vc tem um JPanel panel mais vc ñ esta usado ele, vc poderia fazer o seguinte: Adicionar os seus componentes no seu JPanel e depois adiciona-lo a um JScrollPane e depois adicionar o JScrollPane através do metodo "getContentPane().add(seuJScroolPanel) do JFrame.

A outra coisa também, é q no inicio do seu codigo vc define o layout como null, “setLayout(null)” isso não pode ser feito vai ter que usar um Gerenciador de Layout, e consequentemente terá que reorganizar os seu componentes da tela. Segue um exemplo de código abaixo do q vc pode fazer.

.
.
.
//setLayout(null) essa linha vc comenta

panel = new JPanel();
panel.setBackground(Color.RED);
panel.setLayout(new FlowLayout()); // usar um gerenciador de layout de sua prefegencia ou deixar o padrão não definir como "null"
panel.setPreferredSize(new DimensionUIResource(200, 200)); //tamanho que seu JPanel deve ter preferencialmente

//aqui vc adiciona os componentes ao JPanel

JScrollPane scroll = new JScrollPane();
scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);  
scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scroll.setViewportView(panel);
getContentPane().add(scroll);

.
.
.
P

Meu caro, muito obrigado pela dica, fiz o que orientou e quase funcionou, o scrollbar foi inserido, acontece que quando uso ele acaba limpando a tela.
Executa o código abaixo para você entender o que estou falando.

package br.com.people;

import java.awt.BorderLayout;  
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Calendar;
import javax.swing.*;  
import javax.swing.plaf.DimensionUIResource;
import javax.swing.text.MaskFormatter;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class Painel extends JFrame  implements ActionListener  
{  
	private JPanel panel;
    private JLabel lblEst,lblNome,lblSex,lblNiv,lblCPF,lblInt;
    private JTextField texNome;
    private JFormattedTextField texCPF;
    private ButtonGroup gruSex;
    private JRadioButton radMasc, radFem;
    private JComboBox cmbNiv;
    private JCheckBox chkIng, chkMat, chkPro, chkLog;
    private JButton btnGrav;
    
    public void criaJanela()  
    {   
        panel = new JPanel();
        panel.setPreferredSize(new DimensionUIResource(450, 400));
        
        setDefaultCloseOperation(EXIT_ON_CLOSE);
		setLocationRelativeTo(null);
        
        //Label Estudante
        lblEst = new JLabel("Estudante: ");
        lblEst.setForeground(Color.BLUE);
        lblEst.setBounds(120,5,100,20);
        add(lblEst);
        
        //Label Nome
        lblNome = new JLabel("Nome: ");
        lblNome.setForeground(Color.BLUE);
        lblNome.setBounds(10,35,100,20);
        add(lblNome);

        //Text Nome
        texNome = new JTextField("");
        texNome.setBounds(50,35,250,20);
        add(texNome);

        //Label Sexo
        lblSex = new JLabel("Sexo: ");
        lblSex.setBounds(10,65,100,20);
        lblSex.setForeground(Color.BLUE);
        add(lblSex);

        //Radio Masculino
        radMasc = new JRadioButton("Masculino");
        radMasc.setBounds(60,65,120,20);
        radMasc.setForeground(Color.BLUE);
        radMasc.setBackground(Color.RED);
        radMasc.setSelected(true);

        //Radio Feminino
        radFem = new JRadioButton("Feminino");
        radFem.setBounds(200,65,120,20);
        radFem.setForeground(Color.BLUE);
        radFem.setBackground(Color.RED);

        //Grupo de Botões
        gruSex = new ButtonGroup();
        gruSex.add(radMasc);
        gruSex.add(radFem);
        add(radMasc);
        add(radFem);

        //Label Nível
        lblNiv = new JLabel("Nível Estudantil: ");
        lblNiv.setBounds(10,95,200,20);
        lblNiv.setForeground(Color.BLUE);
        add(lblNiv);

        //Combo Nível
        cmbNiv = new JComboBox();
        cmbNiv.setBackground(Color.WHITE);
        cmbNiv.addItem("Básico Completo");
        cmbNiv.addItem("Médio Completo");
        cmbNiv.addItem("Superior Completo");
        cmbNiv.addItem("Doutorado e/ou Mestrado Completo");
        cmbNiv.setBounds(10,125,250,20);
        add(cmbNiv);

        //Label CPF
        lblCPF = new JLabel("CPF: ");
        lblCPF.setBounds(10,155,100,20);
        lblCPF.setForeground(Color.BLUE);
        add(lblCPF);

        //Campo com máscara - CPF
        try {
          MaskFormatter mk= new MaskFormatter("###.###.###-##");       
          mk.setPlaceholderCharacter('_');
          /*  ou, pode setar os caracteres que irá receber 
            MaskFormatter mk= new MaskFormatter("***.***.***-**");
            mk.setPlaceholderCharacter('_');
            mk.setValidCharacters("ABC0123456.");
          */
          texCPF = new JFormattedTextField(mk); 
          texCPF.setBounds(50,155,100,20);
          add(texCPF);
        }
        catch(Exception e){}

        //Label Interesses
        lblInt = new JLabel("Interesses: ");
        lblInt.setBounds(10,185,100,20);
        lblInt.setForeground(Color.BLUE);
        add(lblInt);

        //Check Inglês
        chkIng = new JCheckBox("Inglês");
        chkIng.setBounds(10,205,120,20);
        chkIng.setForeground(Color.BLUE);
        chkIng.setBackground(Color.RED);
        add(chkIng);

        //Check Matemática
        chkMat = new JCheckBox("Matemática");
        chkMat.setBounds(170,205,120,20);
        chkMat.setForeground(Color.BLUE);
        chkMat.setBackground(Color.RED);
        add(chkMat);

        //Check Programação
        chkPro = new JCheckBox("Programação");
        chkPro.setBounds(10,235,120,20);
        chkPro.setForeground(Color.BLUE);
        chkPro.setBackground(Color.RED);
        add(chkPro);

        //Check Lógica
        chkLog = new JCheckBox("Lógica");
        chkLog.setBounds(170,235,120,20);
        chkLog.setForeground(Color.BLUE);
        chkLog.setBackground(Color.RED);
        add(chkLog);

        //Botão Ok
        btnGrav = new JButton("Ok");
        btnGrav.setBounds(110,285,120,40);
        btnGrav.setMnemonic('O');
        btnGrav.setToolTipText("Ok...");
        btnGrav.setForeground(Color.RED);
        btnGrav.addActionListener(this);
        add(btnGrav);        
        
        JScrollPane scroll = new JScrollPane();  
        scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);    
        scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);  
        scroll.setViewportView(panel);  
        getContentPane().add(scroll, BorderLayout.CENTER);
        
    }  
    
  //Função responsável pelos cliques
    public void actionPerformed(ActionEvent acesso){
      String  sSexo="";
      String  sNivel="";
      String  sExec="";
      Boolean bChave=true;
        
      //se o acesso for via botão gravar-ok
      if(acesso.getSource() == btnGrav){
        //pegando o nivel de escolaridade
        sNivel=cmbNiv.getSelectedItem().toString();
        //verificando os radios
        if(radFem.isSelected())
          sSexo="F";
        if(radMasc.isSelected())
          sSexo="M";

        Calendar c = Calendar.getInstance();

        //montando a frase que será mostrada
        sExec="Nome = '"+texNome.getText()+"'\n"+
              "Sexo = '"+sSexo+"'\n"+
              "Nivel= '"+sNivel+"'\n"+
              "CPF  = '"+texCPF.getText()+"'\n"+
              "-----------------------------\n"+
              "Interesses:\n"+
              "Inglês? "+chkIng.isSelected()+"\n"+
              "Matemática? "+chkMat.isSelected()+"\n"+
              "Programação? "+chkPro.isSelected()+"\n"+
              "Lógica? "+chkLog.isSelected()+"\n"+"\n"+
              //c+"\n"+"\n"+
              "Data: "+c.get(Calendar.DAY_OF_MONTH) + "/" + c.get(Calendar.MONTH) + "/" + c.get(Calendar.YEAR)+"\n"+
              "Hora: "+c.get(Calendar.HOUR) + ":" + c.get(Calendar.MINUTE) + ":" + c.get(Calendar.SECOND);

        //mostrando a frase
        JOptionPane.showMessageDialog(null,sExec,"Atenção",1);
            
        //se a chave for verdadeira, chama função limpaDados
        if(bChave){
          limpaDados();
        }
        //Muda o foco do componente
        texNome.grabFocus();
      }
    }

  public static void main(String args[])  
  {  
      Painel s = new Painel();  
      s.criaJanela();  
      s.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      s.getContentPane().setBackground(Color.RED);
      //ícone na mesma pasta do código fonte
      s.setIconImage(new ImageIcon("ico.png").getImage());
      s.setTitle("Estudantes...");
      //tira o maximizar e alteração do tamanho
      s.setResizable(true);
      s.setSize(350,400);
      s.setVisible(true);
      s.setLocationRelativeTo(null);
      }

    //função que limpa o programa e deixa ele como executado da primeira vez
    private void limpaDados(){
      texNome.setText("");
      texCPF.setText("");
      radMasc.setSelected(true);
      chkIng.setSelected(false);
      chkMat.setSelected(false);
      chkPro.setSelected(false);
      chkLog.setSelected(false);
      cmbNiv.setSelectedIndex(0);
    }
}
B

Não executei mas o erro e q vc não esta adicionando os seu componentes no seu “panel” e sim no “JFrame” com o add(lblEst)

lblEst = new JLabel("Estudante: ");  
lblEst.setForeground(Color.BLUE);  
lblEst.setBounds(120,5,100,20);  
add(lblEst);

quando no caso deveria ser

panel.add(lblEst);

para todos os seu componentes pois todos pelo q vi rapidamente estão sendo adicionados no JFrame.

Mas tbm o problema não vai ser so esse, como falei no outro poste vc terá que reorganizar todos os componentes pois vc n esta definindo o layout com null e n pode, para usar a o JScroolPane.

Criado 28 de maio de 2015
Ultima resposta 29 de mai. de 2015
Respostas 3
Participantes 2