Итак, у меня есть JTextPane
, который в основном служит консолью. У меня это в центре поля JFrame
и JTextField
в южном поле. JTextField
примет текст, который у него есть, и добавит его в JTextPane
, когда пользователь нажимает кнопку ввода. Чтобы сделать JTextPane
недоступным для редактирования пользователем, я должен был setFocusable(false)
, потому что с помощью setEditable(false)
остановился любой текст, появляющийся на JTextPane
. Но пока я не хочу, чтобы пользователь редактировал панель, мне все равно хотелось бы, чтобы пользователь мог выделить текст в панели, но я не могу найти способ сделать это.Как выделить текст в JTextPane с помощью setFocusable (false)?
Ниже приведен пример демонстрирует то, что я имею в виду
Sample
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();
}
}
Заранее спасибо за любую помощь.
Это работало отлично! Спасибо – Ryan
........... и намного чище, чем мое решение. 1+ –