2014-02-02 7 views
-1

есть ли способ разрешить пользователю изменять определенный текст на текстовой панели в java? так, например, если у меня есть текстовая панель, например;Как разрешить пользователю изменять определенный текст в текстовой области?

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

Как это сделать, чтобы пользователь мог изменить текст «Пользователь» на свое имя.

+0

Можете ли вы дать мне пример, потому что я не могу вас понять? вы хотите, чтобы пользователь изменил что? и где? –

+0

Это позволит пользователю только изменить бит пользователя и ничего больше? – Peter

+0

Итак, теперь текстовая панель содержит текст «Пожалуйста, напишите ваше имя здесь« Пользователь », чтобы нам было легче распознать», я хочу, чтобы пользователь мог изменять только текст «Пользователь», независимо от его желания, и ничего больше редактируемые ими. – Peter

ответ

0

Хей Питер,

, если вы хотите, чтобы позволить пользователю изменить данный текст попробовать этот

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

Устанавливая textpane редактирования, пользователь может изменить текст, но если он должен быть постоянно измененным, вы должны сохранить измененный текст пользователя после его готовности!

Патрик

+0

, но это не позволит пользователю изменять какой-либо текст в текстовой области, я только хочу разрешить пользователю изменять значение «Пользователь» в этой текстовой области. – Peter

+0

Причина, решение peeskillet является лучшим. – Patrick

1

«Как я могу сделать так, что пользователь может изменить текст„User“, чтобы их имя.»

Зачем это вообще? IMO кажется таким недружественным пользователем, что означает, что пользователь может не знать, что вы делаете. Использование текстовой панели и запрос пользователя на ввод не будут обычными для пользователя.

Я предлагаю использовать JLabel и JTextField. Что-то вроде этого

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(); 
      } 
     }); 
    } 
} 

UPDATE

Кроме того, если вы просто установить фон панели p1 белый, это будет выглядеть так же, как текстовое поле с не границы. Вы также можете установить границу, если хотите, чтобы она выглядела как текстовое поле.

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

enter image description here

Если вы хотите, чтобы добавить строку в нижней части текстового поля так что его более 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

+0

Это еще один способ сделать это, но я хотел бы знать, возможно ли разрешить пользователю изменять некоторые части текста текстовой панели. без огромного количества кода. – Peter

+0

Я не думаю, что две метки и текстовое поле - это огромное количество кода. –

+0

Пройдите через [эти учебники] (http://docs.oracle.com/javase/tutorial/uiswing/components/text.html), если вы действительно хотите идти своим путем. Но, как я уже сказал, кажется, что пользователь недружелюбен –

Смежные вопросы