Tarde a todos.
Estou com um problemasso que aparentemente parece ser simples, mas está me atrasando bastante no desenvolvimento de um Formulário de Questões para um sistema de auxio a decisão.
[Situação]
Eu estou montando um questionário dinâmicamente com a seguinte estrutura:
Um JScrollPane como conteiner de um JPanel (utilizando GridBagLayout) para servir de conteiner de vários JTextPane não editável (que conteram as questões) e em baixo de cada JTextPane um painel de radios com as opções.
Eu quero que o questionário (JTextPane) se auto ajustem ao redimencionar horizontalmente, ou seja, apliquei a JScrollPane a politica: HORIZONTAL_SCROLLBAR_NEVER. Assim o texto se autoformatará de acordo com a disposição da tela (recurso somente disponivel no JEditorPane e JTextPane).
[Problema]
Quando uso um conteiner a mais (no caso a JPanel para criar meu proprio layout do questionário), o componente JTextPane não ajusta o seu conteúdo, ou seja, ele chega a redimencionar horizoltamente, mas quando chega no seu minimo, o texto que deveria ser ajustada para baixo, fica para fora da tela.
[Código exemplo]
import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
public class Teste {
public Teste() {
naoFunciona();
funciona();
}
private void naoFunciona() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("Nao funciona");
frame.setSize(400,200);
JTextPane editor = new JTextPane();
editor.setText("aaaaaa asd asd asdasdadad asd as");
editor.setEditable(false);
JPanel panel = new JPanel(new GridBagLayout());
GridBagConstraints g = new GridBagConstraints();
g.fill = GridBagConstraints.HORIZONTAL;
g.gridx = 0;
g.gridy = 0;
g.weightx = 1;
panel.add(editor, g);
JScrollPane scroll = new JScrollPane(panel);
scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
frame.add(scroll, BorderLayout.CENTER);
frame.setVisible(true);
}
private void funciona() {
JFrame frame = new JFrame();
frame.setTitle("Funciona");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400,200);
JTextPane editor = new JTextPane();
editor.setText("aaaaaa asd asd asdasdadad asd as");
editor.setEditable(false);
JScrollPane scroll = new JScrollPane(editor);
scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
frame.add(scroll, BorderLayout.CENTER);
frame.setVisible(true);
}
public static void main(String[] args) {
new Teste();
}
}
Obrigado