- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
如何在表格底部做一行求和(TreeTableView - JavaFX 或 TableView)? (对不起我的英语不好)请写一个例子。
以图片(总计)为例 http://i.stack.imgur.com/uRLTZ.gif
在每一列下面我都放了一个标签来显示SUM。但是这对我没有好处。
一些FXML`
<AnchorPane fx:id="anchorPaneWithTable" minHeight="0.0" minWidth="0.0" prefHeight="538.0" prefWidth="1275.0">
<children>
<TreeTableView fx:id="treeTableMainStat" prefHeight="386.0" prefWidth="1303.0" showRoot="false" AnchorPane.bottomAnchor="11.0" AnchorPane.leftAnchor="10.0" AnchorPane.rightAnchor="10.0" AnchorPane.topAnchor="10.0">
<columns>
<TreeTableColumn fx:id="treeProgramNameCol" editable="false" prefWidth="230.0" resizable="false" text="AP Name" />
<TreeTableColumn fx:id="treeLastDateCol" editable="false" prefWidth="90.0" resizable="false" text="Last Date" />
<TreeTableColumn fx:id="treeLoginCol" editable="false" prefWidth="70.0" resizable="false" text="Login" />
<TreeTableColumn fx:id="treeAffiliateIDCol" editable="false" prefWidth="92.0" resizable="false" text="Affiliate ID" />
<TreeTableColumn fx:id="treeRawClicksCol" editable="false" resizable="false" text="Raw" />
<TreeTableColumn fx:id="treeUniqueClicksCol" editable="false" resizable="false" text="Uniq" />
<TreeTableColumn fx:id="treeSignupCounterCol" editable="false" prefWidth="67.0" resizable="false" text="SignupC" />
<TreeTableColumn fx:id="treeSignupMoneyCol" editable="false" minWidth="3.0" prefWidth="77.0" resizable="false" text="SignupM" />
<TreeTableColumn fx:id="treeRebillCounterCol" editable="false" minWidth="0.0" prefWidth="66.0" resizable="false" text="RebillC" />
<TreeTableColumn fx:id="treeRebillMoneyCol" editable="false" prefWidth="78.0" resizable="false" text="RebillM" />
<TreeTableColumn fx:id="treeRefundChargebackCounterCol" editable="false" prefWidth="105.0" resizable="false" text="R/Ch Counter" />
<TreeTableColumn fx:id="treeRefundChargebackMoneyCol" editable="false" prefWidth="104.0" resizable="false" text="R/Ch Money" />
<TreeTableColumn fx:id="treeTotalMoneyCol" editable="false" minWidth="0.0" prefWidth="110.0" resizable="false" text="Total Money" />
</columns>
<contextMenu>
<ContextMenu>
<items>
<MenuItem mnemonicParsing="false" onAction="#handleAddNewAffiliateProgram" text="Add new AP" />
<MenuItem mnemonicParsing="false" text="Unspecified Action" />
<MenuItem mnemonicParsing="false" text="Unspecified Action" />
<MenuItem mnemonicParsing="false" onAction="#handleDeleteAffiliateProgram" text="Delete AP" />
<SeparatorMenuItem mnemonicParsing="false" />
<MenuItem mnemonicParsing="false" onAction="#handleEditAP" text="Properties" />
</items>
</ContextMenu>
</contextMenu>
</TreeTableView>
<ProgressIndicator fx:id="refreshingIndicator" layoutX="478.0" layoutY="124.0" prefHeight="250.0" prefWidth="374.0" progress="-1.0" AnchorPane.leftAnchor="478.0" AnchorPane.topAnchor="124.0" />
</children>
</AnchorPane>
</content>
</Tab>
<Tab closable="false" text="Empty Tab">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" visible="false" />
</content>
</Tab>
</tabs>
</TabPane>
<HBox prefHeight="35.0">
<children>
<Label fx:id="apNameLab" prefHeight="30.0" prefWidth="229.0" text="Label" />
<Separator orientation="VERTICAL" prefHeight="200.0" />
<Label fx:id="lastDateLab" prefHeight="30.0" prefWidth="85.0" text="LastDate" />
<Separator orientation="VERTICAL" prefHeight="200.0" />
<Label fx:id="loginLab" prefHeight="30.0" prefWidth="64.0" text="Login" />
<Separator orientation="VERTICAL" prefHeight="200.0" />
<Label fx:id="affilIdLab" prefHeight="30.0" prefWidth="86.0" text="AffID" />
<Separator orientation="VERTICAL" prefHeight="200.0" />
<Label fx:id="rawLab" prefHeight="30.0" prefWidth="74.0" text="rawLab" />
<Separator orientation="VERTICAL" prefHeight="200.0" />
<Label fx:id="uniqLab" prefHeight="30.0" prefWidth="74.0" text="uniqLab" />
<Separator orientation="VERTICAL" prefHeight="200.0" />
<Label fx:id="signCLab" prefHeight="30.0" prefWidth="61.0" text="SignCLab" />
<Separator orientation="VERTICAL" prefHeight="200.0" />
<Label fx:id="signMLab" prefHeight="30.0" prefWidth="71.0" text="SignMLab" />
<Separator orientation="VERTICAL" prefHeight="200.0" />
<Label fx:id="rebillCLab" prefHeight="30.0" prefWidth="61.0" text="RebillCLab" />
<Separator orientation="VERTICAL" prefHeight="200.0" />
<Label fx:id="rebillMLab" prefHeight="30.0" prefWidth="72.0" text="RebillMLab" />
<Separator orientation="VERTICAL" prefHeight="200.0" />
<Label fx:id="rChCountLab" prefHeight="30.0" prefWidth="99.0" text="RChCounLab" />
<Separator orientation="VERTICAL" prefHeight="200.0" />
<Label fx:id="rChMonLab" prefHeight="30.0" prefWidth="98.0" text="RChMonLab" />
<Separator orientation="VERTICAL" prefHeight="200.0" />
<Label fx:id="totalLab" prefHeight="30.0" prefWidth="110.0" text="TotalLab" />
</children>
<padding>
<Insets left="10.0" />
</padding>
</HBox>
</children>
</VBox>`
将标签绑定(bind)到列
//TreeView_Begin
@FXML
private TreeTableView<APDataFromDB> treeTableMainStat;
@FXML
private TreeTableColumn<APDataFromDB, Integer> treeProgramNameCol;
@FXML
private TreeTableColumn<APDataFromDB, Integer> treeLastDateCol;
@FXML
private TreeTableColumn<APDataFromDB, Integer> treeLoginCol;
@FXML
private TreeTableColumn<APDataFromDB, Integer> treeAffiliateIDCol;
@FXML
private TreeTableColumn<APDataFromDB, Integer> treeRawClicksCol;
@FXML
private TreeTableColumn<APDataFromDB, Integer> treeUniqueClicksCol;
@FXML
private TreeTableColumn<APDataFromDB, Integer> treeSignupCounterCol;
@FXML
private TreeTableColumn<APDataFromDB, Double> treeSignupMoneyCol;
@FXML
private TreeTableColumn<APDataFromDB, Integer> treeRebillCounterCol;
@FXML
private TreeTableColumn<APDataFromDB, Double> treeRebillMoneyCol;
@FXML
private TreeTableColumn<APDataFromDB, Integer> treeRefundChargebackCounterCol;
@FXML
private TreeTableColumn<APDataFromDB, Double> treeRefundChargebackMoneyCol;
@FXML
private TreeTableColumn<APDataFromDB, Double> treeTotalMoneyCol;
//TreeView_End
@FXML
Label apNameLab = new Label();
@FXML
Label lastDateLab = new Label();
@FXML
Label loginLab = new Label();
@FXML
Label affilIdLab = new Label();
@FXML
Label rawLab = new Label();
@FXML
Label uniqLab = new Label();
@FXML
Label signCLab = new Label();
@FXML
Label signMLab = new Label();
@FXML
Label rebillCLab = new Label();
@FXML
Label rebillMLab = new Label();
@FXML
Label rChCountLab = new Label();
@FXML
Label rChMonLab = new Label();
@FXML
Label totalLab = new Label();
@FXML
private void initialize() throws SQLException {
final String pattern = "yyyy-MM-dd";
datePickerStart.setValue(LocalDate.now());
datePickerEnd.setValue(LocalDate.now());
allDownloadsProgressBar.setProgress(0);
refreshingIndicator.setVisible(false);
StringConverter stringConverter = new StringConverter<LocalDate>() {
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(pattern);
@Override
public String toString(LocalDate date) {
if (date != null) {
return dateFormatter.format(date);
} else {
return "";
}
}
@Override
public LocalDate fromString(String string) {
if (string != null && !string.isEmpty()) {
return LocalDate.parse(string, dateFormatter);
} else {
return null;
}
}
};
datePickerStart.setConverter(stringConverter);
datePickerStart.setPromptText(pattern.toLowerCase());
datePickerEnd.setConverter(stringConverter);
datePickerEnd.setPromptText(pattern.toLowerCase());
// устанавливаем тип и значение которое должно хранится в колонке
//TreeView_begin
treeProgramNameCol.setCellValueFactory(new TreeItemPropertyValueFactory<>("apName"));
treeLastDateCol.setCellValueFactory(new TreeItemPropertyValueFactory<>("lastDate"));
treeLoginCol.setCellValueFactory(new TreeItemPropertyValueFactory<>("login"));
treeAffiliateIDCol.setCellValueFactory(new TreeItemPropertyValueFactory<>("affiliateID"));
treeRawClicksCol.setCellValueFactory(new TreeItemPropertyValueFactory<>("raw"));
treeUniqueClicksCol.setCellValueFactory(new TreeItemPropertyValueFactory<>("uniq"));
treeSignupCounterCol.setCellValueFactory(new TreeItemPropertyValueFactory<>("signupCounter"));
treeSignupMoneyCol.setCellValueFactory(new TreeItemPropertyValueFactory<>("signup"));
treeRebillCounterCol.setCellValueFactory(new TreeItemPropertyValueFactory<>("rebillCounter"));
treeRebillMoneyCol.setCellValueFactory(new TreeItemPropertyValueFactory<>("rebillMoney"));
treeRefundChargebackCounterCol.setCellValueFactory(new TreeItemPropertyValueFactory<>("refundChargebackCounter"));
treeRefundChargebackMoneyCol.setCellValueFactory(new TreeItemPropertyValueFactory<>("refundChargebackMoney"));
treeTotalMoneyCol.setCellValueFactory(new TreeItemPropertyValueFactory<>("totalMoney"));
// заполняем таблицу данными
// Platform.runLater(new Runnable() {
// @Override
// public void run() {
//
// }
// });
new Thread(new Runnable() {
@Override
public void run() {
buildTreeOfStatsFromDB();
//Binding
apNameLab.prefWidthProperty().bind(treeProgramNameCol.widthProperty().multiply(1));
lastDateLab.prefWidthProperty().bind(treeLastDateCol.widthProperty().multiply(1));
loginLab.prefWidthProperty().bind(treeLoginCol.widthProperty().multiply(1));
affilIdLab.prefWidthProperty().bind(treeAffiliateIDCol.widthProperty().multiply(1));
rawLab.prefWidthProperty().bind(treeRawClicksCol.widthProperty().multiply(1));
uniqLab.prefWidthProperty().bind(treeUniqueClicksCol.widthProperty().multiply(1));
signCLab.prefWidthProperty().bind(treeSignupCounterCol.widthProperty().multiply(1));
signMLab.prefWidthProperty().bind(treeSignupMoneyCol.widthProperty().multiply(1));
rebillCLab.prefWidthProperty().bind(treeRebillCounterCol.widthProperty().multiply(1));
rebillMLab.prefWidthProperty().bind(treeRebillMoneyCol.widthProperty().multiply(1));
rChCountLab.prefWidthProperty().bind(treeRefundChargebackCounterCol.widthProperty().multiply(1));
rChMonLab.prefWidthProperty().bind(treeRefundChargebackMoneyCol.widthProperty().multiply(1));
totalLab.prefWidthProperty().bind(treeTotalMoneyCol.widthProperty().multiply(1));
getSumLabel();
}
}).start();
// buildTreeOfStatsFromDB();
// Enable arrow keys for delete AP
treeTableMainStat.addEventFilter(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent keyEvent) {
if (keyEvent.getCode() == KeyCode.Y && keyEvent.isControlDown()) {
handleDeleteAffiliateProgram();
keyEvent.consume();
}
}
});
}
获取所有的SUM
private void getSumLabel() {
长 rawHitsSum = 0;
长 uniqHitsSum = 0;
long signCountSum = 0;
双 signMoneySum = 0;
long rebillCountSum = 0;
双 rebillMoneySum = 0;
长 rChCountSum = 0;
双 rChMoneySum = 0;
双totalMoneySum = 0;
ObservableList
> allData = rootItem.getChildren();
对于 (TreeItem
apDataFromDBTreeItem : allData) {
rawHitsSum += apDataFromDBTreeItem.getValue().getRaw();
uniqHitsSum += apDataFromDBTreeItem.getValue().getUniq();
signCountSum += apDataFromDBTreeItem.getValue().getSignupCounter();
signMoneySum += apDataFromDBTreeItem.getValue().getSignup();
rebillCountSum += apDataFromDBTreeItem.getValue().getRebillCounter();
rebillMoneySum += apDataFromDBTreeItem.getValue().getRebillMoney();
rChCountSum += apDataFromDBTreeItem.getValue().getRefundChargebackCounter();
rChMoneySum += apDataFromDBTreeItem.getValue().getRefundChargebackMoney();
totalMoneySum += apDataFromDBTreeItem.getValue().getTotalMoney();
}
final long finalRawHitsSum = rawHitsSum;
final long finalUniqHitsSum = uniqHitsSum;
final long finalSignCountSum = signCountSum;
final long finalSignCountSum1 = signCountSum;
final long finalRebillCountSum = rebillCountSum;
final double finalRebillMoneySum = rebillMoneySum;
final long finalRChCountSum = rChCountSum;
final double finalRChMoneySum = rChMoneySum;
final double finalTotalMoneySum = totalMoneySum;
Platform.runLater(new Runnable() {
@覆盖
公共(public)无效运行(){
rawLab.setText(String.valueOf(finalRawHitsSum));
uniqLab.setText(String.valueOf(finalUniqHitsSum));
signCLab.setText(String.valueOf(finalSignCountSum1));
signMLab.setText(String.valueOf(finalSignCountSum));
rebillCLab.setText(String.valueOf(finalRebillCountSum));
rebillMLab.setText(String.valueOf(finalRebillMoneySum));
rChCountLab.setText(String.valueOf(finalRChCountSum));
rChMonLab.setText(String.valueOf(finalRChMoneySum));
totalLab.setText(String.valueOf(finalTotalMoneySum));
}
});
System.out.println(rawHitsSum);
}
最佳答案
关于JavaFX .如何在表格底部制作一行求和(总行)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30506075/
我想在一个页面上做一个按钮,可以在同一页面调用一个JS函数。该函数将需要创建(打开)新窗口,其 HTML 代码由 JS 函数本身提供。我该怎么做? 这样做的目的是从特定页面生成一个打印友好的页面。 请
我一直在用 php 开发这个项目。该项目的一半是使用 mysql_query 完成的,最新的模块是使用 mysqli 制作的。有很多模块,我不想更改代码。如果是这样的话会不会产生问题。或者我应该将其全
我安装了好几次 qt creator,但它从来没有像我现在的 PC 那样花钱;首先,我使用我的 Pendrive(Qt 5.8 的)上一直有的安装程序,告诉我我无法下载一些存储库,我下载了相同安装程序
我安装了 Qt Creator 5.10.1,当我构建项目时出现错误:“无法确定要运行哪个”make“命令。检查构建配置中的”make“步骤。”。 我已经在另一台 PC 上安装了 Qt,我看到了这个问
看看这个 makefile,它有某种原始的进度指示(可能是一个进度条)。 请给我建议/意见! # BUILD 最初是未定义的 ifndef 构建 # max 等于 256 个 x 十六:= x x x
这个问题会有点长,对此我很抱歉:) 我花了几天时间寻找最好的解决方案,以在 asp mvc 和 JQuery 中制作图像库。 主要问题是当用户点击拇指时显示图像。 我想让整个浏览器 View 变成黑色
我是Python方面的 super 高手。我一直在努力寻找适当的解决方案。这是列表,L = [0, 0, 0, 3, 4, 5, 6, 0, 0, 0, 0, 11, 12, 13, 14, 0, 0
让我们考虑两个简化的 CMakeLists.txt set(GTEST "/usr/local/lib/libgtest.a") set(GMOCK "/usr/local/lib/libgmock.
我如何制作 Makefile,因为这是按源代码分发程序的最佳方式。请记住,这是针对 C++ 程序的,而我是从 C 开发领域开始的。但是可以为我的 Python 程序制作 Makefile 吗? 最佳答
由于 Ord 是 Eq 的子类,我发现很难理解创建该类的新类型实例的样子。 我已经设法做到了: newtype NT1 = NT1 Integer instance Eq NT1 wh
在 PowerShell 中,我想编写一个函数,它接受不同的选项作为参数。没关系,如果它接收多个参数,但它必须接收至少一个参数。我想通过参数定义而不是之后的代码来强制执行它。我可以使用以下代码让它工作
我正在通过构建包使用 enable-ssl 在 heroku (ubuntu) 上安装 ffmpeg。我能够一直构建到这些错误: install: cannot create regular file
我是 FFmpeg 的新手,但作为一个学习一些 mysql 数据库的项目,我正在尝试创建一个视频上传网站。 当我尝试使用此代码制作缩略图时: shell_exec("/usr/local/bin/ff
我想要一个绘制可绘制对象的 Actor ,但将其剪辑为 Actor 的大小。我从 Widget 派生这个类,并使用一些硬编码的值作为一个简单的测试: public class MyWidget ext
我一直在查看 Faxien+Sinan 和 Rebar,Erlang OTP 的基本理念似乎是,在单个 Erlang 镜像实例上安装应用程序和版本。保持发布自包含的最佳实践是什么?有没有办法打包发布,
我正在尝试克隆存储库,但它应该是彼此独立的副本。这背后有什么魔法吗,或者只是使用 svn 客户端并克隆它? 谢谢 最佳答案 试试 svnadmin hotcopy .您可以在 repo mainten
我想做一个这样的菜单: Item 1 Item 2 Item 3 Subitem 1 Subitem 2 但我得到了这个:
为 Yii 创建扩展的最佳方式是什么? 这是我到目前为止所做的 我希望它可以通过 composer 安装,所以我为它创建了一个 github repo。 我在文件夹 vendor/githubname
我尝试制作一个ActionListener,但它给了我一个错误。我导入了事件,但它仍然不起作用。这是我的代码: send.addActionListener(new jj); private clas
我需要能够将 div 内的 HTML 代码恢复为页面就绪状态。我需要这个,因为我想在页面准备好后对 HTML 代码进行一些更改,然后在需要时将其恢复到页面准备好时的状态.. 我想使用克隆,但是如何只复
我是一名优秀的程序员,十分优秀!