gpt4 book ai didi

java - Vaadin 窗口调整大小和组件内部自动对齐

转载 作者:行者123 更新时间:2023-11-30 10:16:40 24 4
gpt4 key购买 nike

我有一个扩展 Window 的类,如下所示。我只给出与 Window 相关的代码。删除了窗口组件代码以保持代码和问题清晰。我有一个看起来像图片中的窗口。当我调整窗口大小时,我期望窗口内的组件也将调整大小。我想我缺少一些 API 调用来保持组件比例随窗口一起增加。还是我需要自己以编程方式完成?请让我知道如何完成?

 public class VisibleColumnPanel extends Window implements Window.ResizeListener{

public VisibleColumnPanel(){

center();
setResizable(true);
setModal(true);
setImmediate(true);
//setSizeFull();
addListener(this);
this.setWidth(720, Unit.PIXELS);
this.setHeight(600, Unit.PIXELS);
}

@Override
public void windowResized(ResizeEvent resizeEvent) {

System.out.println("hit here now");

}


}

没有最大化的普通窗口:- enter image description here

最大化窗口后:- enter image description here

那么有什么方法可以让窗口内的组件也都随着窗口一起消耗或维持它们的比例呢?

如果我可以处理最大化按钮点击事件,我就可以通过编程来完成。我实现了 Window.ResizeListener。 windowResized 事件仅在我尝试通过拖动鼠标调整窗口大小时触发。有没有办法获得最大化/恢复按钮点击事件?

最佳答案

@AndréSchild 的评论是正确的,例如将 TwinColSelect 设置为 setWidth("100%")。

另请注意,有记录在案的错误,即 TwinColSelect 调整大小并不总是在 Window 中正确发生 https://github.com/vaadin/framework/issues/10652好消息是正在修复该问题。

您不需要捕获调整大小事件来完成您正在尝试的事情。相反,您应该正确使用布局参数,以便正确调整组件和布局。这样它的工作效率更高(即没有服务器往返),因为浏览器将知道如何调整大小。

这是一个简化的示例应用

package com.example.myapplication;

import java.io.Serializable;
import java.util.Arrays;
import java.util.List;

import javax.servlet.annotation.WebServlet;

import com.vaadin.annotations.Theme;
import com.vaadin.annotations.VaadinServletConfiguration;
import com.vaadin.server.VaadinRequest;
import com.vaadin.server.VaadinServlet;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.Grid;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.TextField;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window;

@Theme("mytheme")
public class MyUI extends UI {

public class Person implements Serializable {

public Person(String name, int birthyear) {
this.name = name;
this.birthyear = birthyear;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getBirthyear() {
return birthyear;
}

public void setBirthyear(int birthyear) {
this.birthyear = birthyear;
}

private String name;
private int birthyear;
}

public class MyWindow extends Window implements Window.ResizeListener {
final HorizontalLayout hLayout = new HorizontalLayout();

public MyWindow() {
setCaption("Grid");
List<Person> people = Arrays.asList(
new Person("Nicolaus Copernicus", 1543),
new Person("Galileo Galilei", 1564),
new Person("Johannes Kepler", 1571));

Grid<Person> grid1 = new Grid<>();
grid1.setItems(people);
grid1.addColumn(Person::getName).setCaption("Name");
grid1.addColumn(Person::getBirthyear).setCaption("Year of birth");
grid1.setWidth("100%");

VerticalLayout buttons = new VerticalLayout();

Button button1 = new Button("<-");
Button button2 = new Button("->");
buttons.addComponents(button1,button2);
buttons.setComponentAlignment(button1, Alignment.MIDDLE_CENTER);
buttons.setComponentAlignment(button2, Alignment.MIDDLE_CENTER);

Grid<Person> grid2 = new Grid<>();
grid2.setItems(people);
grid2.addColumn(Person::getName).setCaption("Name");
grid2.addColumn(Person::getBirthyear).setCaption("Year of birth");
grid2.setWidth("100%");

hLayout.addComponents(grid1,buttons,grid2);
hLayout.setExpandRatio(grid1, 3);
hLayout.setExpandRatio(buttons, 1);
hLayout.setExpandRatio(grid2, 3);
hLayout.setWidth("100%");

setContent(hLayout);
setWidth("800px");
}

@Override
public void windowResized(ResizeEvent e) {
System.out.println("Window resized");
}
}

@Override
protected void init(VaadinRequest vaadinRequest) {
final VerticalLayout layout = new VerticalLayout();
Label label = new Label("Window example");
layout.addComponent(label);

final MyWindow window = new MyWindow();

addWindow(window);

window.addResizeListener(event -> {
Label lab = new Label("Window resized");
layout.addComponent(lab);
});

setContent(layout);
}

@WebServlet(urlPatterns = "/*", name = "MyUIServlet", asyncSupported = true)
@VaadinServletConfiguration(ui = MyUI.class, productionMode = false)
public static class MyUIServlet extends VaadinServlet {
}
}

关于java - Vaadin 窗口调整大小和组件内部自动对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49949802/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com