Swing setLineWrap(true)

Hallo,

ich versuche bei einer JTextArea-Instanz setLineWrap(true) zu setzen. Die TextArea habe ich zusätzlich in ein ScrollPane gepackt und irgendwie wird ein leerer Frame angezeigt sobald ich setLineWrap(...) auf true setze.

Viele Grüße,
Johannes
 
Java:
final JTextArea xmlPane = new JTextArea();
xmlPane.setText(out.toString());
xmlPane.setMinimumSize(new Dimension(400, 600));

final JScrollPane xmlView = new JScrollPane(xmlPane);
xmlView.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);

// Add the scroll panes to a split pane.
JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
splitPane.setLeftComponent(treeView);
splitPane.setRightComponent(xmlView);
 

Ebenius

Top Contributor
Ist das Problem vom jeweiligen Text abhängig? Hast Du das selbe Problem auch, wenn Du einen einfachen String als Text übergibst? Sowas: [java=2]xmlPane.setText("A B C\nD E F");[/code]
Ebenius
 
Java:
      xmlPane.setEditable(false);
      xmlPane.setMinimumSize(new Dimension(400, 600));
      xmlPane.setColumns(80);
      xmlPane.setLineWrap(true);

Er zeigt mir immernoch nur den grauen Hintergrund des JFrames...
 

Ebenius

Top Contributor
Dann muss wohl mehr Code her. Mach halt mal ein KSKB und poste mal den Inhalt der Datei (bzw. häng sie als Anhang an). Ich probier dann auch mal rum.

Ebenius
 
Hm, das kann ich leider noch nicht machen weil der Source von dem XML-Datenbanksystem (noch) nicht Open Source ist :-/

Java:
      if ("".equals(xmlPane.getText())) {
        final IReadTransaction rtx = session.beginReadTransaction();
        final OutputStream out = new ByteArrayOutputStream();
        new XMLSerializer(rtx, out, true, false, true).call();
        xmlPane.setText(out.toString());
      }
      
      final Dimension prefSize = new Dimension(400, 600);
      
      xmlPane.setEditable(false);
      xmlPane.setMinimumSize(prefSize);
      xmlPane.setPreferredSize(prefSize);
      xmlPane.setColumns(80);
//      xmlPane.setLineWrap(true);

      final JScrollPane xmlView = new JScrollPane(xmlPane);
      xmlView.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
      xmlView.setMinimumSize(new Dimension(400, 600));

      // Add the scroll panes to a split pane.
      final JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
      splitPane.setLeftComponent(treeView);
      splitPane.setRightComponent(xmlView);

      xmlView.setMinimumSize(new Dimension(800, HEIGHT));
      treeView.setMinimumSize(new Dimension(200, HEIGHT));
      splitPane.setDividerLocation(200);
      splitPane.setPreferredSize(new Dimension(1000, HEIGHT));

      // Add the split pane to this panel.
      add(splitPane);

Aber ich werds wohl so machen, dass der XML-String selbst die Newlines und Einrückungen bekommt...

Viele Grüße,
Johannes
 

Ebenius

Top Contributor
Wie groß ist denn das XML? Falls der Text sehr lang ist: Was passiert, wenn Du den Text erstmal auf frei erfundene Längen kürzt? Versuch halt einen Zusammenhang zwischen dem Text und dem Fehler zu finden…

Ebenius
 
Jetzt habe ich das erst bemerkt, der scheint einfach so lange zu laden, weil es eine etwas größere XML-Datei ist. Da ich das aber sowieso performant halten wollte selbst bei wirklich rießigen XML-Dateien im Umfang von Wikipedia bspw. kann ich die Daten in einem weiteren Thread laden lassen und nur jeweils den Teil wirklich in die TextArea schreiben, den man auch sieht? Und dann abhängig von einem Scroll-Event neue Daten reinschreiben lassen? Da ich mich mit Swing leider noch so gut wie nicht auskenne wäre ich für alle Tipps oder konkreteren Vorschläge dankbar ;-)

Viele Grüße,
Johannes
 

Ebenius

Top Contributor
Sowas würde dann in einem selbst implementierten Document enden. Das geht mir dann allerdings etwas zu weit, da müsstest Du Dich selbst weit einarbeiten… :)

Ebenius
 
Ich denke ich muss setText(...) neu implementieren und die Zeichen Zählen, d.h. 80 in die Breite und dann schauen wie groß die Höhe der TextArea jeweils ist und jeweils genau so viel Zeichen ausgeben (oder halt weniger, falls weniger Text übrig ist). Kann ich den Aufruf von setText(...) irgendwie an einen Listener für die Scrollbar dann hängen? Aber ich glaube ich müsste dann auch den Bereich der Scrollbar irgendwie bestimmen, dass bspw. jeder Klick auf einen Pfeil der Scrollbar genau eine "Seite", d.h. einen vollen Bildschirmbereich weiterspringt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N JTextArea.setLineWrap Bug? AWT, Swing, JavaFX & SWT 3
M setLineWrap() + echten Zeilenumbruch AWT, Swing, JavaFX & SWT 4
M Seltsame Exception bei setVisible(true) Methode in einem JFrame AWT, Swing, JavaFX & SWT 2
VPChief Ein JFrame ohne setUndecorated(true); nicht verschiebbar machen. AWT, Swing, JavaFX & SWT 6
K Swing AWT-EventQueue-1 java.lang.NoClassDefFoundError bei setVisible(true) AWT, Swing, JavaFX & SWT 3
L LookAndFeel JInternalFrame aussehen isSelected() true vs false AWT, Swing, JavaFX & SWT 0
D Swing JButton.setenabled(true) funktioniert nicht AWT, Swing, JavaFX & SWT 12
B GlassPane setVisible(true) funktioniert nicht AWT, Swing, JavaFX & SWT 2
O Probleme bei setModal(true) AWT, Swing, JavaFX & SWT 8
T Swing JTable - true zurückbekommen, wenn der Cursor in einer Zelle blinkt AWT, Swing, JavaFX & SWT 7
F JCombobox zwischen setEditable true und false switchen AWT, Swing, JavaFX & SWT 2
Developer_X Swing JFrame.setUndecorated(true); AWT, Swing, JavaFX & SWT 5
D JCombox editable true AWT, Swing, JavaFX & SWT 5
W setUndecorated(true) AWT, Swing, JavaFX & SWT 2
T FocusTraversalPolicy und setEditable(true) AWT, Swing, JavaFX & SWT 3
C JWindow.setVisible(true) dauert ewig AWT, Swing, JavaFX & SWT 7
Z setUndecorated(true) <-> win 2000 <-> win xp AWT, Swing, JavaFX & SWT 13
L Checkbox in JTable (again), bei true Daten in Header AWT, Swing, JavaFX & SWT 7
F JComboBox setEditable( true ) auf Tastatur Events reagieren AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben