我打算制作一个简单的记事本。我使用JTextArea
在其中编写了一些文字,我希望在scrollbar
上JTextArea
。我写了几行代码。
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();
}
}
我不确定问题出在哪里。
答案 0 :(得分:0)
这里有三个问题:
1)在area
初始化之前,您将JScrollPane
添加到area
。
因此,您最终得到的JScrollPane
包含null
组件。
要解决此问题,请在将area
添加到JScrollPane
之前对其进行实例化。
2)您将area
添加到JFrame
,然后添加包含JScrollPane
的{{1}}。
这是错误的,area
无法多次添加。最后一次添加会赢,所以最终您的Component
包含JFrame
和JTextArea
现在包含JScrollPane
的混合。
要解决此问题,请删除null
。
3)您过早致电add(area);
只有在添加了所有组件后才能调用setVisible
。
以下代码显示了对两个相关方法的相应修改(已为更改添加了注释):
setVisible(true)
答案 1 :(得分:0)
在实例化区域之前,您已将区域添加到滚动窗格。只需切换滚动和区域实例化行。
area = new JTextArea();
scroll = new JScrollPane (area,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
应该够了