java - CellTables 和 css (GWT)

标签 java gwt background

谁能帮我设置 CellTable 行的背景 拜托,我整晚都在努力做这件事,但一直失败,这是 快把我逼疯了。我试过调用 setRowStyles() 但那 似乎没有用,我读过你不能改变 设置样式后 CellTable 的样式 - 作为默认样式 已设置。 然后我尝试用我自己的界面构建一个 CellTable CellTableResources 在关于这个确切主题的帖子中看到但是 给了我关于未混淆的 ccs 元素的错误消息....这是我的 css 未被混淆是一个明显的错误消息。 现在我不知道该尝试什么,我正式陷入困境。

我一直在阅读关于这个 @external 的文章,它似乎没有帮助......甚至不确定外部位应该去哪里......我猜是在 css 中,但像往常一样,当卡住时我'我正在尝试任何事情!

托尼克

最佳答案

我知道这有多令人沮丧,我也遇到过同样的情况。我已经包括了我用来让它工作的所有步骤。但听起来您就快到了,所以您可能不需要所有这些。

正如您提到的,要使用您自己的 css 类名称,您必须实现 com.google.gwt.user.cellview.client.CellTable.Resources 并将您的类的一个实例传递给 CellTable 构造函数。

CellTable 声明

CellTable<MyData> myCellTable = new CellTable<MyData>(10, MyResources.INSTANCE);

Resources 的实现还需要 com.google.gwt.resources.client.ImageResourcecom.google.gwt.user.cellview.client.CellTable.Style 的实例,将提供您的 css 类名称的类。为了简单起见,这里使用了 Resources、ImageResource 和 Style 的 stub 实现,它们除了提供字符串作为样式名称外什么都不做。最后,这些可以来自 ClientBundle,但这不是必需的。

样式 stub (使用字符串文字)

import com.google.gwt.user.cellview.client.CellTable.Style;

public class MyStyle implements Style {

    public static final MyStyle INSTANCE = new MyStyle();

    @Override public boolean ensureInjected() {

        return false;
    }

    @Override public String cellTableCell() {

        return "myCssClassName";
    }

    @Override public String cellTableEvenRow() {

        return "myCssClassName";
    }

    @Override public String cellTableEvenRowCell() {

        return "myCssClassName";
    }

    @Override public String cellTableOddRow() {

        return "myCssClassName";
    }

    @Override public String cellTableOddRowCell() {

        return "myCssClassName";
    }

    @Override public String cellTableFirstColumn() {

        return "myCssClassName";
    }

    @Override public String cellTableFirstColumnFooter() {

        return "myCssClassName";
    }

    @Override public String cellTableFirstColumnHeader() {

        return "myCssClassName";
    }

    @Override public String cellTableFooter() {

        return "myCssClassName";
    }

    @Override public String cellTableHeader() {

        return "myCssClassName";
    }

    @Override public String cellTableHoveredRow() {

        return "myCssClassName";
    }

    @Override public String cellTableHoveredRowCell() {

        return "myCssClassName";
    }

    @Override public String cellTableKeyboardSelectedCell() {

        return "myCssClassName";
    }

    @Override public String cellTableKeyboardSelectedRow() {

        return "myCssClassName";
    }

    @Override public String cellTableKeyboardSelectedRowCell() {

        return "myCssClassName";
    }

    @Override public String cellTableLastColumn() {

        return "myCssClassName";
    }

    @Override public String cellTableLastColumnFooter() {

        return "myCssClassName";
    }

    @Override public String cellTableLastColumnHeader() {

        return "myCssClassName";
    }

    @Override public String cellTableLoading() {

        return "myCssClassName";
    }

    @Override public String cellTableSelectedRow() {

        return "myCssClassName";
    }

    @Override public String cellTableSelectedRowCell() {

        return "myCssClassName";
    }

    @Override public String cellTableSortableHeader() {

        return "myCssClassName";
    }

    @Override public String cellTableSortedHeaderAscending() {

        return "myCssClassName";
    }

