如何创建用户可以输入大量文本的文本框

时间:2012-02-29 17:39:35

标签: java swing

我目前正在进行Java任务,作为计算机科学新手。作为该任务的一部分,我试图建立一个用户可以编写UML代码的辅助框架,然后将其传递到我的主应用程序中,然后传递到类图中。

我所坚持的那一点是我放入这个辅助帧的JTextBox是我想要它的大小,但是写入从中间开始,并且在写入时不会更改为新行它到达框架的另一个大小。

这是目前正在发生的事情的形象:

Image of output]![The output of my current code

代码

如果需要的话,这是我目前为此课程编写的代码。

package classdesign;
import java.awt.*;

import javax.swing.*;

 public class ClassCreation extends JFrame {

private JFrame frame;
private JLabel instructionlabel;
private JTextField inputUML;
private JButton upButton;
private String Message;

 public void ClassCreation(){

   frame = new JFrame();
   frame.setSize(300, 400);
   frame.setLocationRelativeTo(null);
   frame.setVisible(true);
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   frame.setTitle("Class Design");

   JPanel CreationPanel = new JPanel();
   CreationPanel.setLayout(new BorderLayout());

   instructionlabel = new JLabel("Fill Class details in using UML");
   CreationPanel.add(instructionlabel,BorderLayout.NORTH);

   inputUML = new JTextField("",20);
   CreationPanel.add(inputUML,BorderLayout.CENTER);

   frame.add(CreationPanel);
 }

   public Frame getFrame() {
       return frame;
   }
}

所以,总结一下我希望有人可以告诉我该怎么做是让用户的文本输入从左上角开始,当它到达最右边时改为下一行,就像任何正常情况一样文本编辑器等......

3 个答案:

答案 0 :(得分:6)

使用JTextPane或JEditorPane。样品可以在 http://docs.oracle.com/javase/tutorial/uiswing/components/editorpane.html

答案 1 :(得分:6)

  

JTextField是一个轻量级组件,允许编辑单行文本。 (source

因为它是一个单行组件,无论它的大小如何,光标将始终居中并且永远不会转到下一行。

我建议您使用JTextArea因为它是一个多行区域,并允许用户输入您想要的输入。

答案 2 :(得分:4)

使用文本区域的示例(免费提供一些其他提示 - 检查评论)。

ClassCreation

import java.awt.*;
import javax.swing.*;

// Has an instance of frame, does not need to extend it.
public class ClassCreation { //extends JFrame {

    private JFrame frame;
    private JLabel instructionlabel;
    // as mentioned by talnicolas
    private JTextArea inputUML;

    // Don't give a method the same name as a class!!
    //public void ClassCreation(){
    public void initGui(){
        frame = new JFrame();
        //frame.setSize(300, 400);  //pack() instead!
        //frame.setLocationRelativeTo(null);    // do something better
        frame.setLocationByPlatform(true);  // better!
        //frame.setVisible(true);   // do later
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setTitle("Class Design");

        JPanel CreationPanel = new JPanel();
        CreationPanel.setLayout(new BorderLayout());

        instructionlabel = new JLabel("Fill Class details in using UML");
        CreationPanel.add(instructionlabel,BorderLayout.NORTH);

        inputUML = new JTextArea("",7,30);
        // very important next 2 lines
        inputUML.setLineWrap(true);
        inputUML.setWrapStyleWord(true);
        // add it to a scrollpane
        CreationPanel.add(new JScrollPane(inputUML),BorderLayout.CENTER);

        frame.add(CreationPanel);

        frame.pack();   // assume the natural size!
        frame.setVisible(true);

        for (int ii=0; ii<150; ii++) {
            inputUML.append(SENTENCE);
            inputUML.setCaretPosition( inputUML.getText().length() );
        }
    }

    public static void main(String[] args) {
        // Swing GUIs should be created and altered on the EDT.
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                ClassCreation cc = new ClassCreation();
                cc.initGui();
            }
        });
    }

    private static String SENTENCE = "The quick brown fox jumps over the lazy dog!  ";
}