Swing JTextArea größe anpassen & setBackground liefer Nullpointer

[mic]

Mitglied
Hallo Leute,

ich hab gleich 2 Probleme mit JTextArea (java 1.6):

1. mein JTextArea ist soll platzmäßig in der Breite begenzt sein und falls der Text länger ist in der Höhe "wachsen" (und nicht in einem Scrollpane sein). Allerdings habe ich keinen Weg gefunden abzufragen wieviele Zeilen im jTA besetzt sind um es entsprechend zu vergrößern. Auch die gefundene Lösung mit getLineCount() hat nicht die Zeilen gebracht die er anzeigt sondern immer 1. Ich hab dann versucht Problem zu umgehen in dem ich es in ein ScrollPane stecke und wollte abfragen ob die Vertikalen Scrollbalken da sind, aber wiederum ohne Erfolg, habe kein möglichkeit gefunden abzufragen ob sie aktuell angezeigt werden.

2. Beim aufrufen meines Objekts wird im der Hintergrund des jTA gesetzt, alles wunderbar. Wenn ich aber setBackground() in einer Methode aufrufe bekomme ich eine NullpointerException.

Der funktionierende Konstrukturaufruf:
Java:
 private void init(){
        this.setSize(STDFIELDWIDTH, STDFIELDHEIGHT);

        jTADescription = new javax.swing.JTextArea();
        jTFInputField = new javax.swing.JTextField();

        jsp = new JScrollPane();
        jsp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); //keine horizontale Scrollbar
        //jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
        jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); //vertikale Scrollbar nur bei Bedarf
        jsp.setViewportView(jTADescription);
        jsp.setBorder(null);


        //setMaximumSize(new java.awt.Dimension(STDFIELDWIDTH, STDFIELDHEIGHT));
        //setMinimumSize(new java.awt.Dimension(STDFIELDWIDTH, STDFIELDHEIGHT));
        //setPreferredSize(new java.awt.Dimension(STDFIELDWIDTH, STDFIELDHEIGHT));
        setRequestFocusEnabled(false);
        setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

        jTADescription.setLineWrap(LINEBREAK);
        jTADescription.setFont(FONT);
        jTADescription.setDisabledTextColor(jTADescription.getForeground());
        jTADescription.setEditable(true);
        //+++++++++++++++++++++++++++
        jTADescription.setBackground(this.getBackground());
        //+++++++++++++++++++++++++++
        jTADescription.setWrapStyleWord(WORDBREAK);

        add(jsp, new org.netbeans.lib.awtextra.AbsoluteConstraints(LEFTSPACE, UPPERSPACE, getWidth()-RIGHTSPACE-LEFTSPACE-MIDDLESPACE-STDTEXTFIELDWIDTH, STDTEXTFIELDHEIGHT));

        jsp.getAccessibleContext().setAccessibleName("");

        jTFInputField.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
        jTFInputField.setFont(FONT);
        jTFInputField.addActionListener(new java.awt.event.ActionListener() {

            @Override
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTFInputFieldActionPerformed(evt);
            }
        });
        jTFInputField.addFocusListener(new java.awt.event.FocusAdapter() {

            @Override
            public void focusLost(java.awt.event.FocusEvent evt) {
                jTFInputFieldFocusLost(evt);
            }
        });

        add(jTFInputField, new org.netbeans.lib.awtextra.AbsoluteConstraints(getWidth()-RIGHTSPACE-STDTEXTFIELDWIDTH, UPPERSPACE, STDTEXTFIELDWIDTH, STDTEXTFIELDHEIGHT));
        
    }

Hier der aufruf der eine Exception wirft:

Java:
 @Override
    public void setBackground(Color c){
        super.setBackground(c);
        jTADescription.setBackground(c);
    }

Die Exception:

