Barra de rolagem em JTabbedPane

6 respostas
A

Pessoal,
to tentando colocar uma barra de rolagem em um JTabbedPane, que usa JFrame como base. Quero que ao diminuir o tamanho da janela, apareça a barra de rolagem. Já tentei de várias formas mas não to conseguindo. Já usei JScrollPane, JScrollBar e nada...

EDIT: criei esse exemplo simples. Estou usando o Eclipse Galileo...

public class BarraDeRolagem extends JFrame {

	private static final long serialVersionUID = 1L;
	private JPanel jContentPane = null;
	private JPanel jPanel = null;
	private JLabel jLabel = null;
	private JTextArea jTextArea = null;
	private JButton jButton = null;
	private JScrollPane jScrollPane = null;
	private JTabbedPane jTabbedPane = null;
	
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new JPanel();
			jContentPane.setLayout(new BorderLayout());
			jContentPane.add(getJTabbedPane(), BorderLayout.CENTER);
		}
		return jContentPane;
	}

	
	private JPanel getJPanel() {
		if (jPanel == null) {
			jLabel = new JLabel();
			jLabel.setBounds(new Rectangle(40, 31, 43, 15));
			jLabel.setText("JLabel");
			jPanel = new JPanel();
			jPanel.setLayout(null);
			jPanel.setPreferredSize(new Dimension(50, 50));
			jPanel.setAutoscrolls(true);
			jPanel.add(jLabel, null);
			jPanel.add(getJTextArea(), null);
			jPanel.add(getJButton(), null);
		}
		return jPanel;
	}

	
	private JTextArea getJTextArea() {
		if (jTextArea == null) {
			jTextArea = new JTextArea();
			jTextArea.setBounds(new Rectangle(38, 66, 265, 134));
		}
		return jTextArea;
	}

	
	private JButton getJButton() {
		if (jButton == null) {
			jButton = new JButton();
			jButton.setBounds(new Rectangle(159, 223, 81, 23));
		}
		return jButton;
	}

	
	private JScrollPane getJScrollPane() {
		if (jScrollPane == null) {
			jScrollPane = new JScrollPane();
			jScrollPane.setViewportView(getJPanel());
		}
		return jScrollPane;
	}

	
	private JTabbedPane getJTabbedPane() {
		if (jTabbedPane == null) {
			jTabbedPane = new JTabbedPane();
			jTabbedPane.addTab(null, null, getJScrollPane(), null);
		}
		return jTabbedPane;
	}

	public static void main(String[] args) {
		
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				BarraDeRolagem thisClass = new BarraDeRolagem();
				thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				thisClass.setVisible(true);
			}
		});
	}

	
	public BarraDeRolagem() {
		super();
		initialize();
	}

	private void initialize() {
		this.setSize(548, 315);
		this.setResizable(true);
		this.setContentPane(getJContentPane());
		this.setTitle("JFrame");
		this.setVisible(true);
	}

}

6 Respostas

Eric_Yuzo

Imagino que o caminho seja criar um JPanel com o conteúdo da aba e colocá-la dentro de um JScrollPane para então adicionar uma aba com o JScrollPane dentro.

Qualquer coisa posta a parte do código que está dando erro que agente tenta ajudar.

ViniGodoy

Você também deve definir o preferredSize do painel para o tamanho mínimo que ele deve ter antes de aparecer a rolagem. Caso contrário, fica difícil o Java saber quando a barra deve ou não aparecer.

A

Eric Yuzo:
Imagino que o caminho seja criar um JPanel com o conteúdo da aba e colocá-la dentro de um JScrollPane para então adicionar uma aba com o JScrollPane dentro.

Qualquer coisa posta a parte do código que está dando erro que agente tenta ajudar.

Fiz de acordo com o que vc disse, mas ainda não mostra a barra.

A

O preferredSize já está definido…

Eric_Yuzo

O preferred size deve ser maior do a área visível do seu frame, caso contrário o scroll não vai aparecer.

Por exemplo, se o content pane do frame tiver um size de 800,600 e o preferred size de seu panel for de 400,300 o scroll não vai aparecer, pois o panel cabe confortavelmente dentro do frame.

Para fazer a barra aparecer permanentemente, use o scrollbar policy:

scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
Assim a barra aparecerá de qualquer forma, mas para permitir a rolagem o preferred size do panel interno deve ser maior que a área visível.

A

Era o preferredSize mesmo, ele tava menor do que o Content Frame.
Valeu pessoal!
:smiley:

Criado 18 de outubro de 2010
Ultima resposta 20 de out. de 2010
Respostas 6
Participantes 3