Einer TextArea ein ScrollPane hinzufügen

Diskutiere Einer TextArea ein ScrollPane hinzufügen im AWT, Swing, JavaFX & SWT Bereich.
N

NichtExpert

Hallo Liebe Community,

ich hänge mal wieder fest und komme partu nicht weiter, obwohl es eigentlich nicht schwer ist...
Jedoch mache ich es mir mal wieder selber schwer.

Ich habe eine GUI erstellt. Diese soll 2 TextAres besitzen, die nebeneindander liegen.
Die Größe des Frames habe ich festgelegt. Die größen der Textares ebenso.
Ich nutze kein Layout Manager
Java:
panel.setLayout(null);
Also ich bestimme selbst die größen und Positionen.


Aber ich bekomme das Ganze nicht mit dem Null layout hin und hoffe nun, hier Rat zu finden.

Java:
public static void main(String[] args) {

        //Frame erstellen
        JFrame frame = new JFrame("Textdatei");
        frame.setSize(600, 400);

        // Panel erstellen
        JPanel panel = new JPanel();
        panel.setLayout(null);
        panel.setBackground(Color.lightGray);

        // Label mit Überschrift
        JLabel überschrift = new JLabel("Textdatei");
        überschrift.setBounds(250, 50, 300, 25);
        überschrift.setFont(new Font("Times New Roman", Font.PLAIN, 32));


        // Textarea erstellen
        JTextArea textArea = new JTextArea(5, 10);
        textArea.setBounds(50, 100, 200, 160);



        JScrollPane scrollPane = new JScrollPane(textArea);





        // TextFeld erstellt
        JTextField textField = new JTextField();
        textField.setBounds(300, 100, 200, 80);

        // Button erstellen
        JButton button = new JButton("Update");
        button.setBounds(360, 210, 80, 25);
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                // noch keine Funktion zugewiesen
            }
        });
        
        
        panel.add(überschrift);
        panel.add(textArea);
        panel.add(button);
        panel.add(textField);
        panel.add(scrollPane);


        frame.add(panel);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

Hoffe es ist alles dabei, habe den Code gekürzt.


Bevor mir vorgeworfen wird, nur nach Lösungen zu fragen:
Ich habe es probiert und auch versucht mittels Internet zu lösen.
Folgend ein kleines Bsp was ich probiert habe.

Java:
JScrollPane scrollPane = new JScrollPane(textArea,
                ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
Wenn ich das so machen möchte. Also das der ScrollPane nur erscheint, wenn er gebraucht wird.
Dann wird mir das wort "textArea" also die TextArea als Fehler markiert mit der Meldung:
provided int
Diesen Teil verstehe ich nicht einmal.
Wäre auch schön, wenn mich jemand darüber erleuchten könnte.

L.G. NichtExpert
 
MoxxiManagarm

MoxxiManagarm

Dann wird mir das wort "textArea" also die TextArea als Fehler markiert mit der Meldung:
provided int
Diesen Teil verstehe ich nicht einmal.
Wäre auch schön, wenn mich jemand darüber erleuchten könnte.
Es gibt keinen Konstruktor für Component und int (die Konstante ist ein int). Der einzige Konstruktor, der ebenfalls 2 Parameter hat, ist https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/javax/swing/JScrollPane.html#<init>(int,int). Da hier der erste Parameter ein int und kein Component ist erscheint die Fehlermeldung. Probiere es mit https://docs.oracle.com/en/java/jav...lPane.html#<init>(java.awt.Component,int,int), du musst also auch für Vertikal eine Option angeben.
 
N

NichtExpert

Bin momentan sehr beschäftigt, versuche es morgen nochmal, sonst kann ich mich wahrscheinlich erst wieder Mittwoch melden. Aber schonmal danke für die Antwort, ich werde es mir ansehen
 
N

NichtExpert

Irgendwie bekomme ich es nicht hin.
Hättest du ein kleines Beispiel?
Oder ich schreibe mal woran ich scheitere...

Java:
public JScrollPane(Component view,
                   int vsbPolicy,
                   int hsbPolicy)
Da es public ist, geht es nicht in die Main rein, dadurch kann ich im Component view nicht auf die TextArea zuweisen.
Und ich schaffe es nicht nach diesem Code die Balken mit "Vertical_as_needed" und genauso horizontal zu setzen.
 
MoxxiManagarm

MoxxiManagarm

Da es public ist, geht es nicht in die Main rein, dadurch kann ich im Component view nicht auf die TextArea zuweisen.
Sorry ich verstehe die Frage nicht. Versuchst du dir Zeile so wie du sie gerade gepostet hast, in die main Methode zu kopieren? Das geht natürlich nicht, das ist die Konstruktor Signatur aus der Doku, du musst die aber anwenden. Das hast du vorher schon nicht schlecht gemacht, nur eben nicht vollständig.

Java:
JScrollPane scrollPane = new JScrollPane(textArea, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
Das ist dein vorher, diese Zeile würde einen Konstruktor von JScrollPane mit Component und einem int voraussetzen, welcher nicht existiert. Existieren tut der Component, int, int Konstruktor. Du musst diese Zeile also um einen in ergänzen für die vsbPolicy. z.B.

Java:
JScrollPane scrollPane = new JScrollPane(textArea, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
 
MoxxiManagarm

MoxxiManagarm

Alternativ könntest du den einfachen Component Konstruktur von JScrollPane anwenden und anschließend die Policy verändern. Auf diese WEise würdest du die Default Policy für Vertikal beibehalten.
Java:
JScrollPane scrollPane = new JScrollPane(textArea);
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
 
N

NichtExpert

Deine Beiden Varianten hatte ich auch schon ausprobiert.
Bei beiden funkioniert rein garnichts, ich schätze ich übersehe da 1 Stück Code der da noch rein muss, weiß aber nicht wo

Vielleicht kommt es sich am Ende in die quere, ich meine hier
Java:
JScrollPane scrollPane = new JScrollPane(textArea);
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);


panel.add(überschrift);
        panel.add(textArea);
        panel.add(button);
        panel.add(textField);
        panel.add(scrollPane);
Vielleicht gebe ich den ScrollPane doppelt an, und das Programm überschneidet sich und dadurch wird es nicht angezeigt
 
MoxxiManagarm

MoxxiManagarm

panel.add(textArea);
Das ist schonmal überflüssig. Die textArea ist ja schon in der ScollPane. Du fügst die TextArea in der ScrollPane hinzu und dann die ScrollPane dem panel. Ich sehe, dass du oben in deinem Null Layout aber versuchst die TextArea zu platzieren, du musst aber stattdessen die ScrollPane platzieren

Java:
JTextArea textArea = new JTextArea(5, 10);
// don't: textArea.setBounds(50, 100, 200, 160);
JScrollPane scrollPane = new JScrollPane(textArea);
scrollPane.setBounds(50, 100, 200, 160);
 
N

NichtExpert

Java:
panel.add(textArea);
Das meinte ich.
Habe das ganze umgesetzt.
Jetzt funktioniert es :D
Vielen Dank🙋‍♂️
 
Thema: 

Einer TextArea ein ScrollPane hinzufügen

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben