Java 如何在另一个div中分配div
大家早上好,我正在创建一个产品销售系统,这个主题有点长,因为我想很好地解释它 系统正在Vaadin+MySQL+SpringBoot+Maven中开发 在主屏幕上,我们可以看到带有“新建”、“更改”和“删除”按钮的网格: 单击“新建”按钮时,将打开一个窗口,开始“销售”产品: 这里的问题如下,当我点击“+项”时,出现以下情况: 问题:创建了一个滚动条(在窗口右侧),保存、关闭和+项按钮被向下移动(仅在滚动条向下滚动时出现)。每次我尝试添加一个产品(+项目),这个过程都会重复,按钮都会被按下 理想的解决方案:我希望按钮“冻结或固定”在窗口底部,通过添加产品,甚至可以创建滚动条,但无需向下移动按钮 我想到了这样的事情: 接收产品的部门2在任何情况下都不能侵入部门1和部门3(上部和下部) 但我承认我无法创造这个……我尝试了很多方法,但都失败了 如果有人能帮助我,我很感激 我的代码:Java 如何在另一个div中分配div,java,mysql,maven,vaadin,primavera,Java,Mysql,Maven,Vaadin,Primavera,大家早上好,我正在创建一个产品销售系统,这个主题有点长,因为我想很好地解释它 系统正在Vaadin+MySQL+SpringBoot+Maven中开发 在主屏幕上,我们可以看到带有“新建”、“更改”和“删除”按钮的网格: 单击“新建”按钮时,将打开一个窗口,开始“销售”产品: 这里的问题如下,当我点击“+项”时,出现以下情况: 问题:创建了一个滚动条(在窗口右侧),保存、关闭和+项按钮被向下移动(仅在滚动条向下滚动时出现)。每次我尝试添加一个产品(+项目),这个过程都会重复,按钮都会被按下
package br.com.fjsistemas.cadastros.view;
import java.text.NumberFormat;
import java.text.ParseException;
import java.time.LocalDate;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.vaadin.textfieldformatter.CustomStringBlockFormatter;
import com.vaadin.flow.component.Component;
import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.button.ButtonVariant;
import com.vaadin.flow.component.combobox.ComboBox;
import com.vaadin.flow.component.datepicker.DatePicker;
import com.vaadin.flow.component.dialog.Dialog;
import com.vaadin.flow.component.formlayout.FormLayout;
import com.vaadin.flow.component.grid.Grid;
import com.vaadin.flow.component.grid.GridVariant;
import com.vaadin.flow.component.html.Div;
import com.vaadin.flow.component.html.Label;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.component.tabs.Tab;
import com.vaadin.flow.component.tabs.Tabs;
import com.vaadin.flow.component.textfield.NumberField;
import com.vaadin.flow.component.textfield.TextField;
import com.vaadin.flow.data.binder.Binder;
import com.vaadin.flow.data.binder.PropertyId;
import com.vaadin.flow.data.renderer.NumberRenderer;
import com.vaadin.flow.router.PageTitle;
import com.vaadin.flow.router.Route;
import br.com.fjsistemas.backend.Cliente;
import br.com.fjsistemas.backend.Produto;
import br.com.fjsistemas.backend.Venda;
import br.com.fjsistemas.main.MainView;
import br.com.fjsistemas.repository.ClienteRepository;
import br.com.fjsistemas.repository.ProdutoRepository;
import br.com.fjsistemas.service.VendaService;
@Route(value = "venda-view", layout = MainView.class)
@PageTitle("Lançamento de Vendas")
public class VendaView extends VerticalLayout {
private static final long serialVersionUID = 1L;
private HorizontalLayout hltVenda = new HorizontalLayout();
Grid<Venda> grdVenda = new Grid<>(Venda.class, false);
private HorizontalLayout hltBarraBotoes = new HorizontalLayout();
Button btnNovo = new Button("Novo");
Button btnAlterar = new Button("Alterar");
Button btnExcluir = new Button("Excluir");
private Dialog dlgJanela = new Dialog();
private FormLayout fltCamposVenda = new FormLayout();
HorizontalLayout primeiraLinhaGuiaVenda = new HorizontalLayout();
HorizontalLayout segundaLinhaGuiaVenda = new HorizontalLayout();
Tab vender = new Tab("Vendas");
Div venderDiv = new Div();
Tab entrega = new Tab("Entregas");
Div entregaDiv = new Div();
Tab financeiro = new Tab("Financeiro");
Div financeiroDiv = new Div();
@PropertyId("data")
private DatePicker txtDataVenda = new DatePicker("Data Venda");
@PropertyId("nome")
private ComboBox<Cliente> txtNomeCliente = new ComboBox<>();
@PropertyId("telefone")
private TextField txtTelefone = new TextField("Telefone");
@PropertyId("celular")
private TextField txtCelular = new TextField("Celular");
@PropertyId("campoSomaValores")
private TextField campoSomaValores = new TextField();
private HorizontalLayout htlDlgBarraBotoes = new HorizontalLayout();
private Button btnSalvar = new Button("Salvar");
private Button btnFechar = new Button("Fechar");
private Button btnAdicionarItem = new Button("+ Item");
@Autowired
VendaService vendaService;
@Autowired
ClienteRepository clienteRepository;
@Autowired
ProdutoRepository produtoRepository;
private List<Venda> listaVendas;
private Venda venda;
Binder<Venda> binderVenda = new Binder<>(Venda.class);
public VendaView() {
}
@PostConstruct
public void init() {
configuraTela();
}
private void configuraTela() {
setMargin(false);
setPadding(false);
configuraHltVenda();
configuraFltBarraBotoes();
configuraDlgJanela();
populaGrdVenda();
configuraBinder();
add(hltVenda, hltBarraBotoes);
}
private void configuraFltBarraBotoes() {
btnNovo.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
btnNovo.addClickListener(e -> {
novoClick();
});
btnAlterar.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
btnAlterar.addClickListener(e -> {
alterarClick();
});
btnExcluir.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
btnExcluir.addClickListener(e -> {
excluirClick();
});
hltBarraBotoes.add(btnNovo, btnAlterar, btnExcluir);
}
private void excluirClick() {
if (venda != null) {
listaVendas.remove(venda);
vendaService.delete(venda);
atualizaGrdVenda();
}
}
private void configuraHltVenda() {
hltVenda.setWidthFull();
configuraGrdVenda();
hltVenda.add(grdVenda);
}
private void configuraGrdVenda() {
grdVenda.setHeight("820px");
grdVenda.setWidthFull();
grdVenda.addColumn(Venda::getId).setHeader("ID:").setAutoWidth(true);
grdVenda.addColumn(Venda::getDataVenda).setHeader("Data Venda:").setAutoWidth(true).setKey("dataVenda");
grdVenda.addColumn(Venda::getNomeCliente).setHeader("Nome:").setAutoWidth(true).setKey("nome");
grdVenda.addColumn(new NumberRenderer<>(Venda::getValorTotalVenda, "R$ %(,.2f", Locale.getDefault(), "R$ 0.00"))
.setHeader("Valor Total:").setAutoWidth(true).setKey("valorTotalVenda");
grdVenda.addThemeVariants(GridVariant.LUMO_COMPACT, GridVariant.LUMO_COLUMN_BORDERS);
grdVenda.getColumns().forEach(col -> col.setAutoWidth(true).setSortable(true).setResizable(true));
grdVenda.addItemClickListener(e -> {
venda = e.getItem();
});
}
private void configuraDlgJanela() {
dlgJanela.setHeight("755px");
dlgJanela.setWidth("860px");
//=====================================================================================================================
txtNomeCliente.setWidth("390px");
txtNomeCliente.setLabel("Nome Cliente");
List<Cliente> listaDeClientes = clienteRepository.findAll();
txtNomeCliente.setItemLabelGenerator(Cliente::getNome);
txtNomeCliente.setItems(listaDeClientes);
txtNomeCliente.addValueChangeListener(event -> {
txtTelefone.setValue(event.getValue().getFone());
txtCelular.setValue(event.getValue().getCelular());
});
new CustomStringBlockFormatter.Builder().blocks(0, 2, 4, 4).delimiters("(", ")", "-").numeric().build()
.extend(txtTelefone);
new CustomStringBlockFormatter.Builder().blocks(0, 2, 5, 4).delimiters("(", ")", "-").numeric().build()
.extend(txtCelular);
//=====================================================================================================================
Label text = new Label("Valor Total da Compra");
text.getElement().getStyle().set("fontWeight", "bold");
text.getStyle().set("margin-top", "30em");
text.getStyle().set("margin-left", "5em");
text.getStyle().set("text-align", "center");
campoSomaValores.getStyle().set("margin-top", "30em");
campoSomaValores.setWidth("30em");
//==========================================================================================================================
segundaLinhaGuiaVenda.add(txtNomeCliente, txtTelefone, txtCelular);
fltCamposVenda.add(venderDiv, entregaDiv, financeiroDiv);
venderDiv.setHeight("120px");
venderDiv.add(txtDataVenda, segundaLinhaGuiaVenda);
vender.add(venderDiv);
LocalDate now = LocalDate.now();
txtDataVenda.setValue(now);
Map<Tab, Component> tabsToPages = new HashMap<>();
tabsToPages.put(vender, venderDiv);
tabsToPages.put(entrega, entregaDiv);
tabsToPages.put(financeiro, financeiroDiv);
Tabs tabs = new Tabs(vender, entrega, financeiro);
Div pages = new Div(venderDiv, entregaDiv, financeiroDiv);
tabs.addSelectedChangeListener(event -> {
tabsToPages.values().forEach(page -> page.setVisible(false));
Component selectedPage = tabsToPages.get(tabs.getSelectedTab());
selectedPage.setVisible(true);
});
dlgJanela.add(tabs, pages);
btnSalvar.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
btnSalvar.getStyle().set("margin-top", "30em");
btnSalvar.getStyle().set("margin-left", "0em");
btnSalvar.addClickListener(e -> {
salvarClick();
});
btnFechar.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
btnFechar.getStyle().set("margin-top", "30em");
btnFechar.addClickListener(e -> {
dlgJanela.close();
});
btnAdicionarItem.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
btnAdicionarItem.getStyle().set("margin-top", "30em");
btnAdicionarItem.addClickListener(e -> {
adicionaProduto();
});
htlDlgBarraBotoes.add(btnSalvar, btnFechar, btnAdicionarItem, text, campoSomaValores);
dlgJanela.add(fltCamposVenda, htlDlgBarraBotoes);
}
private void salvarClick() {
venda = binderVenda.getBean();
boolean adicionarLista = venda.getId() == null ? true : false;
vendaService.create(venda);
if (adicionarLista) {
listaVendas.add(venda);
}
atualizaGrdVenda();
novaVenda();
txtNomeCliente.focus();
binderVenda.setBean(venda);
if (adicionarLista) {
dlgJanela.close();
}
}
private void populaGrdVenda() {
listaVendas = vendaService.read();
atualizaGrdVenda();
}
private void atualizaGrdVenda() {
grdVenda.setItems(listaVendas);
}
private void configuraBinder() {
binderVenda.bindInstanceFields(this);
}
private void novoClick() {
novaVenda();
binderVenda.setBean(venda);
dlgJanela.open();
txtNomeCliente.focus();
}
private void alterarClick() {
if (venda != null) {
binderVenda.setBean(venda);
dlgJanela.open();
}
}
private void adicionaProduto() {
ComboBox<Produto> txtProdutos = new ComboBox<>();
NumberField txtQuantidade = new NumberField("Quantidade");
TextField txtValorUnitario = new TextField("Valor Unitário");
TextField txtValorTotalItem = new TextField("Valor Total Item");
txtProdutos.setWidth("370px");
txtProdutos.setLabel("Produtos");
List<Produto> listaDeProdutos = produtoRepository.findAll();
txtProdutos.setItemLabelGenerator(Produto::getNome);
txtProdutos.setItems(listaDeProdutos);
txtProdutos.addValueChangeListener(event -> {
NumberFormat formatter = NumberFormat.getCurrencyInstance(new Locale("pt", "BR"));
try {
txtValorUnitario.setValue(formatter.format(event.getValue().getValor()));
} catch (Exception e) {
e.printStackTrace();
}
});
//==========================================================================================================================
txtQuantidade.setHasControls(true);
txtQuantidade.setValue(null);
txtQuantidade.setMin(1);
txtQuantidade.addValueChangeListener(event -> {
NumberFormat formatter = NumberFormat.getCurrencyInstance(new Locale("pt", "BR"));
double valorTotal = 0;
try {
valorTotal = formatter.parse(txtValorUnitario.getValue()).doubleValue() * txtQuantidade.getValue();
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
txtValorTotalItem.setValue(formatter.format(valorTotal));
campoSomaValores.setValue(formatter.format(valorTotal));
});
HorizontalLayout linhaNova = new HorizontalLayout();
linhaNova.add(txtProdutos, txtQuantidade, txtValorUnitario, txtValorTotalItem);
venderDiv.add(linhaNova);
}
private void novaVenda() {
venda = new Venda();
venda.setNomeCliente(" ");
dlgJanela.close();
}
}
package br.com.fjsistemas.cadastros.view;
导入java.text.NumberFormat;
导入java.text.ParseException;
导入java.time.LocalDate;
导入java.util.HashMap;
导入java.util.List;
导入java.util.Locale;
导入java.util.Map;
导入javax.annotation.PostConstruct;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.vaadin.textfieldformatter.CustomStringBlockFormatter;
导入com.vaadin.flow.component.component;
导入com.vaadin.flow.component.button.button;
导入com.vaadin.flow.component.button.ButtonVariant;
导入com.vaadin.flow.component.combobox.combobox;
导入com.vaadin.flow.component.datepicker.datepicker;
导入com.vaadin.flow.component.dialog.dialog;
导入com.vaadin.flow.component.formlayout.formlayout;
导入com.vaadin.flow.component.grid.grid;
导入com.vaadin.flow.component.grid.GridVariant;
导入com.vaadin.flow.component.html.Div;
导入com.vaadin.flow.component.html.Label;
导入com.vaadin.flow.component.orderedlayout.HorizontalLayout;
导入com.vaadin.flow.component.orderedlayout.VerticalLayout;
导入com.vaadin.flow.component.tabs.Tab;
导入com.vaadin.flow.component.tabs.tabs;
导入com.vaadin.flow.component.textfield.NumberField;
导入com.vaadin.flow.component.textfield.textfield;
导入com.vaadin.flow.data.binder.binder;
导入com.vaadin.flow.data.binder.PropertyId;
导入com.vaadin.flow.data.renderer.NumberRenderer;
导入com.vaadin.flow.router.PageTitle;
导入com.vaadin.flow.router.Route;
导入br.com.fjsistemas.backend.Cliente;
导入br.com.fjsistemas.backend.Produto;
导入br.com.fjsistemas.backend.Venda;
导入br.com.fjsistemas.main.MainView;
导入br.com.fjsistemas.repository.clientrepository;
导入br.com.fjsistemas.repository.ProdutoRepository;
导入br.com.fjsistemas.service.VendaService;
@路线(value=“venda view”,layout=MainView.class)
@页面标题(“Lançamento de Vendas”)
公共类VendaView扩展了垂直布局{
私有静态最终长serialVersionUID=1L;
私有HorizontalLayout hltVenda=新HorizontalLayout();
grdVenda网格=新网格(Venda.class,false);
私有HorizontalLayout hltBarraBotoes=新HorizontalLayout();
按钮btnNovo=新按钮(“Novo”);
按钮btnAlterar=新按钮(“替代按钮”);
按钮btnExcluir=新按钮(“排除”);
私有对话框dlgJanela=新建对话框();
私有FormLayout fltCamposVenda=新FormLayout();
HorizontalLayout primeiraLinhaGuiaVenda=新的HorizontalLayout();
水平布局segundaLinhaGuiaVenda=新水平布局();
选项卡供应商=新选项卡(“供应商”);
Div venderDiv=新Div();
Tab entrega=新选项卡(“Entregas”);
Div entregaDiv=新Div();
Tab financeiro=新选项卡(“financeiro”);
Div financeiroDiv=新Div();
@属性ID(“数据”)
私有日期采集器txtDataVenda=新日期采集器(“数据采集器”);
@不动产ID(“nome”)
私有组合框txtNomeCliente=新组合框();
@地产ID(“telefone”)
私有文本字段txtTelefone=新文本字段(“Telefone”);
@不动产ID(“celular”)
私有文本字段txtcellular=新文本字段(“Celular”);
@不动产ID(“campoSomaValores”)
private TextField campoSomaValores=new TextField();
私有水平布局htldlgbarabotoes=新水平布局();
专用按钮btnSalvar=新按钮(“Salvar”);
专用按钮btnFechar=新按钮(“Fechar”);
私有按钮BTadicionariem=新按钮(“+项”);
@自动连线
供应商服务供应商服务;
@自动连线
clientepository clientepository;
@自动连线
ProdutoRepository ProdutoRepository;
私人名单;
私人文达文达;
活页夹binderVenda=新活页夹(Venda.class);
公共文达维{
}
@施工后
公共void init(){
configuraTela();
}
私有void configuraTela(){
设置边距(假);
设置填充(假);
configuralTvenda();
配置fltbarabotoes();
配置Gjanela();
populardvenda();
配置活页夹();
添加(hltVenda、hltBarraBotoes);
}
私有无效配置fltbarabotoes(){
btnNovo.addThemeVariants(按钮变量LUMO_PRIMARY);
btnNovo.addClickListener(e->{
novoClick();
});
btnAlterar.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
btnAlterar.addClickListener(e->{
alteraclick();
});
btnExcluir.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
btnExcluir.addClickListener(e->{
排除单击();
});
添加(btnNovo、btnAlterar、btnExcluir);
}
venderDiv.setHeight("120px");
venderDiv.setHeight("30%");