簡體   English   中英

如何在JTextArea上添加JScrollPane

[英]How to add JScrollPane on JTextArea

我要制作一個簡單的記事本。 我已經使用JTextArea在其中編寫了一些文本,我想在JTextArea scrollbar 我寫了幾行代碼。

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)在初始化area之前,將area添加到JScrollPane

所以最終得到一個包含null組件的JScrollPane

要解決此問題,請在將area添加到JScrollPane之前實例化area

2)您將area添加到JFrame ,然后添加包含JScrollPanearea

這是錯誤的, Component不能多次添加。 最后一個添加將獲勝,因此您最終得到的JFrame包含JTextArea和現在包含nullJScrollPane之間的混合。

為了解決這個問題,juste刪除add(area);

3)你太早調用setVisible

只有在添加了所有組件后,才應調用setVisible(true)

以下代碼顯示了對兩個相關方法的相應修改(已為更改添加了注釋):

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

在實例化區域之前,您已將區域添加到滾動窗格。 只需切換滾動和區域實例化行。

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

應該夠了

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM