如何允许用户更改文本窗格中的某些文本?

时间:2014-02-02 10:51:36

标签: java swing

有没有办法允许用户更改java中textpane上的某些文本?例如,如果我有一个文本窗格,就像这样;

textpane.setText("Please write your name here User, so it is easier for us to recognise");

如何制作,以便用户可以将“用户”的文字更改为其名称。

2 个答案:

答案 0 :(得分:1)

  

“我该如何制作,以便用户可以将'用户'的文字更改为他们的名字。”

为什么这样呢? IMO似乎对用户不友好,这意味着用户可能不知道你做了什么。使用文本窗格并要求用户输入将不是用户的习惯。

我建议使用JLabelJTextField。像这样的东西

enter image description here

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;


public class UserFriendly {

    JLabel beginLabel;
    JLabel endLabel;
    JLabel message;
    JTextField nameField;
    String name = "";

    public UserFriendly() {
        beginLabel = new JLabel("Please write your name here");
        nameField = new JTextField(10);
        endLabel = new JLabel("so it is easier for us to recognise");
        message = new JLabel("Hello, ");

        JPanel p1 = new JPanel();
        p1.add(beginLabel);
        p1.add(nameField);
        p1.add(endLabel);
        nameField.setBorder(new EmptyBorder(0, 2, 0, 2));

        message.setBorder(new LineBorder(Color.CYAN, 5));
        message.setHorizontalAlignment(JLabel.CENTER);
        message.setFont(new Font("helvitica", Font.BOLD, 16));

        nameField.getDocument().addDocumentListener(new DocumentListener() {

            @Override
            public void insertUpdate(DocumentEvent e) {
                message.setText("Hello, " + nameField.getText());
            }

            @Override
            public void removeUpdate(DocumentEvent e) {
                message.setText("Hello, " + nameField.getText());
            }

            @Override
            public void changedUpdate(DocumentEvent e) {
                throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
            }

        });

        JFrame frame = new JFrame("Test Card");
        frame.add(p1);
        frame.add(message, BorderLayout.PAGE_END);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new UserFriendly();
            }
        });
    }
}

<强>更新

此外,如果您只是将面板p1的背景设置为白色,它看起来就像没有边框的文本字段。如果您真的希望它具有文本字段外观,您也可以设置边框。

// add to code above
p1.setBackground(Color.white);
p1.setBorder(new LineBorder(Color.BLACK, 1));

enter image description here

如果您想在文本字段的底部添加一行,以便它更适合用户输入的内容,您可以使用MatteBorder,只需在边框的底部添加一行即可

p1.setBackground(Color.white);
p1.setBorder(new LineBorder(Color.BLACK, 1));
nameField.setBorder(new MatteBorder(0, 0, 1, 0, Color.BLACK));

enter image description here

答案 1 :(得分:0)

Hej Peter,

如果您只想让用户更改给定的文字,请尝试使用

textPane.setText("Please write your name here User, so it is easier for us to recognise");
textPane.setEditable(true);

通过设置textpane可编辑,用户可以更改文本,但如果应该永久更改,则必须在用户准备好后保存用户更改的文本!

帕特里克