Как создать текстовое поле, в которое пользователь может ввести большое количество текста - PullRequest
4 голосов
/ 29 февраля 2012

В настоящее время я делаю задание по 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 ]

6 голосов
/ 29 февраля 2012

JTextField - это легкий компонент, который позволяет редактировать одну строку текста. ( источник )

Поскольку это однострочный компонент, независимо от его размера курсор всегда будет центрирован и никогда не перейдет на следующую строку.

Я бы предложил вам использовать JTextArea , так как это многострочная область, и пользователь может вводить данные так, как вы этого хотите.

6 голосов
/ 29 февраля 2012

используйте JTextPane или JEditorPane. Образец можно найти на http://docs.oracle.com/javase/tutorial/uiswing/components/editorpane.html

4 голосов
/ 29 февраля 2012

Пример использования текстовой области (с несколькими другими бесплатными советами - проверьте комментарии).

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!  ";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...