java - 如何从自动生成的标签中访问值?
问题描述
在这里,我收到一个ObservableList
产品。然后为每个产品中的名称、价格和数量List
创建一个Label
。我还创建了两个按钮,用于添加和删除数量,更改标签中的值。我的问题出在“escolherProdutos()”方法中,我想在其中访问每个标签的值与数量相关,这样我就可以知道每个产品的请求数量,我似乎无法从外部访问这些值populateFlowPane()
方法。这可能不是解决我的问题的最佳方法,而且我是初学者,所以如果您能帮助我解决我的问题,甚至有更好的方法,我将不胜感激。
public class EscolherProdutosController
{
@FXML private VBox nomesVBox;
@FXML private VBox precoVBox;
@FXML private VBox qtdsVBox;
@FXML private Button escolherBtn;
private static ArrayList<Label> quantidades = new ArrayList<>();
@FXML
public void initialize()
{
populateFlowPane();
}
public void populateFlowPane()
{
ObservableList<Produto> produtos = Logic.getProdutos();
produtos.forEach(prod -> {
HBox hbox = new HBox(5);
Label nome = new Label(prod.getNome());
Label preco = new Label(String.valueOf(prod.getPreco()));
Button minus = new Button("-");
minus.setMinSize(20, 20);
Label qtd = new Label("0");
Button plus = new Button("+");
nomesVBox.getChildren().add(nome);
precoVBox.getChildren().add(preco);
hbox.getChildren().addAll(minus, qtd, plus);
qtdsVBox.getChildren().add(hbox);
//remover unidades do produto
minus.setOnAction((ActionEvent e) -> {
int quantidade = Integer.parseInt(qtd.getText());
if(quantidade >= 1)
{
quantidade--;
qtd.setText(String.valueOf(quantidade));
}
});
//adicionar unidades do produto
plus.setOnAction((ActionEvent e) -> {
int quantidade = Integer.parseInt(qtd.getText());
if(quantidade >= 0)
{
quantidade++;
qtd.setText(String.valueOf(quantidade));
}
});
quantidades.add(qtd);
});
}
public void escolherProdutos()
{
ObservableList<Produto> produtos = Logic.getProdutos();
produtos.forEach(prod -> {
quantidades.forEach(qtd -> {
Logic.escolherProdutos(prod.getIdProduto(),
Integer.parseInt(qtd.getText()));
});
});
}
}
解决方案
我解决了这个问题。也许这不是最好的解决方案,但它对我有用。我所做的是创建一个HashMap
产品 ID 是关键,数量是价值的地方。
然后对于添加和删除按钮,我只需替换HashMap
. 这样做之后,我可以将其用作类中escolherProdutos()
方法的输入Logic
,以选择产品。
public class EscolherProdutosController
{
@FXML private VBox nomesVBox;
@FXML private VBox precoVBox;
@FXML private VBox qtdsVBox;
private HashMap<BigDecimal, Integer> quantidades = new HashMap<>();
@FXML
public void initialize()
{
populateFlowPane();
}
public void populateFlowPane()
{
ObservableList<Produto> produtos = Logic.getProdutos();
produtos.forEach(prod -> {
HBox hbox = new HBox(5);
Label nome = new Label(prod.getNome());
Label preco = new Label(String.valueOf(prod.getPreco()));
Button minus = new Button("-");
minus.setMinSize(20, 20);
Label qtd = new Label("0");
Button plus = new Button("+");
nomesVBox.getChildren().add(nome);
precoVBox.getChildren().add(preco);
hbox.getChildren().addAll(minus, qtd, plus);
qtdsVBox.getChildren().add(hbox);
//remover unidades do produto
minus.setOnAction((ActionEvent e) -> {
Integer quantidade = Integer.parseInt(qtd.getText());
if(quantidade >= 1)
{
quantidade--;
qtd.setText(String.valueOf(quantidade));
if(quantidades.containsKey(prod.getIdProduto()))
quantidades.replace(prod.getIdProduto(), quantidade);
else
quantidades.put(prod.getIdProduto(), quantidade);
}
});
//adicionar unidades do produto
plus.setOnAction((ActionEvent e) -> {
Integer quantidade = Integer.parseInt(qtd.getText());
if(quantidade >= 0)
{
quantidade++;
qtd.setText(String.valueOf(quantidade));
if(quantidades.containsKey(prod.getIdProduto()))
quantidades.replace(prod.getIdProduto(), quantidade);
else
quantidades.put(prod.getIdProduto(), quantidade);
}
});
});
}
public void escolherProdutos()
{
Logic.escolherProdutos(quantidades);
}
推荐阅读
- angularjs - (Access-Control-Allow-Origin - 从 2 个 URL 获取数据以获取承诺时的 CORS 问题
- php - 如何使用 PHP 5.6 显示目录中的所有文件
- minikube - sudo minikube 返回“找不到命令”
- java - 在 java 中返回 RedisTemplate 对象时初始化默认键值对
- javascript - 十进制乘法 JavaScript
- git - git run 安装失败
- cassandra - 从“单数据节点”迁移到“双数据节点”cassandra 集群时,Cassandra 吞吐量下降
- file-permissions - 如何通过tar提取正确的所有者权限?
- vba - VBA Outlook 使用替换保留电子邮件格式
- proxy - 代理自动检测是否在 CefSharp.Wpf 中工作?