JavaFX TextArea
'da bir ekran koordinatında (2 double
) düzeltme işaretini (int
) almak mümkün mü?JavaFX TextArea ayar listesinden koordinat konumunu al
cevap
Sen sürükleme işleyicisinde TextAreaSkin arasında getInsertionPoint yöntemi kullanabilirsiniz:
TextAreaSkin skin = (TextAreaSkin) target.getSkin();
int insertionPoint = skin.getInsertionPoint(event.getX(), event.getY());
target.positionCaret(insertionPoint);
Ancak cilt sınıf com.sun.javafx içindedir *, Java 9 ile çok muhtemelen edeceğiz dışarı çıkıyor. o zaman farklı şeyler yapmak zorunda. Kimse ne kıracaklarını ya da değiştirdikleri şeyin ne olduğunu bilmiyor. Ancak, Java 8 ile (şimdilik) çalışır. Eğer TextArea herhangi pozisyona bir Etiketinin metni sürükleyebilirsiniz hangi
için tam bir örnek:
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.input.ClipboardContent;
import javafx.scene.input.DragEvent;
import javafx.scene.input.Dragboard;
import javafx.scene.input.MouseEvent;
import javafx.scene.input.TransferMode;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import com.sun.javafx.scene.control.skin.TextAreaSkin;
// Parts of this drag/drop example are from https://docs.oracle.com/javafx/2/drag_drop/HelloDragAndDrop.java.html
public class TextAreaDemo extends Application {
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(Stage primaryStage) {
Label source = new Label("Draggable Text");
TextArea target = new TextArea();
target.setPrefRowCount(10);
target.setPrefColumnCount(100);
target.setWrapText(true);
target.setPrefWidth(150);
String cssDefault = "Lorem ipsum dolor sit amet, et bonorum pertinacia est, verear temporibus definitionem nam an, ius cu justo legimus philosophia. Adversarium complectitur at sit, his ex sumo nibh consequuntur. Et vim adhuc mnesarchum, eum in ignota integre tincidunt. Erant oblique alterum no eos.";
target.setText(cssDefault);
HBox root = new HBox();
root.setSpacing(10);
HBox.setMargin(source, new Insets(10,10,10,10));
HBox.setMargin(target, new Insets(10,10,10,10));
root.getChildren().addAll(source, target);
Scene scene = new Scene(root, 600, 330, Color.WHITE);
primaryStage.setScene(scene);
primaryStage.show();
source.setOnDragDetected(new EventHandler <MouseEvent>() {
public void handle(MouseEvent event) {
/* allow any transfer mode */
Dragboard db = source.startDragAndDrop(TransferMode.ANY);
/* put a string on dragboard */
ClipboardContent content = new ClipboardContent();
content.putString(source.getText());
db.setContent(content);
event.consume();
}
});
target.setOnDragOver(new EventHandler <DragEvent>() {
public void handle(DragEvent event) {
/* accept it only if it is not dragged from the same node
* and if it has a string data */
if (event.getGestureSource() != target &&
event.getDragboard().hasString()) {
/* allow for both copying and moving, whatever user chooses */
event.acceptTransferModes(TransferMode.COPY_OR_MOVE);
// position caret at drag coordinates
TextAreaSkin skin = (TextAreaSkin) target.getSkin();
int insertionPoint = skin.getInsertionPoint(event.getX(), event.getY());
target.positionCaret(insertionPoint);
}
event.consume();
}
});
target.setOnDragDropped(new EventHandler <DragEvent>() {
public void handle(DragEvent event) {
/* if there is a string data on dragboard, read it and use it */
Dragboard db = event.getDragboard();
boolean success = false;
if (db.hasString()) {
target.insertText(target.getCaretPosition(), db.getString());
success = true;
}
/* let the source know whether the string was successfully
* transferred and used */
event.setDropCompleted(success);
event.consume();
}
});
}
}
import com.sun.javafx.scene.control.skin.TextAreaSkin;
import com.sun.javafx.scene.text.HitInfo;
/****************************************************/
TextAreaSkin skin = (TextAreaSkin) target.getSkin();
HitInfo mouseHit = skin.getIndex(e.getX(), e.getY());
// Now you can position caret
skin.positionCaret(mouseHit, false, false);
// And/or get insertion index
int insertionPoint = mouseHit.getInsertionIndex();
TextArea
için bu yöntem Roland'ın cevap eşdeğerdir.
TextFieldSkin skin = (TextFieldSkin) target.getSkin();
HitInfo mouseHit = skin.getIndex(e.getX(), e.getY());
skin.positionCaret(mouseHit, false);
int insertionPoint = mouseHit.getInsertionIndex();
Maalesef TextFieldSkin
getInsertionPoint(...)
ve ebeveynin Yerleştirme çok alternatif çözüm burada çalışmıyor 0 döndürür geçersiz kılmaz: Bu yöntemin pratik farkı TextField
uygulanabilirlik (TextInputControl
diğer bir alt kümesi) 'dir.
Java 9 ile ilgili olarak, hem Roland’ın hem de yanıtlarım çalışmaya devam edecektir. com.sun.javafx.scene.control.skin
ve com.sun.javafx.scene.text
(HitInfo
sınıfının bulunduğu) paketler, Java 9'daki genel API'ye taşınır. Konumları sırasıyla javafx.scene.control.skin
ve javafx.scene.text
olacaktır. Burada JavaFX 9 için Javadocs bakınız: http://download.java.net/java/jdk9/jfxdocs/index.html
daima imleci görmek için, size ulaşmak için çalışıyoruz ne tarif edebilir misiniz setOnDragOver
-Methode
target.requestFocus();
bu soruya cevap vermiyor –
- 1. JavaFX TextArea Limit
- 2. javafx: sütun adını al
- 3. Rasgele Sayılar ön ayar listesinden
- 4. Kaydırmada fare konumunu al
- 5. , textarea değerini güncelleştirin, ancak imleç konumunu koruyun
- 6. HTML textarea onkeyup olayını JavaFX WebView'te algılama
- 7. Yalnızca bir JavaFx özelliği ile okunan ayar
- 8. JavaFX 2: TableCell Satır Dizini Al
- 9. JavaFX Sqlite, seçili ListView Öğesinden Kimliği Al
- 10. Bir Textarea
- 11. bir koordinat
- 12. Koordinat küçültme python
- 13. listesinden
- 14. textarea
- 15. android için en üstteki ebeveyne göre görünüm konumunu al
- 16. Ayar stil bildirimli FXML
- 17. ImageView ve ayar konumu
- 18. SubView'ın Çerçeve Koordinat Sistemini Self View'ın Koordinat Sistemine dönüştürme
- 19. n-küre koordinat sistemi için Kartezyen koordinat sistemi
- 20. Koordinat dizesini float
- 21. ecef koordinat dönüşümü
- 22. Seçilen öğe türünü al
- 23. Javafx,
- 24. JavaFX
- 25. JavaFX
- 26. Javafx
- 27. JavaFx
- 28. JavaFX
- 29. javafx
- 30. JavaFX
bu koydu? TextArea'nın TextInputControl'den caretPosition() öğesini aldığını biliyorsunuzdur. Bu yüzden soruyorum. – VinceOPS
@VincentG Evet Geçerli caret konumunu döndüren caretPosition() işlevinin farkındayım. Bir 'TreeView' içindeki öğelerin metnin herhangi bir yerine sürüklenebilmesi için bir sürükle ve bırak uygulaması yapmaya çalışıyorum. –