Java JTextArea& JScrollPane无法正常工作

时间:2017-04-05 08:55:29

标签: java jscrollpane jtextarea

我正在编写带GUI的简单代码,该代码应该有一个应该可滚动的文本区域。到现在为止还挺好。 我创建了我的框架和文本区域,我可以写入它。接下来,我创建了我的ScrollPane并在其中添加了TextArea,然后将ScrollPane添加到框架中,但没有显示任何内容。 这是我现在的代码:

    JFrame frame = new JFrame();
    frame.setBounds(100, 100, 325, 300);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(null);

    //textArea
    JTextArea textArea = new JTextArea();
    textArea.setEnabled(true);
    textArea.setEditable(true);
    JScrollPane scroll = new JScrollPane(textArea,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    textArea.setBounds(10, 101, 272, 149);
    textArea.setWrapStyleWord(true);
    frame.getContentPane().add(scroll);

3 个答案:

答案 0 :(得分:3)

更改

 frame.getContentPane().setLayout(null);

 frame.getContentPane().setLayout(new BorderLayout());

你完成了

答案 1 :(得分:1)

您必须将边界设置为要添加到框架内容窗格的组件。在这种情况下,它应该是:scroll.setBounds(10,101,271,149)

但是,我强烈建议不要使用null layout。例如,使用您选择的布局管理器BorderLayout。在这种情况下,您不必担心边界,它将适合帧大小(当您更改帧的大小时它将调整大小)。这是你的例子,稍微调整一下:

import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class Test {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setBounds(100, 100, 325, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(new BorderLayout());

        // textArea
        JTextArea textArea = new JTextArea();
        textArea.setEnabled(true);
        textArea.setEditable(true);
        JScrollPane scroll = new JScrollPane(textArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        textArea.setWrapStyleWord(true);
        frame.getContentPane().add(scroll, BorderLayout.CENTER);

        frame.setVisible(true);
    }
}

答案 2 :(得分:0)

通过查看此案例,我仍然在学习。

我有几个问题:

  • 设置textArea的边界有问题

  • 框架/容器的布局不应设置为null。

我删除了这句话,我尝试了这段代码,它显示了所需的textArea。

import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

/*
* Tester class
*/
public class GuiTester extends JFrame{

public static void main(String[] args) {
    // create new instance of JFrame 
    GuiTester s = new GuiTester();
    // set the frame to be visible
    s.setVisible(true);
}
/**
 * Tester constructor calling method which initialise all widgets.
 */
GuiTester() {
    //
    invokeWidget();
}

/*
 * This code is yours, just removed setting up the values of container and did that straight on the frame.
 */
void invokeWidget() {
    setBounds(100, 100, 325, 300);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLayout(new BorderLayout());

    JTextArea textArea = new JTextArea();
    textArea.setEnabled(true);
    textArea.setEditable(true);
    JScrollPane scroll = new JScrollPane(textArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

    textArea.setWrapStyleWord(true);
    add(scroll);
}

}

这是导致问题的行,以及将布局管理器设置为null。

// textArea.setBounds(10,101,272,149);

我希望我能帮忙,如果我错了,请纠正我。