2016-05-04 12 views
1

シンプルなメモ帳を作成します。私はJTextAreaを使用してテキストを書きましたが、scrollbarJTextAreaになります。私はいくつかのコード行を書きました。JTextAreaにJScrollPaneを追加するには

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(); 
    } 
} 

どこに問題があるのか​​わかりません。

+1

十分でしょうか?何かエラーがありますか? – Mxsky

+0

私はこのコードを試しましたが、うまくいくようです。問題はどこですか? – RAnders00

答えて

0

ここに三つの問題があります。

1)areaが初期化される前に、あなたは、JScrollPaneareaを追加しますが。

だからnull成分を含むJScrollPaneで終わります。この問題を解決するには

は、JScrollPaneに追加する前にareaをインスタンス化します。

2)あなたは、あなたがareaを含むJScrollPaneを追加し、JFrameareaを追加します。

これは間違っている、Componentを複数回追加することはできません。最後の添加が勝つので、あなたのJFrameJTextArea、今nullを含むJScrollPaneのミックスを含むで終わります。 add(area);を削除ジュスト、この問題を解決するには

。あなたはあまりにも早くsetVisibleを呼び出す

3)

あなたは、すべてのコンポーネントが追加されたときにのみ、setVisible(true)を呼び出す必要があります。

次のコードは、(コメントは、変更のために追加されている)は、2つの関連した方法に従って修飾を示す:

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

おかげでbruh、それは上司のように働いた:D –

0

あなたは領域をインスタンス化する前に、スクロールペインに領域を追加しました。スクロール領域とインスタンスのインスタンス化を切り替えるだけです。

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

が動作していない何

関連する問題