JTextArea
の指定されたオフセットにテキストを設定したいとします。 "aaa bbb"
を既に編集していて、"bbb"
を "house"で上書きしたいとします。どのようにJavaで行うことができますか?JTextArea - 指定したオフセットでテキストを設定する方法は?
答えて
あなたはreplaceRange()
public void replaceRange(String str, int start, int end)
は、指定された新しいテキストでた開始位置から終了位置までのテキストを置き換えます使用することができます。モデルがnullの場合は何もしません。新しい文字列がnullまたは空の場合は、単に削除します。
このメソッドはスレッドセーフですが、ほとんどのSwingメソッドはそうではありません。詳細についてはスレッドとスイングを参照してください。
次の3つの方法setSelectionStart(...)、setSelectionEnd(...)とreplaceSelection(...)を見てする必要があります。ここで
は、あなたの原因を助けるために、少量のサンプルプログラムです:あなたの答えJigarため
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class TextAreaSelection
{
private JTextField replaceTextField;
private JTextField startIndexField;
private JTextField endIndexField;
private void createAndDisplayGUI()
{
final JFrame frame = new JFrame("JTextArea Selection");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setLocationByPlatform(true);
JPanel contentPane = new JPanel();
contentPane.setLayout(new BorderLayout(5, 5));
contentPane.setOpaque(true);
final JTextArea tarea = new JTextArea(10, 10);
tarea.setText("aaa bbb");
final JButton updateButton = new JButton("UPDATE TEXT");
updateButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
//tarea.setSelectionStart(4);
//tarea.setSelectionEnd(7);
//tarea.replaceSelection("house");
int selection = JOptionPane.showConfirmDialog(null, getPanel());
if (selection == JOptionPane.OK_OPTION)
{
if (replaceTextField.getDocument().getLength() > 0
&& startIndexField.getDocument().getLength() > 0
&& endIndexField.getDocument().getLength() > 0)
{
String text = replaceTextField.getText().trim();
int start = Integer.parseInt(startIndexField.getText().trim());
int end = Integer.parseInt(endIndexField.getText().trim());
tarea.replaceRange(text, start, end);
}
}
}
});
contentPane.add(tarea, BorderLayout.CENTER);
contentPane.add(updateButton, BorderLayout.PAGE_END);
frame.getContentPane().add(contentPane);
frame.pack();
frame.setVisible(true);
}
private JPanel getPanel()
{
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(0, 2, 2, 2));
JLabel replaceLabel = new JLabel("Enter new String : "
, JLabel.CENTER);
replaceTextField = new JTextField(10);
JLabel startIndexLabel = new JLabel("Enter Start Index : "
, JLabel.CENTER);
startIndexField = new JTextField(10);
JLabel endIndexLabel = new JLabel("Enter End Index : ");
endIndexField = new JTextField(10);
panel.add(replaceLabel);
panel.add(replaceTextField);
panel.add(startIndexLabel);
panel.add(startIndexField);
panel.add(endIndexLabel);
panel.add(endIndexField);
return panel;
}
public static void main(String... args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
new TextAreaSelection().createAndDisplayGUI();
}
});
}
}
nIcE cOw、tyの提案ですが、以前と同じ問題が発生しています。正直なところ、私はsetSelection()を使用してそれを作りたくありません。私はreplaceString()やinsert()を使うほうが好きです。私はすべてのケースで同じ例外が発生し続けます:( –
参照してください。もし私がそれを行うなら、@ JigarJoshiがアドバイスしたように、この新しい編集済みの回答でうまくいきます。 –
私はtarea.replaceRange( "house"、4,7);内部でDocumentListener :: insertUpdate()イベントが発生しました。シンプルなもので、この例外が表示されます –
- 1. JTextAreaでテキストを書式設定する方法
- 2. 無効なJTextAreaにテキストを設定する方法
- 3. JTextAreaでテキストをスタイル設定する(太字にする)方法は?
- 4. kafkalistenerでオフセットを設定する方法
- 5. JTextAreaの指定された行にテキストを挿入
- 6. JTextAreaまたはJTextPaneのテキストのスタイル設定
- 7. テキストでユーザーが指定したURLを取得する方法
- 8. MKMapViewをオフセットして、指定したポイントに座標を配置する方法
- 9. C++で指定したテキストに色を付ける方法
- 10. Java - JTextAreaのテキストを色に設定する
- 11. 指定された 'x'(開始)オフセットから指定された 'y'(終了)オフセットまでファイルをコピーするツール
- 12. MediaWiki検索でオフセットを指定する
- 13. CircleCI設定でドッカーコンテナの音量を指定する方法は?
- 14. JTextArea用に2つのフォントを設定する方法
- 15. alarmManagerを指定された時間に設定する方法
- 16. MSBuildで/ MPを指定したCPU数で設定する方法
- 17. UITextFieldを指定する値を取得または設定する方法は?
- 18. json設定で使用するコンストラクタを指定する方法
- 19. オフセットを設定し、上限
- 20. Gradleサブプロジェクトの設定順序を指定する方法は?
- 21. 固定上端オフセットを使用したラップオーバーのテキストを避ける方法
- 22. VIM:指定したエラーメッセージフォーマットで "errorformat"を設定するには?
- 23. メインアクティビティ(XMLなし)で定義されたビューのテキストを設定する方法
- 24. mod_pf設定のPingFederateSLOURLでログアウトサービスを指定する方法
- 25. AutoCompleteTextViewにテキストを設定する方法
- 26. PHAsset.fetchAssetsにオフセットを設定するには?
- 27. ファイルではなくクラスパスリソースとしてログバック設定を指定する方法
- 28. PHPで時間オフセットを設定する
- 29. jQueryでオフセットを設定する
- 30. 取得した巨大なStringデータを取得し、スイングでJTextAreaに設定する方法は?
おかげで、しかし、私は次の例外を取得しています: –
java.lang.IllegalStateException:通知 \tに突然変異する試みをjavax.swing.text.AbstractDocument.writeLock(不明なソース)でjavax.swing.text.AbstractDocument.replace(不明なソース)javax.swing.JTextArea.replaceRangeで \t(不明なソース)で \tで \t MyTextArea $ MyDocumentListener .insertUpdate(MyTextArea.java: 75)javax.swing.text.AbstractDocument.fireInsertUpdate(不明なソース)javax.swing.text.AbstractDocument.handleInsertStringで \t(不明なソース)で \t javax.swing.text.AbstractDocument.insertStringで \t(不明なソース) \t at javax.swing.text.PlainDocument.insertString –
+1、これはあまりにもうまく動作します:-)私よりも、1行で:-) @BoleGratは間違った場所でやっているようですが、私が推測する正しい場所ではない 'DocumentFilter'の内部では、この場所ではDocument自体を変更することはできません。 –