Почему текст в JTextPane нельзя выделить программно, если присутствует JTextField? Я думаю, что-то связано с фокусом. Thx.
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.beans.PropertyChangeListener;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.ActionMap;
import javax.swing.InputMap;
import javax.swing.JComponent;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.KeyStroke;
public class align extends JFrame {
private align() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
addPane(this, "one");
pack();
setVisible(true);
}
public static void main(String[] args) {
align t = new align();
}
private void addPane(JFrame frame, String name) {
JPanel panel = new JPanel();
panel.setLayout(new FlowLayout(FlowLayout.LEFT));
// if the next line is disabled, then the text is JTextPane is correctly highlighted.,,
panel.add(makeField("line1"));
JTextPane p = new JTextPane();
p.setText("abcdef");
p.setSelectionStart(2);
p.setSelectionEnd(4);
p.setFocusable(true);
p.requestFocus();
p.requestDefaultFocus();
panel.add(p);
frame.getContentPane().add(panel);
}
private JComponent makeField(String name) {
JTextField textArea = new JTextField();
textArea.setText(name);
textArea.setEditable(false);
return textArea;
}
}
EDIT:
Получил его, чтобы отобразить выделенный текст, запустив ключевое событие после того, как кадр был построен. Лучшим (более длинным) решением было бы иметь TextPane только для чтения с настраиваемым Highlighter и DocumentListener, который обновляет буфер обмена по Ctrl-C.
Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(
new KeyEvent(textPane, KeyEvent.KEY_PRESSED, System.currentTimeMillis(), 0, KeyEvent.VK_TAB));