Java:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at bacc.CRFCore.FieldTextfield.setBackground(FieldTextfield.java:101)
        at javax.swing.LookAndFeel.installColors(LookAndFeel.java:158)
        at javax.swing.LookAndFeel.installColorsAndFont(LookAndFeel.java:194)
        at javax.swing.plaf.basic.BasicPanelUI.installDefaults(BasicPanelUI.java:49)
        at javax.swing.plaf.basic.BasicPanelUI.installUI(BasicPanelUI.java:39)
        at javax.swing.JComponent.setUI(JComponent.java:662)
        at javax.swing.JPanel.setUI(JPanel.java:136)
        at javax.swing.JPanel.updateUI(JPanel.java:109)
        at javax.swing.JPanel.<init>(JPanel.java:69)
        at javax.swing.JPanel.<init>(JPanel.java:92)
        at javax.swing.JPanel.<init>(JPanel.java:100)
        at bacc.CRFCore.CRFContainer.<init>(CRFContainer.java:18)
        at bacc.CRFCore.Field.<init>(Field.java:29)
        at bacc.CRFCore.FieldTextfield.<init>(FieldTextfield.java:37)
        at bacc.CRFCore.FieldNumeric.<init>(FieldNumeric.java:41)
        at bacc.CRFCore.FieldInt.<init>(FieldInt.java:29)
        at bacc.garbage.TestFrame$1.run(TestFrame.java:53)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Zeile 101 = jTADescription.setBackground(c);

ich hab mit den Debugger gecheckt dass C wirklich nicht null ist (javax.swing.plaf.ColorUIResource[r=238,g=238,b=238]) , hab auch probiert
Java:
jTADescription.setBackGround(super.getBackground());

ber ohne Erfolg.

Vl weis einer von Euch Rat.

Danke,
mfg mic
 

KrokoDiehl

Top Contributor
Bzgl der NullPointerException:
Mach eine null-Abfrage in die überschriebene
Code:
setBackground()
-Methode. Swing installiert das Look&Feel zu Beginn, da sind einige deiner Objekte noch nicht instanziiert, also null. Wenn dadurch die initiale Hintergrundfarbe fehlt, muss du sie wohl beim Layouting nochmal setzen.

Ansonsten: Was macht denn deine TextArea, wenn due LineWrap auf false setzt und es in keine ScrollPane machst? Vielleicht reicht das schon.
 

[mic]

Mitglied
Danke, die Nullpointer konnte ich Griff bekommen:

Java:
 @Override
    public void setBackground(Color c){
        super.setBackground(c);
        try{
            jTADescription.setBackground(super.getBackground());
        }catch(NullPointerException e){
            System.out.println("TEST");
        }
    }

;) man möge meinen Umgang mit der Exception entschuldigen ^^


ABER bei Problem 1: beim JTEXTAREA, passiert wenn ich linewrap deaktiviere und kein Scrollpane habe, das was man erwartet, ein Textfeld mit einem zu langem Text, der sich aber nicht scrollen lässt sondern abgeschnitten wird. Hab jetzt auch noch probiert abzufragen den Curser an des ende des Textes zu stellen, kann dann aber nur abfragen hinter welchem Zeichen (z.B. 63) er steht und nich seine Koordinaten, mit denen könnte ich sonst ausrechnen ob er in der nächsten zeile ist. Wenn ich irgendwie ausrechnen könnte wieviele Pixel ein Text bei einer gegebenen Schriftart einnimmt würde das auch helfen.

Danke,
lg mic
 
Zuletzt bearbeitet:

chriis

Aktives Mitglied
Du kannst dir die Breite des Strings über eine Instanz der Graphics-Konponente errechnen.
Java:
Graphics g 
  g.getFontMetrics().stringWidth("Ich bin ein String");

Ich kann dir aber nicht sagen, ob das auch ohne das Graphics Objekt geht.
 

[mic]

Mitglied
Danke, diese Möglichkeit hatte ich mittelerweile auch schon gefunden. Es war aber zusätzlich noch den LayoutManager gewechselt, also nicht wundern wenn der Code anders aussieht:

