So habe ich eine JTextPane
, die im Grunde dient als eine Konsole. Ich habe es im mittleren Feld von JFrame
und JTextField
im südlichen Feld. Der JTextField
nimmt den Text, den er hat, und fügt ihn dem JTextPane
hinzu, wenn der Benutzer die Eingabetaste drückt. Um die JTextPane
nicht editierbar durch den Benutzer zu machen, musste ich setFocusable(false)
, weil mit setEditable(false)
gestoppt jeden Text auf der JTextPane
erscheint. Aber obwohl ich nicht möchte, dass der Benutzer den Bereich bearbeitet, möchte ich trotzdem, dass der Benutzer Text im Bereich hervorheben kann, aber ich kann keinen Weg finden, dies zu tun.Wie markieren Sie Text in einem JTextPane mit setFocusable (false)?
Unten ist ein Beispiel zeigen, was ich meine
Probe
package resources;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import javax.swing.text.AttributeSet;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyleContext;
public class SampeTextPane extends JFrame
{
public SampeTextPane()
{
setPreferredSize(new Dimension(350, 200));
setDefaultCloseOperation(EXIT_ON_CLOSE);
JTextPane display = new JTextPane();
display.setBorder(new EmptyBorder(5, 5, 5, 5));
display.setMargin(new Insets(5, 5, 5, 5));
display.setFocusable(false);
appendToPane(display, "Example", Color.BLUE);
JTextField field = new JTextField();
field.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
appendToPane(display, field.getText(), Color.BLACK);
field.setText("");
}
});
add(display, BorderLayout.CENTER);
add(field, BorderLayout.SOUTH);
pack();
setVisible(true);
}
private void appendToPane(JTextPane pane, String text, Color color)
{
StyleContext sc = StyleContext.getDefaultStyleContext();
AttributeSet aset = sc.addAttribute(SimpleAttributeSet.EMPTY, StyleConstants.Foreground, color);
aset = sc.addAttribute(aset, StyleConstants.Alignment, StyleConstants.ALIGN_JUSTIFIED);
int len = pane.getDocument().getLength();
pane.setCaretPosition(len);
pane.setCharacterAttributes(aset, false);
pane.replaceSelection(text + "\n");
}
public static void main(String[] args)
{
new SampeTextPane();
}
}
Vielen Dank im Voraus für jede Hilfe.
Das funktionierte perfekt! Danke – Ryan
............ und ist viel sauberer als meine Lösung. 1+ –