Ajuda com uma list com duas classes (Resolvido)

ai eu faria isso apenas com esse campo?
entendi
vou testar (mas nessa caso como é uma lista como ele retornaria todos os id’s? caso tenha mais de um registro)
desse modo parece que só retorna de um registro

opa man pode me tirar uma dúvida? Estava tentando de outro metodo que creio que seja mais fácil
porém estou com uma dúvida:

public void initTable() throws SQLException {
    Requisicao requisicao = new Requisicao();
    Usuario usuario = new Usuario();
    Connection con = ConnectionFactory.getConnection();
    
    PreparedStatement stmt = con.prepareStatement("SELECT * FROM computador_requisicao");
    ResultSet rs = stmt.executeQuery();
    while (rs.next()){
        requisicaolist.add(new Requisicao(rs.getLong("id"), rs.getLong("idusuario"), rs.getString("nome")));
    }
    clmid.setCellValueFactory(new PropertyValueFactory("id"));
    clmIdUser.setCellValueFactory(new PropertyValueFactory("id"));
    clmNome.setCellValueFactory(new PropertyValueFactory("nome"));
    clmDate.setCellValueFactory(new PropertyValueFactory("dataEntrada"));
    clmMotivo.setCellValueFactory(new PropertyValueFactory("motivo"));
    tb.setItems(requisicaolist());
    
}

    while (rs.next()){
        requisicaolist.add(new Requisicao(rs.getLong("id"), rs.getLong("idusuario"), rs.getString("nome")));
    }

eu teria que criar esse construtor na classe requisicao
onde teria o id da requisição e o id do usuario?
ex:

public Requisicao(Long id, Long idUsuario) {
    this.id = id;
    this.idUsuario = ?
}

como eu conseguiria fazer isso?

Isso o javaFX vai fazer para vc.

Fazendo assim, vc terá mais problemas. Não misture as camadas.

ah simm vlw

ahh pensei que fosse mais fácill
mas é possível fazer isso?

fazer essa comparação nesse construtor?

Você consegue criar um construtor para receber os dois dados sem problemas.

1 curtida

Poderia me dar um exemplo manin?
estou pensando em fazer algo com isso
mas não faço ideia de como fazer isso .

e eu tinha me esquecido desse negocio de agregração e composição
mt obrigado mesmo, não tinha passado na minha cabeça essa opção.

tentei fazer algo desse tipo, mas deu altas erros mesmo importando
ele funciona porém o campo id usuario ta mostrando os id’s das requisições e não do usuario;

provavelmente por esse motivo:
@FXML
private TableColumn<Requisicao, Long> clmIdUser;

ele ta pegando o get do id da requisição e não usuario

não consigo imaginar nada para resolver isso.

esse codigo que você mandou da esse error:

No método call vc tem que mudar de Observable<String> para Observable<Long>.

então mano eu não tinha percebido, mas continuou com esse error

private ObservableList requisicao = FXCollections.observableArrayList();
eu tentei botar com requisicao e acontece isso:

Vc tem que usar um método que retornar a Requisicao a partir desse objeto Observable

public ObservableList atualizarTabela() {
RequisicaoDAO dao = new RequisicaoDAO();
requisicao = FXCollections.observableArrayList(dao.getList());
return requisicao;
}
eu tenho esse metodo aqui
seria isso?

não entendi mt bem.

Putz, foi mal, não é Observable não, é dessa classe CellDataFeatures. Em vez de chamar o getValue, veja quais outros métodos tem disponível e que retorne a requisição.

vou dar uma olhada antes disso
eu fiquei com uma dúvida man

private ObservableList requisicao = FXCollections.observableArrayList();

    clmIdUser.setCellValueFactory(new Callback<CellDataFeatures<Requisicao, Long>, ObservableValue<Long>>() {
    @Override
    public ObservableValue<Long> call(CellDataFeatures<Requisicao, Long> requisicao) {
  return requisicao.add(Requisicao).getSolicitante().getId();

}
});

o nome da observeble list é requisicao
public ObservableValue call(CellDataFeatures<Requisicao, Long> requisicao)
nessa parte eu botaria Long> requisicao ou Long>Requisicao

se for requisicao
tem esses metodos:


e se o return for com a classe Requisicao tem esses:

se for Requisicao
tem esses:


seria
public ObservableValue call(CellDataFeatures<Requisicao, Long> requisicao) {

ou
public ObservableValue call(CellDataFeatures<Requisicao, Long> Requisicao) {
return requisicao.add(Requisicao).getSolicitante().getId();

sendo que minha private ObservableList requisicao = FXCollections.observableArrayList(); é assim

creio que seja esse codigo:

clmIdUser.setCellValueFactory(new Callback<CellDataFeatures<Requisicao, Long>, ObservableValue<Long>>() {
@Override
public ObservableValue<Long> call(CellDataFeatures<Requisicao, Long> requisicao) {
	return requisicao.getValue().getSolicitante().getId();
}
});

porém no return fica dando incompatibilidade de convertert long para observableList

Tente alterar para isso:

clmIdUser.setCellValueFactory(new Callback<CellDataFeatures<Requisicao, Long>, Long>() {
	@Override
	public Long call(CellDataFeatures<Requisicao, Long> requisicao) {
		return requisicao.getValue().getSolicitante().getId();
	}
});

eu tinha tentado, mas deu esses erros.

    clmIdUser.setCellValueFactory(new Callback<CellDataFeatures<Requisicao, Long>, ObservableValue<Long>>() {
    public ObservableValue<Long> call(CellDataFeatures<Requisicao, Long> requisicao) {
	return new SimpleObjectProperty(requisicao.getValue().getSolicitante().getId());
}
    });

deu certo desse jeito .

1 curtida