Java:
    private void init(){
        this.setPreferredSize(new Dimension(STDFIELDWIDTH, STDFIELDHEIGHT));
        this.setSize(this.getPreferredSize());

        jTADescription = new javax.swing.JTextArea();
        jTFInputField = new javax.swing.JTextField();

        jsp = new JScrollPane();
        jsp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); //keine horizontale Scrollbar
        jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); //vertikale Scrollbar nur bei Bedarf

        jsp.setViewportView(jTADescription);
        jsp.setBorder(null); //keine Border erwünscht

        setRequestFocusEnabled(false);
        setLayout(new FlowLayout(UPPERSPACE));

        jTADescription.setLineWrap(LINEBREAK); //Zeileinumbruch
        jTADescription.setFont(FONT); //Schriftart setzen
        jTADescription.setDisabledTextColor(jTADescription.getForeground());
        jTADescription.setEditable(false);
        jTADescription.setBackground(this.getBackground());
        jTADescription.setWrapStyleWord(WORDBREAK); //nur nach einem Wort brechen

        jTADescription.setPreferredSize(new Dimension(getWidth()-RIGHTSPACE-LEFTSPACE-MIDDLESPACE-STDTEXTFIELDWIDTH, STDTEXTFIELDHEIGHT));
        jTADescription.setSize(jTADescription.getPreferredSize());
        jsp.setPreferredSize(new Dimension(getWidth()-RIGHTSPACE-LEFTSPACE-MIDDLESPACE-STDTEXTFIELDWIDTH, STDFIELDHEIGHT-UPPERSPACE-LOWERSPACE));

        jsp.getAccessibleContext().setAccessibleName("");

        jTFInputField.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
        jTFInputField.setFont(FONT);
        jTFInputField.addActionListener(new java.awt.event.ActionListener() {

            @Override
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTFInputFieldActionPerformed(evt);
            }
        });
        jTFInputField.addFocusListener(new java.awt.event.FocusAdapter() {

            @Override
            public void focusLost(java.awt.event.FocusEvent evt) {
                jTFInputFieldFocusLost(evt);
            }
        });

        jTFInputField.setPreferredSize(new Dimension(STDTEXTFIELDWIDTH, STDTEXTFIELDHEIGHT));
        jTADescription.setBackground(this.getBackground());

        add(jsp);
        add(jTFInputField);
    }

Methode zum ändern der Größe wenn der Text geändert wird:

Java:
public void setDescription(String description) {
        if(description==null) description=""; //null abfangen

        //Anzahl der ungefähren Zeilen ausrechnen, die Ungenauigkeit kommt von WORDBREAK, das kann die Funktion nicht einberechnen
        int lines = (int)((float)(jTADescription.getFontMetrics(FONT).stringWidth(description))/(float)(getWidth()-RIGHTSPACE-LEFTSPACE-MIDDLESPACE-STDTEXTFIELDWIDTH)+0.99);

        //Größe des Panels im Verhältnis anpassen
        setPreferredSize(new Dimension(getWidth(), (lines*STDTEXTFIELDHEIGHT+(STDFIELDHEIGHT-STDTEXTFIELDHEIGHT))));
        this.setSize(this.getPreferredSize());

        //Größe des ScrollPanes anpassen
        jsp.setPreferredSize(new Dimension((int)jsp.getPreferredSize().getWidth(), lines*jTADescription.getFontMetrics(FONT).getHeight()+8));
      
        //Textsetzen
        jTADescription.setText(description);
    }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B JTextArea Größe an Container anpassen AWT, Swing, JavaFX & SWT 2
