[英]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
,然后添加包含JScrollPane
的area
。
這是錯誤的, Component
不能多次添加。 最后一個添加將獲勝,因此您最終得到的JFrame
包含JTextArea
和現在包含null
的JScrollPane
之間的混合。
為了解決這個問題,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.