JScrollPane und JTextArea

Status
Nicht offen für weitere Antworten.

vogella

Bekanntes Mitglied
Hallo,

ich habe eine JTextArea mit ScrollPane. Wenn ich das Frame mit der Maus kleiner mache, verschwindet der Text und die Scrollbalken.

Ich würde gerne, daß die Scrollbalken sichtbar bleiben und, wenn möglich der Test auch stehen bleibt. Kann mir jemand sagen, wie das geht?

Viele Grüße, Lars

Kleines Beispiel:

Code:
/*
* ScrollDemo.java
*/
import java.awt.*;

import javax.swing.*;

public class ScrollPane1 extends JFrame {
    public ScrollPane1() {
        super("Scroll Demo");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        getContentPane().add(buildMainPanel(), java.awt.BorderLayout.SOUTH);
        pack();
        
    }

    
	private JPanel buildMainPanel() {
		JTextArea taRequirement = new JTextArea(40, 40); 	
		taRequirement.setText("Test");
		
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
		scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
		 scrollPane.getViewport().setView(taRequirement); 
		JPanel panel2 = new JPanel();
		panel2.add(scrollPane);
		return panel2;
	}
    public static void main(String args[]) {new ScrollPane1().setVisible(true);}

}
 
Code:
package text;
/*
 * ScrollDemo.java
 */
import java.awt.*;
import java.awt.event.*;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import javax.swing.*;
public class ScrollPane1 extends JFrame {
    public ScrollPane1() {
        super("Scroll Demo");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().add(buildMainPanel(), java.awt.BorderLayout.SOUTH);
        setSize(500,700);
        setLocationRelativeTo(null);
        addComponentListener(new ComponentAdapter() {
            public void componentResized(ComponentEvent e) {
                checkSize();
            }
        });
    }
    private JPanel buildMainPanel() {
        JTextArea taRequirement = new JTextArea(40,40);
        taRequirement.setText("Test");
        JScrollPane scrollPane = new JScrollPane();
        scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        scrollPane.getViewport().setView(taRequirement);
        JPanel panel2 = new JPanel(new BorderLayout());
        panel2.setPreferredSize(new Dimension(10,300));
        panel2.add(scrollPane);
        return panel2;
    }
    private void checkSize(){
        if(getSize().height < 400) setSize(getSize().width, 400);
    }
    public static void main(String args[]) {new ScrollPane1().setVisible(true);}
}
 
Hallo Andrè,

danke. Wenn ich das richtig sehe, macht diese Zeile den Unterschied...

Code:
 JPanel panel2 = new JPanel(new BorderLayout()); // Juhu



Viele Grüße, Lars
 
vogella hat gesagt.:
..Wenn ich das richtig sehe, macht diese Zeile den Unterschied...
Code:
 JPanel panel2 = new JPanel(new BorderLayout()); // Juhu
..
Ja, das ist wohl der Hauptpunkt, das ist schon richtig. Aber setSize/setPreferredSize gehören natürlich auch dazu.
 
Hallo Andrè,

danke noch mal.

Das hier macht, daß das was ich mir wünschte:

Code:
public class ScrollPane1 extends JFrame {
    public ScrollPane1() {
        super("Scroll Demo");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().add(buildMainPanel(), java.awt.BorderLayout.CENTER);
        //setSize(500,700);
        setLocationRelativeTo(null);
        pack();

    }
    private JPanel buildMainPanel() {
        JTextArea taRequirement = new JTextArea(20,40);
        taRequirement.setText("Test");
        JScrollPane scrollPane = new JScrollPane();
        scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        scrollPane.getViewport().setView(taRequirement);
        JPanel panel2 = new JPanel(new BorderLayout());
        panel2.add(scrollPane);
        return panel2;
    }

    public static void main(String args[]) {new ScrollPane1().setVisible(true);}
}

Viele Grüße, Lars
 
Hallo André,

wollte ich auch; war mir nicht bewußt, daß das einen Unterschied macht... 😳

Ok, dann reicht die eine Zeile doch nicht.

Danke, Lars
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben