如何根据需要使用滚动条构建扩展的vaadin窗口

时间:2018-04-20 13:18:45

标签: java vaadin vaadin7

我正在构建一个扩展的窗口/布局,它将扩展/缩小所提供的数据,可能会扩展以填充浏览器窗口。

编辑:滚动条应位于工作区,而不是窗口。

到目前为止,我只是设法通过一个简单的标签列表使其垂直工作(请参阅simple_list.png)。

  • 垂直滚动条在浏览器窗口垂直填充时出现水平滚动条始终存在,窗口/布局的宽度似乎由面板标题的长度和窗口图标在右上方指示。
    编辑:滚动条在面板上确定。没有横向扩展。
  • GridLayout的完全失败(请参阅gridlayout.png)。
    编辑:I.E工作区没有滚动条(面板)

最终布局应该有一个中央工作区和页眉,页脚,左/右区域。工作区域根据数据扩展。

把树弄错了? CSSLayout?不适合Vaadin?

感谢任何帮助/指导。

下面的简化测试用例(Vaadin 7,子类化Window)。

public class RendPanel extends JPanel {

    private static final long serialVersionUID = 1L;

    int widthe  = 320;
    int heighte = 240;

    double angle = Math.toRadians(220);
    double sin = Math.sin(angle);
    double cos = Math.cos(angle);
    double x0 = 0.5 * (widthe  - 1);     // point to rotate about
    double y0 = 0.5 * (heighte - 1);     // center of image

    public static BufferedImage fbuffer;
    public RendPanel(int width, int height) {
        fbuffer = new BufferedImage(320, 240, BufferedImage.TYPE_INT_RGB);

        BufferedImage in = null;
        try { in = ImageIO.read(new File("square.png")); } //32x32 square .png
        catch (IOException e) { e.printStackTrace(); }

        for (int i = 0; i < in.getWidth(); i++) {
            for (int j = 0; j < in.getHeight(); j++) {
                fbuffer.setRGB(i + (320 / 2) - 16, j + (240 / 2) - 16, in.getRGB(i, j));
            }
        }

        BufferedImage neww = new BufferedImage(320, 240, BufferedImage.TYPE_INT_RGB);

        for (int x = 0; x < widthe; x++) {
            for (int y = 0; y < heighte; y++) {
                if(x >= x0 - 32 && x <= x0 + 32 && y >= y0 - 32 && y <= y0 + 32){
                    double a = x - x0;
                    double b = y - y0;
                    int xx = (int) (+a * cos - b * sin + x0);
                    int yy = (int) (+a * sin + b * cos + y0);

                    // plot pixel (x, y) the same color as (xx, yy) if it's in bounds
                    if (xx >= 0 && xx < width && yy >= 0 && yy < height) {
                        neww.setRGB(xx, yy, fbuffer.getRGB(x, y));
                    }
                }
            }
        }

        fbuffer = neww;
        repaint();

        setPreferredSize(new Dimension(width, height));
    }

    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        g.drawImage(fbuffer, 0, 0, null);
    }
}

}

simple_list.png
gridlayout.png

1 个答案:

答案 0 :(得分:1)

Vaadin文件说:

  

如果子窗口具有固定或百分比大小且其内容变得太大而无法放入内容区域,则会显示特定方向的滚动条。另一方面,如果子窗口在方向上具有未定义的大小,则它将适合内容的大小,并且永远不会获得滚动条。

来源:https://vaadin.com/docs/v7/framework/layout/layout-sub-window.html