T Die Größe einer JTextArea an Ihren Parent JPanel anpassen. AWT, Swing, JavaFX & SWT 5
J Größe einer JTextArea dynamisch anpassen. AWT, Swing, JavaFX & SWT 2
S Größe von jPanel bzw. jTextArea (in jScrollpane) anpassen AWT, Swing, JavaFX & SWT 1
K JTextArea ändert Größe. AWT, Swing, JavaFX & SWT 3
P JTextArea veränder Größe während Laufzeit; GridBagLayout AWT, Swing, JavaFX & SWT 8
D JButton und JTextArea nehmen die Größe nicht an AWT, Swing, JavaFX & SWT 2
T Swing Mehrere Ausgaben in JTextArea AWT, Swing, JavaFX & SWT 2
B JPanel-Inhalte inkl. JTextarea zoomen? AWT, Swing, JavaFX & SWT 3
P JTextarea (in JScrollPane) zeigt nur die beiden letzten Einträge an? AWT, Swing, JavaFX & SWT 0
RedEagle Swing JTextArea ist leer AWT, Swing, JavaFX & SWT 13
E Warum wird Text im JTextArea erst am Programmende angezeigt ? AWT, Swing, JavaFX & SWT 1
E wie in JScrollPane auf JTextArea zugreifen AWT, Swing, JavaFX & SWT 12
K Swing 2 JTextArea parrallel scrollable AWT, Swing, JavaFX & SWT 16
Hatsi09 JTextArea Inhalt verlinken AWT, Swing, JavaFX & SWT 4
ralfb1105 jTextArea Scrollbar hinzufügen - mit Jigloo erstellt AWT, Swing, JavaFX & SWT 7
S Ausgabe in JTextArea AWT, Swing, JavaFX & SWT 13
H JTextArea - farbige Zeilen .. bitte um Vorschläge zur Implementierung AWT, Swing, JavaFX & SWT 1
F 2D-Grafik JTextArea drucken bringt mieses Ergebnis AWT, Swing, JavaFX & SWT 2
Mario1409 Swing JTextArea scroll Problem AWT, Swing, JavaFX & SWT 0
Bluedaishi JTextArea gefundene Zeile nach Oben Scrollen AWT, Swing, JavaFX & SWT 13
S JTextArea Text nach oben wandern lassen AWT, Swing, JavaFX & SWT 7
Bluedaishi JtextArea AWT, Swing, JavaFX & SWT 6
V JScrollBar soll weiterscrollen, wenn Inhalt von JTextArea erweitert wird AWT, Swing, JavaFX & SWT 7
G JTextArea mit JScrollPane wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
Bluedaishi JDialog modal und JTextArea AWT, Swing, JavaFX & SWT 4
F JTextarea Steuern ~ consolenanbindung AWT, Swing, JavaFX & SWT 5
F Event Handling JTextArea auf bestimmte Eingabe reagieren (Return-Taste) AWT, Swing, JavaFX & SWT 2
F JTextArea hat keinen Rahmen AWT, Swing, JavaFX & SWT 10
N JTextArea Events weiterleiten AWT, Swing, JavaFX & SWT 3
R JTextArea mit verschiedenen Textfarben AWT, Swing, JavaFX & SWT 6
M JTextArea wird nicht aktualisiert (ActionListener-Problem) AWT, Swing, JavaFX & SWT 1
HoloYoitsu jTextArea.setCaretPosition(); What am I doing wrong? AWT, Swing, JavaFX & SWT 0
S Zeilenumbruch jTextArea mit toString AWT, Swing, JavaFX & SWT 2
F Swing String[] in JTextArea ausgeben. Jeder Eintrag in neue Zeile, aber ohne "\n"- Geht das? AWT, Swing, JavaFX & SWT 3
M JTextArea - Leertaste "sperren" AWT, Swing, JavaFX & SWT 1
S Inhalt der Java-Konsole in die JTextArea AWT, Swing, JavaFX & SWT 3
M Swing JTextArea mit ScrollBar AWT, Swing, JavaFX & SWT 9
S Swing Zahl der Zeilenumbrüche in einer JTextArea bestimmen AWT, Swing, JavaFX & SWT 1
F Swing Caret in JTextArea vergrößern AWT, Swing, JavaFX & SWT 2
D JTextArea auf KeyListener Command AWT, Swing, JavaFX & SWT 6
N JFrame änliches wie JTextArea? AWT, Swing, JavaFX & SWT 2
A Swing JTextArea - Multi-Line-Editing AWT, Swing, JavaFX & SWT 2
A Swing JTextArea aus anderer Klasse in realtime aktualisieren AWT, Swing, JavaFX & SWT 3
O JTextArea befüllen AWT, Swing, JavaFX & SWT 2
G JTextArea on the fly aus anderem Programm befüllen AWT, Swing, JavaFX & SWT 4
A Swing Einrücken mehrerer Zeilen per Tab in einem JTextPane/JTextArea AWT, Swing, JavaFX & SWT 3
T Swing Ausgabe aus ArrayList in Klasse1 in jTextArea in Klasse2 AWT, Swing, JavaFX & SWT 2
B Drucken der JTextArea AWT, Swing, JavaFX & SWT 4
M JTextArea Zeile hinzufügen AWT, Swing, JavaFX & SWT 4
C JTextArea scrollt bei append(String) aus Threads nicht ans Ende AWT, Swing, JavaFX & SWT 7
P JPanel- Listener durch JTextArea aktivieren AWT, Swing, JavaFX & SWT 8
A JTextArea - Zeichenbegrenzung nach .txt Datei import AWT, Swing, JavaFX & SWT 6
M Swing JScrollPane (Parent JTextArea) aktualisieren + neue Zeile AWT, Swing, JavaFX & SWT 5
Hoppelmann Swing Tasten in JTextArea blockieren AWT, Swing, JavaFX & SWT 2
S JTextArea Tastaturanschläge AWT, Swing, JavaFX & SWT 2
E Swing JTextArea in JFrame, wie nun WindowFocusListener implementieren? AWT, Swing, JavaFX & SWT 2
S Problem mit JButton und JTextArea AWT, Swing, JavaFX & SWT 2
J Swing Mitwachsende JTextArea+ JPanel AWT, Swing, JavaFX & SWT 4
P Swing JtextArea füllen mit setText AWT, Swing, JavaFX & SWT 7
M Probleme mit der Selektion einer JTextArea AWT, Swing, JavaFX & SWT 3
hdi Swing ListCellRenderer + JTextArea + LineWrap AWT, Swing, JavaFX & SWT 6
T ComponentOrientation in JTextArea AWT, Swing, JavaFX & SWT 3
H Hintergrundbild in jTextArea AWT, Swing, JavaFX & SWT 4
G Swing JTextArea mit fester Anzahl Spalten! AWT, Swing, JavaFX & SWT 10
G ein JTextArea in zwei JPanels AWT, Swing, JavaFX & SWT 2
L JTextArea mit JScrollPane AWT, Swing, JavaFX & SWT 7
padde479 Swing replace JTextArea funktioniert nicht AWT, Swing, JavaFX & SWT 2
L Zeilenumbrüche aus JTextArea MIT in Textdatei schreiben AWT, Swing, JavaFX & SWT 4
_dp jTextArea/jTextPanel Auto Höhe AWT, Swing, JavaFX & SWT 5
Ollek JTextArea - Feste Zeilenanzahl(8 Zeilen) AWT, Swing, JavaFX & SWT 3
S Swing JTextArea während der Laufzeit füllen AWT, Swing, JavaFX & SWT 5
Ollek Text in JTextField und JTextArea zur Laufzeit ändern AWT, Swing, JavaFX & SWT 6
P Datenelement anderer Klasse in JTextArea ausgeben AWT, Swing, JavaFX & SWT 4
P Scrollbar JTextArea AWT, Swing, JavaFX & SWT 23
M Swing Ausgabe in JTextArea verzögern AWT, Swing, JavaFX & SWT 7
T Swing jTextArea soll sich der Fenstergröße anpassen beim ziehen?? AWT, Swing, JavaFX & SWT 2
S System.out in JTextArea AWT, Swing, JavaFX & SWT 4
S Swing JTextArea - Bild auf/ab Tasten implementieren AWT, Swing, JavaFX & SWT 4
J JTextArea verschwindet bei resize vom JFrame AWT, Swing, JavaFX & SWT 2
VfL_Freak "setAccelerator/KeyStroke" bei JTextArea ? AWT, Swing, JavaFX & SWT 6
P Swing JTextArea - beim neuzeichnen bleibt manchmal weißer Kasten AWT, Swing, JavaFX & SWT 10
Dit_ JTextArea zu Zeile X scrollen AWT, Swing, JavaFX & SWT 4
H variable Höhe einer JTextArea (als Renderer/Editor) als Zelle einer JTable AWT, Swing, JavaFX & SWT 9
B Wechsel JTextArea und JComponent AWT, Swing, JavaFX & SWT 9
M [erledigt] Bestimmte Zeile aus JTextArea löschen AWT, Swing, JavaFX & SWT 3
G Swing JTable und JTextArea synchronisieren AWT, Swing, JavaFX & SWT 2
C JLabel, JTextArea, JScrollPane. repaint(); ? AWT, Swing, JavaFX & SWT 6
M JTextArea AWT, Swing, JavaFX & SWT 2
E Swing JTextArea Alternative? AWT, Swing, JavaFX & SWT 5
A Swing JTextArea über Frame hinaus anzeigen? AWT, Swing, JavaFX & SWT 2
S JInternalFrame oder JTextArea neu laden AWT, Swing, JavaFX & SWT 2
N JTextArea.setLineWrap Bug? AWT, Swing, JavaFX & SWT 3
N Swing JTextArea/JScrollpane: JScrollbar position AWT, Swing, JavaFX & SWT 8
I JTextArea mit Copy Paste Funktion AWT, Swing, JavaFX & SWT 7
Plastagen JTextArea CaretPosition Aktualisierung AWT, Swing, JavaFX & SWT 10
C JTextField und JTextArea - Verständnisproblem AWT, Swing, JavaFX & SWT 14
B Exceptions werfen und in JTextArea ausgeben AWT, Swing, JavaFX & SWT 4
F new Line in JTextarea AWT, Swing, JavaFX & SWT 15
X Problem bei JTextArea und Thread.sleep() AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen

Neue Themen


Oben