2016-05-04 12 views
1

Ich werde einen einfachen Editor erstellen. Ich habe JTextArea zum Schreiben von etwas Text verwendet und ich möchte scrollbar auf . Ich habe ein paar Zeilen Code geschrieben.Wie JScrollPane auf JTextArea hinzufügen

package project.notepad; 

import javax.swing.*; 
import java.awt.*; 

public class Notepad extends JFrame { 
    private JTextArea area; 
    private JMenu filemenu; 
    private JMenu editmenu; 
    private JMenu formatmenu; 
    private JMenu helpmenu; 
    private JScrollPane scroll; 

    private JMenuBar menubar; 
    private JMenuItem newmenuitem; 
    private JMenuItem openmenuitem; 
    private JMenuItem savemenuitem; 
    private JMenuItem exitmenuitem; 


    public Notepad() { 
     initComponents(); 
     setComponents(); 

     setTitle("Simple Notepad"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setVisible(true); 
     setResizable(true); 
     setSize(600, 600); 
     setJMenuBar(menubar); 


     menubar.add(filemenu); 
     menubar.add(editmenu); 
     menubar.add(formatmenu); 
     menubar.add(helpmenu); 
     filemenu.add(newmenuitem); 
     filemenu.add(openmenuitem); 
     filemenu.add(savemenuitem); 
     filemenu.add(exitmenuitem); 

     add(area); 
     add(scroll); 
    } 


    public final void initComponents() { 
     scroll = new JScrollPane(area, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 
     area = new JTextArea(); 
     menubar = new JMenuBar(); 
     filemenu = new JMenu(" File"); 
     editmenu = new JMenu(" Edit"); 
     formatmenu = new JMenu(" Format"); 
     helpmenu = new JMenu(" Help"); 
     newmenuitem = new JMenuItem(" New"); 
     openmenuitem = new JMenuItem(" Open"); 
     savemenuitem = new JMenuItem(" Save"); 
     exitmenuitem = new JMenuItem(" Exit"); 
    } 

    public final void setComponents() { 
     area.setSize(600, 600); 
     area.setBackground(Color.WHITE); 
    } 


    public static void main(String[] args) { 
     new Notepad(); 
    } 
} 

Ich bin mir nicht sicher, wo das Problem liegt.

+1

Was nicht funktioniert? Hast du einen Fehler, etwas? – Mxsky

+0

Ich habe gerade diesen Code ausprobiert und es scheint zu funktionieren. Wo ist das Problem? – RAnders00

Antwort

0

Es gibt drei Probleme hier:

1) Sie fügen die area zum JScrollPane, bevor area initialisiert wird.

Sie enden also mit einer JScrollPane, die eine null Komponente enthält.

Um dies zu beheben, instanziieren Sie area bevor Sie es zur JScrollPane hinzufügen.

2) Sie fügen area zum JFrame, dann fügen Sie die JScrollPanearea enthält.

Dies ist falsch, ein Component kann nicht mehrmals hinzugefügt werden. Der letzte Zusatz wird gewinnen, also enden Sie mit Ihrem JFrame, der eine Mischung zwischen und JScrollPane enthält, die jetzt null enthält.

Um dies zu beheben, entfernen Sie einfach add(area);.

3) Sie rufen setVisible zu früh

sollten Sie setVisible(true) nennen, nur wenn alle Komponenten hinzugefügt wurden.

Der folgende Code zeigt die entsprechenden Änderungen an den beiden relevanten Methoden (Kommentare zu Änderungen hinzugefügt wurden):

public Notepad() { 
    initComponents(); 
    setComponents(); 

    setTitle("Simple Notepad"); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    setResizable(true); 
    setSize(600, 600); 
    setJMenuBar(menubar); 

    menubar.add(filemenu); 
    menubar.add(editmenu); 
    menubar.add(formatmenu); 
    menubar.add(helpmenu); 
    filemenu.add(newmenuitem); 
    filemenu.add(openmenuitem); 
    filemenu.add(savemenuitem); 
    filemenu.add(exitmenuitem); 

    //add(area); // remove this, the textarea is already added to the scrollpane 
    add(scroll); 

    // set the frame visible, only once all components have been added 
    setVisible(true); 
} 

public final void initComponents() { 

    area = new JTextArea(); // instantiate the textarea, before adding to the scrollpane 
    scroll = new JScrollPane(area, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 

    menubar = new JMenuBar(); 
    filemenu = new JMenu(" File"); 
    editmenu = new JMenu(" Edit"); 
    formatmenu = new JMenu(" Format"); 
    helpmenu = new JMenu(" Help"); 
    newmenuitem = new JMenuItem(" New"); 
    openmenuitem = new JMenuItem(" Open"); 
    savemenuitem = new JMenuItem(" Save"); 
    exitmenuitem = new JMenuItem(" Exit"); 
} 
+0

Danke bruh, es hat wie ein Chef funktioniert: D –

0

Sie den Bereich der Bildlauffenster hinzugefügt, bevor das Gebiet der Instanziierung. Wechseln Sie einfach Scroll- und Flächen Instanziierungslinien.

area = new JTextArea();  
scroll = new JScrollPane (area,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 

sollte genug sein

Verwandte Themen