Frage

Ich versuche nur, eine vertikale Bildlaufleiste auf meine TextField- und TextArea- hinzuzufügen. Ich bin eine ScrollPane verwenden und es soll eine vertikale / horizontale Bildlaufleiste standardmäßig erstellen.

Problem: Ich brauche eine vertikale Bildlaufleiste, um die Daten zu sehen, die nicht sichtbar ist. In der vertikale Bildlaufleiste angezeigt wird starten, aber wenn die Daten erhöht die vertikale Bildlaufleiste Änderungen an einer horizontalen Bildlaufleiste. Auch die TextField- verschwindet und nur ein horizontaler Scrollbalken erscheint an seinem Platz. Ich denke, es liegt daran, dass, wie ich die Grenzen gesetzt, aber ich versuchte, die Grenzen zu ändern und es endet vollständig mit dem TextField- tat weg.

Ihr Code-Snippet:

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));

Frage:

Gibt es einen Parameter Ich brauche so eingestellt werden, dass es sich um eine vertikale Bildlaufleiste bleibt? Warum besetzen die Eingangsbildlaufleiste die gesamte Inputfield, wenn die Daten eine große Linie wird? Es scheint, als eine richtige vertikale Bildlaufleiste in dem Start.

Jede Beratung sehr geschätzt.

Danke

War es hilfreich?

Lösung

Im Folgenden finden Sie eine kleine übersetzbare Code-Schnipsel ich oben erwähnt. Ich stimme mit camickr dass Sie sollten nicht die absolute Positionierung verwenden, sondern verwenden Sie die Layout-Manager. Wenn Sie unbedingt einen horizontalen Scrollbar für die JTextField haben müssen, dann eine Möglichkeit, es an die Arbeit zu bekommen, ist es immer zeigen, bis zu haben, die JScrollPane Konstruktor, die dies zulässt. das heißt,

        JScrollPane inputPane = new JScrollPane(inputField, JScrollPane.VERTICAL_SCROLLBAR_NEVER, 
                    JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

z. B.

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();
            }
        });
    }
}

Andere Tipps

nicht mit den Grenzen spielen. Verwenden Sie ein Layout-Manager, und Sie werden sich keine Sorgen machen zu diesem.

Wenn Sie erstellen das Textfeld Verwendung so etwas wie:

JTextField textField = new JTextField(10);

Dies wird ein Textfeld erstellen, die ein Minimum von 10 Zeichen halten werden. Wenn die Anzahl der Zeichen, die die Anzeigebreite des Textfeldes überschreitet kann die Verwendung der verbleibenden Zeichen sehen nach rechts / links Pfeiltasten. Das ist die normale Benutzeroberfläche von allen Anwendungen verwendet, die ich je gesehen habe. Versuchen Sie nicht, Ihre eigene Benutzeroberfläche zu erstellen, indem Sie einen horizontalen Bildlaufleiste verwendet wird. Benutzer sind nicht daran gewöhnt, dass.

für den Textbereich erstellen Sie können es mit:

JTextArea textArea = new JTextArea(5, 30);
JScrollPane scrollPane = new JScrollPane( textArea );

einen Textbereich mit 5 Reihen zu erstellen und zu ca. 30 Zeichen pro Zeile.

Nun fügen Sie das Textfeld und die scrollpane an den Rahmen „mit Layout-Manager“ und dann den Rahmen packen. Der Layout-Manager die beste Größe für die compoents bestimmen. Scrollbalken werden automatisch auf dem Textbereich angezeigt, wie Sie Text, um es hinzuzufügen, und der Text über 5 Zeilen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top