Frage von snipesss, 38

[JAVA] Wieso wird 'JTextArea' nicht angezeigt?

Code:

import static java.lang.System.out;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;

@SuppressWarnings({ "serial", "unused" })
public class GUI_1 extends JFrame {
public static void main(String[] args){
    
    JFrame frame = new JFrame();
    JPanel panel = new JPanel();
    JTextArea textarea = new JTextArea();
    JButton button = new JButton();
    JButton button2 =  new JButton();
    
    frame.getContentPane().setBackground(Color.gray.darker());
    frame.setSize(500, 300);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
    frame.setLocationRelativeTo(null);
    frame.setResizable(false);
    frame.setTitle("JFrame");
    frame.setLayout(null);
                            
    button = new JButton("Vor");
    button.setBounds(330 ,220 , 140, 30);
    button.setBackground(Color.gray);
    button.setToolTipText("Nächste Seite");
    frame.add(button);
    
    button2 = new JButton("Zurück");
    button2.setBounds(30 ,220 , 140, 30);
    button2.setBackground(Color.gray);
    button2.setToolTipText("Vorherige Seite");
    frame.add(button2);
    
    textarea = new JTextArea(4, 6);
    textarea.setText("In Java gibt es viele verschiedene Datentypen. Da ich Ihnen die Unübersichtlichkeit sparen möchte, "
            + "habe ich dieses Programm geschrieben. Dieses Programm enthält jeweils ein Beispiel zu je einem Datentypen. "
            + "Also, worauf warten Sie? Suchen Sie sich einen Datentypen aus!");
    textarea.setLineWrap(true);
    textarea.setWrapStyleWord(true);
    textarea.setVisible(true);
    frame.add(textarea);
    
    
        
    }
    
    
}
    
Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von KnusperPudding, Community-Experte für Java, 13

Das Element wird nicht angezeigt, da keine Größe zugeordnet ist.

Entsprechend setze hier einfach eine Größe.

textarea.setLineWrap(true);
textarea.setWrapStyleWord(true);
textarea.setSize(500, 100);

Dass du eine Größe angeben musst, liegt daran, dass du kein Layout verwendest.

Kommentar von snipesss ,

Und was bedeutet dann das?

setLayout(null);

Kommentar von KnusperPudding ,

setLayout(null);

Bedeutet, dass kein Layout gesetzt ist.

Um ein besseres Verständnis für Layouts zu bekommen solltest du dir ein Beispiel zum Thema Borderlayout ansehen.

Siehe hier:

http://www.java2s.com/Tutorial/Java/0240__Swing/WhatistheBorderLayout.htm

Kommentar von snipesss ,

Ok danke. Und wie setzte ich ein layout?

Kommentar von KnusperPudding ,
.setLayout(new BorderLayout());

Wie im Link zu sehen.

Da beim Borderlayout die Himmelsrichtungen eine Rolle spielen, muss das dann bei der add Methode berücksichtigt werden:

.add(label, BorderLayout.NORTH);
Antwort
von regex9, 13

Gib deinem Frame ein richtiges Layout, dann solltest du es sehen können.

Im Übrigen solltest du den Frame erst dann sichtbar machen, nachdem alle Komponenten initialisiert und hinzugefügt wurden. (Erst laden, dann zeigen)

Antwort
von Momischmiddi, 21

Wieso erbt deine Klasse denn von JFrame, wenn du dann eh mit einem anderen Objekt arbeitest? gewöhn dir bitte auch andere imports an das sieht schlimm aus..

import javax.swing.*;

import java.awt.*;

und du sparst dir schonmal 20 Zeilen..

Versuch mal für dein JFrame eine extra Klasse zu machen, nicht dass alles in der Main abläuft, das kann schon sein, dass sich das mal daran aufhängt..

Du initialisierst außerdem alle deine Objekte mehrmals, wieso auch immer.

Möchtest du z.B. auf einen JButton in anderen Methoden der Klasse zugreifen, musst du ihn als Klasseneigenschaft nicht zwingen initialisieren, ein Simples

JButton button2; würde dir reichen.. Meistenst ist das nicht so schlimm aber durch sowas können ab und zu komische Exceptions geworfen werden.

Arbeite auch bitte mit mehr Methoden.

Viele Grüße

Kommentar von snipesss ,

Und wieso wird der Text in JTextArea nicht angezeigt?

Kommentar von regex9 ,

Bei einem Punkt wäre ich nicht konform: Den Imports. Er lädt halt nur die Komponenten, die er auch wirklich braucht und das ist ok so.

Was meinst du mit den Exceptions, wann können die geworfen werden? Die Komponenten sollten halt spätestens dann initialisiert werden, wenn sie benötigt werden, das ist denke ich klar. Wenn sie als Eigenschaft/Feld/Attribut definiert werden, gehört natürlich noch ein access modifier dazu.

Keine passende Antwort gefunden?

Fragen Sie die Community