    @Override public String cellTableSortedHeaderDescending() {

        return "myCssClassName";
    }

    @Override public String cellTableWidget() {

        return "myCssClassName";
    }

    @Override public String getName() {

        return "myCssClassName";
    }

    @Override public String getText() {

        return "myCssClassName";
    }
}

图像资源 stub

import com.google.gwt.resources.client.ImageResource;

class MyImageResource implements ImageResource {

    public static final MyImageResource INSTANCE = new MyImageResource();

    @Override public int getHeight() {

        return 0;
    }

    @Override public int getLeft() {

        return 0;
    }

    @Override public String getName() {

        return "";
    }

    @Override public int getTop() {

        return 0;
    }

    @Override public String getURL() {

        return "";
    }

    @Override public int getWidth() {

        return 0;
    }

    @Override public boolean isAnimated() {

        return false;
    }
}

资源 stub

import com.google.gwt.resources.client.ImageResource;
import com.google.gwt.user.cellview.client.CellTable.Resources;
import com.google.gwt.user.cellview.client.CellTable.Style;

public class MyResources implements Resources {

    public static final MyResources INSTANCE = new MyResources();

    @Override public ImageResource cellTableFooterBackground() {

        return MyImageResource.INSTANCE;
    }

    @Override public ImageResource cellTableHeaderBackground() {

        return MyImageResource.INSTANCE;
    }

    @Override public ImageResource cellTableLoading() {

        return MyImageResource.INSTANCE;
    }

    @Override public ImageResource cellTableSelectedBackground() {

        return MyImageResource.INSTANCE;
    }

    @Override public ImageResource cellTableSortAscending() {

        return MyImageResource.INSTANCE;
    }

    @Override public ImageResource cellTableSortDescending() {

        return MyImageResource.INSTANCE;
    }

    @Override public Style cellTableStyle() {

        return MyStyle.INSTANCE;
    }
}

因此,此时您应该有一个没有样式的 Cell Tabula Rasa,您应该能够在浏览器中检查您的 CellTable 元素,并将 myCssClassName 视为无处不在的 CSS 类名,未混淆。

如果此时您使用传统方法之一链接到样式表,您应该能够设置“myCssClassName”字符串以与您的特定样式表相对应。

样式表链接

<link href="myStyleSheet.css" rel="stylesheet" type="text/css">

现在,如果你想使用 ClientBundle 注入(inject)你的样式,你还有一些额外的步骤。

首先,确保您在某个时刻注入(inject)了您的样式表;这真的很容易忘记。模块的 EntryPoint 中有一个简单的位置,这样您就可以确定它被调用了。

CssResource 注入(inject)

MyClientBundle.INSTANCE.myCssResource().ensureInjected();

最后使用您的 CssResource 为之前的 Style 实现提供名称。无论 CSS 类名称是否被混淆,它们都应该被注入(inject)并以这种方式使用正确的名称。

ClientBundle stub

import com.google.gwt.core.client.GWT;
import com.google.gwt.resources.client.ClientBundle;

public interface MyClientBundle extends ClientBundle {

    public static final MyClientBundle INSTANCE = GWT.<MyClientBundle>create(MyClientBundle.class);

    @Override @Source("path/to/myStyleSheet.css") MyCssResource myCssResource();
}

CssResource stub

import com.google.gwt.resources.client.CssResource;

public interface MyCssResource extends CssResource {

    @ClassName("myCssClassName") String myCssClassName();

    @ClassName("myOtherName") String myOtherCssClassName();
}

样式表 stub

.myCssClassName {
    background-color: magenta;
    /* Yes, you will see when it is working. */
}

@external .myOtherName {
    background-color: yellow;
}

样式 stub (使用 ClientBundle)

import com.google.gwt.user.cellview.client.CellTable.Style;

public class MyStyle implements Style {

    public static final MyStyle INSTANCE = new MyStyle();

    @Override public boolean ensureInjected() {

        return false;
    }

    @Override public String cellTableCell() {

        return MyCssResource.INSTANCE.myCssClassName();
    }

