Como colocar barra de rolagem no meu app?

3 respostas
buutqn

Estou começando a desenvolver isso, apenas para aprender a adicionar coisas pelo for, e quando ficar grande mexer no tamanho da tela. Mas me deparei nesse detalhe, e se o número de coisas for maior que o tamanho da tela do pc ?

Segue meu código: Main:
public class Main {
    public static void main(String args[]) {
      new Tela();
   }
}
Tela:
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.WindowConstants;

public class Tela extends JFrame {

    private JFrame frame;
    JLabel digite;
    JTextField campodigite;
    JButton ok;
    int produtos;
    
    Bg bg = null;
    

    
    public Tela() {
        
        
        
        frame = new JFrame("Quantidade");
        bg = new Bg();
        frame.getContentPane().add(bg);
        frame.setSize(800, 360);
        frame.setLocationRelativeTo(null);
        frame.setResizable(false);
        bg.setLayout(null);//definindo o layout
        digite = new JLabel("Digite o número de produtos:");
        ok = new JButton();
        campodigite = new javax.swing.JTextField(); 
        ok.setText("ok");
        digite.setBounds(300,10,170,20);
        campodigite.setBounds(471,10,30,20);
        ok.setBounds(502,10,30,20);
        digite.setForeground(new java.awt.Color(240, 240, 240));
        
        
        
        ok.setMargin(new Insets(2, 4, 2, 4));
        ok.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                okActionPerformed(evt);
            }
        });
        bg.add(ok);
        bg.add(campodigite);
        bg.add(digite);
        JScrollPane p = new JScrollPane();
        
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
    
    private void okActionPerformed(java.awt.event.ActionEvent evt) {
        int produtos = Integer.parseInt(campodigite.getText());
       if (produtos > 14) {
            for (int i = 14; i < produtos; i++) {
                Toolkit toolkit = Toolkit.getDefaultToolkit();
                Dimension scrnsize = toolkit.getScreenSize();
                int heigth = (int) scrnsize.getHeight();
                int proximaAltura;
                proximaAltura = ((i - 14) * 25) + 360;
                if (proximaAltura < heigth) {
                    frame.setSize(800, proximaAltura);
                    frame.setLocationRelativeTo(null);
                }

            }
        }
        for (int i = 0; i < produtos; i++){
            String numero = ("produto: " + (i + 1));
            JLabel b = null;
            b = new JLabel();
            b.setText(numero);
            b.setForeground(new java.awt.Color(240, 240, 240));
            int altura;
            altura = (i * 20) + 40;
            b.setBounds(350, altura, 100, 20);
            bg.add(b);
            bg.repaint();
        }
        
    }

}
Bg (serve apenas para ficar com a imagem no fundo):
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.JPanel;

public class Bg extends JPanel {

    public Bg() {
       
        
    }

    public void paintComponent(Graphics g) {

        Graphics2D gr = (Graphics2D) g.create();

        try {
            Image imagem = ImageIO.read(getClass().getResourceAsStream("bg.png"));
            gr.drawImage((BufferedImage) imagem, null, 0, 0);

        } catch (IOException ex) {
            Logger.getLogger(Bg.class.getName()).log(Level.SEVERE, null, ex);
        }

    }
}

Eu uso um If dentro do for do primeiro if da ação do botão ok para que a próxima altura do app for maior que o tamanho da tela do monitor, a altura do app será do mesmo tamanho da tela do monitor, então, eu preciso colocar um scroll caso tenha mais números.
Então, alguém me ajuda como fazer isso? Devo colocar o scroll em Bg ou em Tela?
E, se alguém também souber como eu colocar o que tem no Bg em Tela, eu ficaria muito grato também.

3 Respostas

drsmachado

As barras de rolagem serão criadas automaticamente quando você colocar os componentes em um JScrollPane. Pesquise sobre ele.

ViniGodoy

Mas para que o JScrollPane funcione, você deve implementar o método getPreferredSize() do seu painel para que ele retorne o tamanho total do painel.

M

Oi, sou iniciante e estou com um problema parecido. Você poderia dar um exemplo de como fazer isso ?

Criado 6 de março de 2014
Ultima resposta 23 de jul. de 2015
Respostas 3
Participantes 4