«Как я могу сделать так, что пользователь может изменить текст„User“, чтобы их имя.»
Зачем это вообще? IMO кажется таким недружественным пользователем, что означает, что пользователь может не знать, что вы делаете. Использование текстовой панели и запрос пользователя на ввод не будут обычными для пользователя.
Я предлагаю использовать JLabel
и JTextField
. Что-то вроде этого
![enter image description here](https://i.stack.imgur.com/mYn3B.gif)
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();
}
});
}
}
UPDATE
Кроме того, если вы просто установить фон панели p1
белый, это будет выглядеть так же, как текстовое поле с не границы. Вы также можете установить границу, если хотите, чтобы она выглядела как текстовое поле.
// add to code above
p1.setBackground(Color.white);
p1.setBorder(new LineBorder(Color.BLACK, 1));
![enter image description here](https://i.stack.imgur.com/msWiR.png)
Если вы хотите, чтобы добавить строку в нижней части текстового поля так что его более apperent пользователю, где они должны ввести, вы могли бы использовать 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](https://i.stack.imgur.com/qrY4k.png)
Можете ли вы дать мне пример, потому что я не могу вас понять? вы хотите, чтобы пользователь изменил что? и где? –
Это позволит пользователю только изменить бит пользователя и ничего больше? – Peter
Итак, теперь текстовая панель содержит текст «Пожалуйста, напишите ваше имя здесь« Пользователь », чтобы нам было легче распознать», я хочу, чтобы пользователь мог изменять только текст «Пользователь», независимо от его желания, и ничего больше редактируемые ими. – Peter