    @Override public String cellTableEvenRow() {

        return MyCssResource.INSTANCE.myCssClassName();
    }

    @Override public String cellTableEvenRowCell() {

        return MyCssResource.INSTANCE.myCssClassName();
    }

    @Override public String cellTableOddRow() {

        return MyCssResource.INSTANCE.myCssClassName();
    }

    @Override public String cellTableOddRowCell() {

        return MyCssResource.INSTANCE.myCssClassName();
    }

    @Override public String cellTableFirstColumn() {

        return MyCssResource.INSTANCE.myCssClassName();
    }

    @Override public String cellTableFirstColumnFooter() {

        return MyCssResource.INSTANCE.myCssClassName();
    }

    @Override public String cellTableFirstColumnHeader() {

        return MyCssResource.INSTANCE.myCssClassName();
    }

    @Override public String cellTableFooter() {

        return MyCssResource.INSTANCE.myCssClassName();
    }

    @Override public String cellTableHeader() {

        return MyCssResource.INSTANCE.myCssClassName();
    }

    @Override public String cellTableHoveredRow() {

        return MyCssResource.INSTANCE.myCssClassName();
    }

    @Override public String cellTableHoveredRowCell() {

        return MyCssResource.INSTANCE.myCssClassName();
    }

    @Override public String cellTableKeyboardSelectedCell() {

        return MyCssResource.INSTANCE.myCssClassName();
    }

    @Override public String cellTableKeyboardSelectedRow() {

        return MyCssResource.INSTANCE.myCssClassName();
    }

    @Override public String cellTableKeyboardSelectedRowCell() {

        return MyCssResource.INSTANCE.myCssClassName();
    }

    @Override public String cellTableLastColumn() {

        return MyCssResource.INSTANCE.myCssClassName();
    }

    @Override public String cellTableLastColumnFooter() {

        return MyCssResource.INSTANCE.myCssClassName();
    }

    @Override public String cellTableLastColumnHeader() {

        return MyCssResource.INSTANCE.myCssClassName();
    }

    @Override public String cellTableLoading() {

        return MyCssResource.INSTANCE.myCssClassName();
    }

    @Override public String cellTableSelectedRow() {

        return MyCssResource.INSTANCE.myCssClassName();
    }

    @Override public String cellTableSelectedRowCell() {

        return MyCssResource.INSTANCE.myCssClassName();
    }

    @Override public String cellTableSortableHeader() {

        return MyCssResource.INSTANCE.myCssClassName();
    }

    @Override public String cellTableSortedHeaderAscending() {

        return MyCssResource.INSTANCE.myCssClassName();
    }

    @Override public String cellTableSortedHeaderDescending() {

        return MyCssResource.INSTANCE.myCssClassName();
    }

    @Override public String cellTableWidget() {

        return MyCssResource.INSTANCE.myCssClassName();
    }

    @Override public String getName() {

        return MyCssResource.INSTANCE.myCssClassName();
    }

    @Override public String getText() {

        return MyCssResource.INSTANCE.myCssClassName();
    }
}

应该是这样的。我敢肯定还有其他方法可以做同样的事情,但到目前为止这对我来说效果很好。祝你好运,我希望这能为你节省一些时间。

关于java - CellTables 和 css (GWT),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7369356/

相关文章:

java - Groovy 脚本错误 : java. io.NotSerializedException : com. xlson.groovycsv.CsvIterator

android - Cordova 是否支持压缩响应?

css - 具有图像和扩展渐变的背景的无效 CSS 属性值

html - 具有匹配水平导航的可缩放背景图像

jquery - 从 jquery 数组加载 css 背景图像

java - Libgdx : Sprite want stop moving;

java - 如何修复损坏的导入?

dom - 使用 GWT DOM 类在 <svg> 中创建的 <path> 没有显示在屏幕上

java - 部署时抛出奇怪的持久性异常

java - 解析 JSON 时 Jackson 错误 "Illegal character... only regular white space allowed"