Fiz um programa usando java e em um JPanel tem um JScrollPane.
Dentro desse JPanel tem um JTextArea que quase preenche toda a horizontal do JPanel.
Quando tento usar o scroll do mouse ele para naquele JTextArea e não desce mais. Existe alguma maneira de deixar o scroll do mouse funcionar e mexer o JScrollPane sem interferência do JTextArea?
Não entendi.
Sim, mas teria que remover o ScrollPane
“parente” do TextArea
.
Em algum lugar está adicionando o TextArea
em um ScrollPane
, se remover esse ScrollPane
e inserir o TextArea
diretamente no Panel
, o ScrollPane
do Panel
funcionará sem interferência.
Não é possível fazer funcionar desse jeito com um ScrollPane
dentro de um outro.
O problema de fazer isso é que se o usuário escrever mais do que o tamanho do JTextArea vai dar ruim né?
Isso mesmo. Vi na documentação que tem o método setWheelScrollingEnabled
, mas acho que não vai funcionar. Infelizmente não conheço uma forma de resolver esse problema.
Talvez se capturar os eventos de Scroll do TextArea e transferir para o outro ScrollPane dê certo.
Fiz um teste, e funcionou removendo ScrollPane do TextArea
JFrame f = new JFrame();
JTextArea a = new JTextArea();
JPanel panel = new JPanel(new BorderLayout());
panel.add(a, BorderLayout.CENTER);
JScrollPane p = new JScrollPane(panel);
f.getContentPane().add(p);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
Acho que vai depender do Layout
, se usar o setPreferredSize
no TextArea
também não funciona.
E porque você precisa do JScrollPane
se não vai rolar nada dentro dele?
Se eu retirar o JScrollPane do JTextArea ele funciona normal, porem se o JTextArea for pequeno e eu começar a inserir dados e dar ENTER ele não vai ficar legal e eu não vou conseguir ler a parte de cima que eu escrevi.
vou rolar sim…dependendo de quanto o usuário escrever no JTextArea ele vai ultrapassar a quantidade de linhas que eu tenho de espeço e dai ele não vai ver o que escreveu.
O JPanel já está do tamanho certo da tela do usuário também e como a quantidade de informação é grande no JPanel eu preciso de um JScrollPane para descer e visualizar o resto do JPanel
Seus argumentos estão estranhos pra mim.
Me parece que talvez é só uma confusão em como organizar os painéis e respectivos gerenciadores de layout.
JScrollPane
->JInternaFrame
->JScrollPane
->JTextArea
O que pode ter de errado neles? Está desse jeito que te mostrei. Usei a própria interface do netbeans para criar o layout. Ele já cria desta maneira.
O diego12 entendeu certinho qual era o problema, porem não conseguiu achar uma resolução para o meu problema.
Quando se tem um ScrollPane (interno) dentro de um outro ScrollPane (externo), o scroll do mouse quando está rolando o externo e o ponteiro passa sobre o interno, o externo para de rolar e passa rolar o interno. O desejado é que não role o interno e que continue rolando o externo mesmo quando o ponteiro está sobre o interno.
Agora sim, mais claro e objetivo, impossível!
Obrigado.
Se você desabilitar a rodinha do mouse no JScrollPane
interno, não resolve teu problema?
Veja o método setWheelScrollingEnabled
.
https://docs.oracle.com/javase/8/docs/api/javax/swing/JScrollPane.html#setWheelScrollingEnabled-boolean-
O problema é que eu preciso que o interno funcione tambem