表包含以下行(例如,一列):
A
B
C
我正在尝试弄清楚如何将项目拖入其中,并将其放置在现有的B行和C行之间。
我能够进行拖放操作,从而在表的末尾添加一个项目,但我无法根据我释放鼠标按钮的位置将其放置在行之间。
创建一个< code>rowFactory生成< code>TableRow的,它接受手势并根据鼠标位置决定是在行之前还是之后添加项目:
@Override
public void start(Stage primaryStage) {
TableView<Item> table = new TableView<>();
Button button = new Button("A");
// d&d source providing next char
button.setOnDragDetected(evt -> {
Dragboard db = button.startDragAndDrop(TransferMode.MOVE);
ClipboardContent content = new ClipboardContent();
content.putString(button.getText());
db.setContent(content);
});
button.setOnDragDone(evt -> {
if (evt.isAccepted()) {
// next char
button.setText(Character.toString((char) (button.getText().charAt(0) + 1)));
}
});
// accept for empty table too
table.setOnDragOver(evt -> {
if (evt.getDragboard().hasString()) {
evt.acceptTransferModes(TransferMode.COPY_OR_MOVE);
}
evt.consume();
});
table.setOnDragDropped(evt -> {
Dragboard db = evt.getDragboard();
if (db.hasString()) {
table.getItems().add(new Item(db.getString()));
evt.setDropCompleted(true);
}
evt.consume();
});
TableColumn<Item, String> col = new TableColumn<>("value");
col.setCellValueFactory(new PropertyValueFactory<>("value"));
table.getColumns().add(col);
// let rows accept drop too
table.setRowFactory(tv -> {
TableRow<Item> row = new TableRow();
row.setOnDragOver(evt -> {
if (evt.getDragboard().hasString()) {
evt.acceptTransferModes(TransferMode.COPY_OR_MOVE);
}
evt.consume();
});
row.setOnDragDropped(evt -> {
Dragboard db = evt.getDragboard();
if (db.hasString()) {
Item item = new Item(db.getString());
if (row.isEmpty()) {
// row is empty (at the end -> append item)
table.getItems().add(item);
} else {
// decide based on drop position whether to add the element before or after
int offset = evt.getY() > row.getHeight() / 2 ? 1 : 0;
table.getItems().add(row.getIndex() + offset, item);
evt.setDropCompleted(true);
}
}
evt.consume();
});
return row;
});
Scene scene = new Scene(new VBox(button, table));
primaryStage.setScene(scene);
primaryStage.show();
}
public class Item {
public Item() {
}
public Item(String value) {
this.value.set(value);
}
private final StringProperty value = new SimpleStringProperty();
public String getValue() {
return value.get();
}
public void setValue(String val) {
value.set(val);
}
public StringProperty valueProperty() {
return value;
}
}
我用JavaFX2.1创建了我的应用程序,最近用JavaFX8升级到JDK 8。 当我更改ComboBox的值时,TableView会中断,但如果我在表中选择某些内容,则可以。 Netbeans显示: javafx。场景CssStyleHelper calculateValue警告:在解析规则“*”中的“-fx文本填充”查找时,无法解析“-fx文本背景色”。在样式表jar:file:/C:/Pro
我的目标是通过拖放对tableview进行排序。我举了一个例子:http://docs.oracle.com/javafx/2/fxml_get_started/fxml_tutorial_intermediate.htm 对于拖放,我通过Scene Builder添加了fxml 制造了控制器 但是在drag Drop,我无法得到我扔下物体的那排位置。我得到的只是手机信息<代码>文本[Text=“
这个想法很简单,几乎可行。有两个表,用户可以选择在两个表之间拖动行。当一行从table1拖到table2时,使用ajax来更新数据库,使用从table1中删除并添加到table2的数据,并用新数据重新显示两个表。如果信息从表2拖到表1,情况也是如此。 您可以在这里看到一个代码示例。 以下是其中一个表的Javascript代码摘录: 除了一种情况外,它工作得很好。如果将一行从表1拖到表2,它将创建一
我正在学习本教程中的示例。根据教程,我想在两个选项卡之间拖动选项卡。到目前为止,我设法创建了这段代码,但我需要一些帮助才能完成代码。 来源 将选项卡的内容作为对象插入的正确方法是什么?简单的文本被转移到教程中。我必须如何修改这行< code>content.put(DataFormat。PLAIN_TEXT,tab pane);? 拖动选项卡后插入选项卡的正确方法是什么: 目的地 我想这个转移可以
我更新到1.4 RC 1,想添加adMob到现有的项目现在Android Studio没有编译项目。我试图返回一切,但没有关系不运行项目。总是给主题错误。我删除了所有写的代码从清单,主要活动,main_activity布局,字符串,build.gradle属于adMob。现在。我读了很多线程,但没有写it.please我不能自己解决,需要帮助。谢谢。 [代码]信息:Gradle任务[: app:
我有两个JTable,它们被设置为可以拖放每个JTable中的行。问题是它允许我将一行从一个JTable拖到另一个JTable,我正试图找出如何阻止它。我只希望用户能够在同一个JTable中拖放一行。 换句话说,当我在当前表外拖动一行并将鼠标悬停在空白面板空间上时,鼠标光标会显示一个带对角线的圆,这就是我想要的。然而,当我将鼠标拖动到另一个表上时,它会显示一个小的矩形“拖放”图标,这就是我试图阻止