gpt4 book ai didi

java - 如何在 JTextArea 上添加 JScrollPane

转载 作者:太空宇宙 更新时间:2023-11-04 12:39:00 25 4
gpt4 key购买 nike

我要做一个简单的记事本。我已经使用 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) 您添加 areaJScrollPane ,之前 area已初始化。

所以你最终得到 JScrollPane包含null组件。

要解决此问题,请实例化 area在将其添加到 JScrollPane 之前.

2) 您添加 areaJFrame ,然后添加 JScrollPane包含area .

这是错误的,一个Component不能多次添加。最后添加的将获胜,因此您最终会得到 JFrame包含 JTextArea 之间的混合,以及 JScrollPane现在包含null .

要解决此问题,只需删除 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");
}

关于java - 如何在 JTextArea 上添加 JScrollPane,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37022645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com