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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top