Olá Pessoal, veja estou com uma duvida estou trabalhando com JavaFX e preenchi uma TableView com um Array, só que eu gostaria de pagar uma determinada linha com um Evento ao clicar no TableView desse meu TableView mas já fiz de tudo e não consegui como faço nesse caso?
ArrayList
15 Respostas
Com “pagar”, você queria dizer apagar? A classe ArrayList<E> implementa a interface List<E> que, possui os métodos remove(int index) e remove(Object obj), conforme a documentação Docs Oracle - List e Docs Oracle - ArrayList e que tu pode utilizar para remover itens de uma lista.
entenda meu cenário, eu tenho alguns XML em uma Pasta eu abrir essa pasta e listei todos os XML dentro da pasta em uma TableView até aqui tranquilo, mas quando eu preciso selecionar o caminho da XML que esta em uma coluna da tableview eu não consigo.
String caminhoXML = TableView.getSelectionModel().getSelectedItem(); aí ele me pede pra que eu faço um objeto mas daí eu não sei como eu crio esse objeto pra setar o valor da linha do tableview, quando eu utilizado pegando do banco de dados fica tranquilo pra mim, mas assim eu não sei como faço !
O caminho do XML é provavelmente é uma String (eu não sei como você está fazendo para popular a lista) e, no Java, Strings são objetos. Se tu fizer: getSelectedItem().toString() não resolve?
É mais ou menos isso que você quer ?
TableView<MyDataType> table = new TableView<>();
table.setRowFactory(tv -> {
TableRow<MyDataType> row = new TableRow<>();
row.setOnMouseClicked(event -> {
if (! row.isEmpty() && event.getButton()==MouseButton.PRIMARY
&& event.getClickCount() == 2) {
MyDataType clickedRow = row.getItem();
printRow(clickedRow);
}
});
return row ;
});
tentei resolve não tentei String teste = Tbl_Prod.getSelectionModel().getSelectedItem().toString(); ai ele me imprime assim : ViewControle.FxmlInternas.VisualizaXMLController$ItensTbl@9824623
vou tentar
não resolveu, é tipo pegar o String da TableColumn e setar ela numa variável String!
Pra Ficar claro é assim eu tenho uma TableView que contem apenas uma coluna, nessa TableView ela ta recebendo uma ArrayList, contendo o nome do arquivos que estão dentro de uma determinada pasta, exemplo nota_de_compra.xml, aí eu gostaria de selecionar a String nota_de_compra.xml e setar ela numa String ou em um Label,
Você quer pegar a linha, a coluna, ou a celula da TableView ?
quero pegar essa informação 
Pegar a informação clicando sobre ela ? ou atraves de um processamento externo ?
É parecido com isso ?
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableRow;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.input.MouseButton;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class TableFX extends Application {
@Override
public void start(Stage primaryStage) {
TableView tableView = new TableView();
tableView.setRowFactory(tv -> {
TableRow<Person> row = new TableRow<>();
row.setOnMouseClicked(event -> {
// Com duplo clique
// *******************
if (! row.isEmpty() && event.getButton()==MouseButton.PRIMARY
&& event.getClickCount() == 2) {
Person person = row.getItem();
System.out.println("Nome=" + person.getFirstName() + " Profissao=" + person.getWork() );
// printRow(clickedRow);
}
});
return row ;
});
TableColumn<String, Person> column1 = new TableColumn<>("Nome");
column1.setCellValueFactory(new PropertyValueFactory<>("firstName"));
TableColumn<String, Person> column2 = new TableColumn<>("Profissao");
column2.setCellValueFactory(new PropertyValueFactory<>("work"));
tableView.getColumns().add(column1);
tableView.getColumns().add(column2);
tableView.getItems().add(new Person("Jorge", "Desenhista"));
tableView.getItems().add(new Person("Paulo", "Padeiro"));
tableView.getItems().add(new Person("Tamires", "Programadora"));
VBox vbox = new VBox(tableView);
Button obtem = new Button("Obtem");
obtem.setOnAction((e) -> {
Person person = (Person)tableView.getItems().get(1);
System.out.println("Nome=" + person.getFirstName() + " Profissao=" + person.getWork() );
} );
BorderPane bp = new BorderPane();
bp.setCenter(vbox);
bp.setBottom( obtem );
Scene scene = new Scene(bp, 300,250);
primaryStage.setScene(scene);
primaryStage.show();
primaryStage.setTitle("TableView");
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
public class Person {
private String firstName = null;
private String work = null;
public Person() {
}
public Person(String firstName, String work) {
this.firstName = firstName;
this.work = work;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getWork() {
return work;
}
public void setWork(String work) {
this.work = work;
}
}
}
Clicando sobre ela!
Então roda esse exemplo que passei, java 8.
não deu certo, creio que seja porque eu não estou usando Objeto e sim usando Array puro já setando direto na TableViwer
Posta o codigo de forma resumida contendo o que de fato precisa ser visto, como no exemplo que te passei.