JScrollBar Verticale / Orizzontale impostazione problema- Java Swing
-
09-10-2019 - |
Domanda
Sto solo cercando di aggiungere una barra di scorrimento verticale alla mia TextField e TextArea. Sto usando uno ScrollPane e dovrebbe creare avertical / barra di scorrimento orizzontale per impostazione predefinita.
Problema: Ho bisogno di una barra di scorrimento verticale per visualizzare i dati che non è visibile. Nella avviare una barra di scorrimento verticale appare, ma quando i dati aumenta le modifiche barra di scorrimento verticale ad una barra di scorrimento orizzontale. Anche il TextField scompare e solo una barra di scorrimento orizzontale appare al suo posto. Credo che sia perché come ho impostato i limiti, ma ho provato a cambiare i confini e finisce completamente eliminando la TextField.
Il mio frammento di codice:
public JTextField inputField = new JTextField();
public JTextArea talkArea = new JTextArea();
public JScrollPane inputFieldScroll = new JScrollPane(inputField);
public JScrollPane talkAreaScroll = new JScrollPane(talkArea);
talkArea.setEditable(false);
talkArea.setBackground(Color.white);
talkAreaScroll.setBounds(new Rectangle(TALK_LEFT, TALK_TOP, TALK_WIDTH, TALK_HEIGHT));
this.getContentPane().add(talkAreaScroll, null);
//set input area
inputField.setBackground(Color.white);
inputField.setBounds(new Rectangle(INPUT_LEFT, INPUT_TOP, INPUT_WIDTH, INPUT_HEIGHT));
inputFieldScroll.setVerticalScrollBar(new JScrollBar());
inputFieldScroll.setBounds(new Rectangle(INPUT_LEFT, INPUT_TOP, INPUT_WIDTH, INPUT_HEIGHT));
Domanda:
C'è qualche parametro ho bisogno di impostare in modo che rimanga una barra di scorrimento verticale? Perché la barra di scorrimento di ingresso occupare l'intero inputfield quando i dati diventa una linea enorme? Si presenta come una vera e propria barra di scorrimento verticale in partenza.
Qualche consiglio apprezzato.
Grazie
Soluzione
Di seguito è riportato un piccolo codice compilabile frammento che ho citato sopra. Sono d'accordo con camickr che non si dovrebbe usare il posizionamento assoluto, ma piuttosto di utilizzare i gestori di layout. Se è assolutamente necessario disporre di una barra di scorrimento orizzontale per il JTextField, quindi un modo per farlo funzionare è di averlo presentarsi sempre, utilizzando il costruttore JScrollPane che consente per questo. cioè,
JScrollPane inputPane = new JScrollPane(inputField, JScrollPane.VERTICAL_SCROLLBAR_NEVER,
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
Per es.,
import java.awt.*;
import javax.swing.*;
public class FuSwing1b extends JPanel {
private static final int TA_ROWS = 25;
private static final int TA_COLS = 60;
private JTextField inputField = new JTextField();
private JTextArea talkArea = new JTextArea(TA_ROWS, TA_COLS);
public FuSwing1b() {
talkArea.setEditable(false);
talkArea.setFocusable(false);
talkArea.setBackground(Color.white);
//talkArea.setPreferredSize(new Dimension(TALK_WIDTH, TALK_HEIGHT));
JScrollPane talkPane = new JScrollPane(talkArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
JScrollPane inputPane = new JScrollPane(inputField, JScrollPane.VERTICAL_SCROLLBAR_NEVER,
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
int gap = 10;
setLayout(new BorderLayout(gap, gap));
add(talkPane, BorderLayout.CENTER);
add(inputPane, BorderLayout.SOUTH);
setBorder(BorderFactory.createEmptyBorder(gap , gap, gap, gap));
}
private static void createAndShowUI() {
JFrame frame = new JFrame("FuSwing1b");
frame.getContentPane().add(new FuSwing1b());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
createAndShowUI();
}
});
}
}
Altri suggerimenti
Non giocare con i limiti. Utilizzare un gestore di layout e non dovrete preoccuparvi di questo.
Quando si crea l'utilizzo campo di testo qualcosa del tipo:
JTextField textField = new JTextField(10);
Questo creerà un campo di testo che conterrà un minimo di 10 caratteri. Se il numero di caratteri supera la larghezza di visualizzazione del campo di testo l'uso può vedere i personaggi rimanenti utilizzando i tasti freccia destra / sinistra. Questa è la normale interfaccia utente utilizzata da tutte le applicazioni che abbia mai visto. Non cercare di creare il proprio UI utilizzando una barra di scorrimento orizzontale. Gli utenti non sono abituati a questo.
per l'area di testo è possibile crearlo utilizzando:
JTextArea textArea = new JTextArea(5, 30);
JScrollPane scrollPane = new JScrollPane( textArea );
per creare un'area di testo con 5 righe e circa 30 caratteri per riga.
Ora aggiungere il campo di testo e lo ScrollPane alla vostra struttura "utilizzando gestori di layout" e poi imballare il telaio. I gestori di layout determinerà la dimensione migliore per le compoents. Barre di scorrimento appariranno automaticamente sull'area di testo come si aggiunge del testo ad esso e il testo supera 5 righe.