有没有办法允许用户更改java中textpane上的某些文本?例如,如果我有一个文本窗格,就像这样;
textpane.setText("Please write your name here User, so it is easier for us to recognise");
如何制作,以便用户可以将“用户”的文字更改为其名称。
答案 0 :(得分:1)
“我该如何制作,以便用户可以将'用户'的文字更改为他们的名字。”
为什么这样呢? IMO似乎对用户不友好,这意味着用户可能不知道你做了什么。使用文本窗格并要求用户输入将不是用户的习惯。
我建议使用JLabel
和JTextField
。像这样的东西
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));
如果您想在文本字段的底部添加一行,以便它更适合用户输入的内容,您可以使用MatteBorder
,只需在边框的底部添加一行即可
p1.setBackground(Color.white);
p1.setBorder(new LineBorder(Color.BLACK, 1));
nameField.setBorder(new MatteBorder(0, 0, 1, 0, Color.BLACK));
答案 1 :(得分:0)
Hej Peter,
如果您只想让用户更改给定的文字,请尝试使用
textPane.setText("Please write your name here User, so it is easier for us to recognise");
textPane.setEditable(true);
通过设置textpane可编辑,用户可以更改文本,但如果应该永久更改,则必须在用户准备好后保存用户更改的文本!
帕特里克