- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个 jtable,其中我根据模型的值重新着色行,如下所示:
resultTable = new javax.swing.JTable(){
private Border outside = new MatteBorder(1, 0, 1, 0, Color.BLACK);
private Border inside = new EmptyBorder(0, 1, 0, 1);
private Border highlight = new CompoundBorder(outside, inside);
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
Component c = super.prepareRenderer(renderer, row, column);
JComponent jc = (JComponent) c;
// Color row based on a cell value
if (!isRowSelected(row)) {
c.setBackground(getBackground());
int modelRow = convertRowIndexToModel(row);
if (getStatus().equals("status1")) {
myFirstTableModel model = (myFirstTableModel ) resultTable.getModel();
if ((model.getObjectAtRow(modelRow).getMsg().getRegNumIn() == 3)) {
c.setBackground(new Color(255, 244, 148));//YELLOW - needs attension
}
} else if (getStatus().equals("status2")) {
mySecondTableModel model = (mySecondTableModel) resultTable.getModel();
if (model.getObjectAtRow(modelRow).getMsg().getTask() == 2) {
c.setBackground(new Color(210, 245, 176));//GREEN - got attension
}
}
} else if (isRowSelected(row)) {
jc.setBorder(highlight);
c.setBackground(new Color(201, 204, 196));
}
return c;
}
};
我根据 SwingWorker 线程中的 var status 为我的表(myFirstTableModel、mySecondTableModel)设置了不同的模型,并显示带有“请稍候”的模式对话框。
final WaitDialog dialog = new WaitDialog(new javax.swing.JFrame(), true);
dialog.addWindowListener(new java.awt.event.WindowAdapter() {
});
SwingWorker worker = new SwingWorker() {
@Override
protected Object doInBackground() throws Exception {
setStatus("status2");
Refresh();
return 0;
}
@Override
public void done() {
dialog.dispose();
}
};
worker.execute();
dialog.setVisible(true);
在 Refresh() 方法中更改模型:
if (getMainFrameStatus().equals("status2")) {
@Override
public void run() {
//Update the model here
resultTable.setModel(new mySecondTableModel(data));
}
});
但我认为 prepareRendere
是在等待 dialog
混淆我的表时调用的。但是还没有应用不同的模型。
显然我明白了
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: myFirstTableModel cannot be cast to mySecondTableModel at mySecondTableModel model = (mySecondTableModel) resultTable.getModel();
我可以允许表调用 prepareRenderer
吗?我该如何使这个困惑的工作正常进行?
最佳答案
最好不要将数据(业务)域的细节涂抹到 View 中。在你的上下文中,你可以 f.i.通过
实现干净的分离类似的东西(未编译,只是一个伪代码片段)
public interface StatusAware {
enum Status {
NORMAL,
GOT_ATTENTION,
NEEDS_ATTENTION,
...
}
public Status getStatus(int modelIndex);
}
public class MyFirstTableModel extends AbstractTableModel implements StatusAware {
public Statuc getStatus(int modelRow) {
boolean needsAttention = getObjectAtRow(modelRow).getMsg().getRegNumIn() == 3;
return needsAttention ? NEEDS_ATTENTION : NORMAL;
}
....
}
public class MySecondTableModel extends AbstractTableModel implements StatusAware {
public Statuc getStatus(int modelRow) {
return // the status of the given row
}
....
}
public class MyTable extends JTable { // if you insist on not using JXTable
public Component prepareRenderer(...) {
Component comp = super(...)
if (getModel() instanceof StatusAware {
Status status = ((StatusAware) getModel()).getStatus(convertRowIndexToModel(row));
if (NEEDS_ATTENTION == status) {
...
} else if (...) {
...
}
}
return comp;
}
}
编辑
在 SwingX 中类似(咳咳……没有教程,只有 api 文档、wiki、代码片段、swinglabs-demo):
摘自 ComponentAdapter api 文档的片段
HighlightPredicate feverWarning = new HighlightPredicate() {
int temperatureColumn = 10;
public boolean isHighlighted(Component component, ComponentAdapter adapter) {
return hasFever(adapter.getValue(temperatureColumn));
}
private boolean hasFever(Object value) {
if (!value instanceof Number)
return false;
return ((Number) value).intValue() > 37;
}
};
Highlighter hl = new ColorHighlighter(feverWarning, Color.RED, null);
table.addHighlighter(hl);
编辑2
不直接支持访问不属于模型的数据。尽管它潜伏了一段时间,但它似乎从来没有重要到足以让我们为它跳起来:)而且它有点违反了基本思想:有一个共同的抽象来访问数据而不知道底层组件或模型的类型(Highlighter/-Predicate 和 StringValue 对于 table, list, tree 是完全一样的)。
考虑到这一点,您可以通过适配器的目标组件间接获取它:
if (adapter.getComponent() instanceof JTable) {
JTable table = (JTable) adapter.getComponent();
TableModel model = table.getModel();
if (model instanceof MyModel) {
int modelRow = adapter.convertRowIndexToModel(adapter.row);
MyObject object = ((MyModel).getRowObjectAt(modelRow));
... // check the object
}
}
关于Java Swing : Jtable with many models and custom renderer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8402558/
我对 mongoosejs 中模型的使用感到有些困惑。 可以通过这些方式使用 mongoose 创建模型 使用 Mongoose var mongoose = require('mongoose');
我正在看 from django.db import models class Publisher(models.Model): name = models.CharField(max_len
我有自己的 html 帮助器扩展,我用这种方式 model.Reason_ID, Register.PurchaseReason) %> 这样声明的。 public static MvcHtmlS
假设模型原本是存储在CPU上的,然后我想把它移到GPU0上,那么我可以这样做: device = torch.device('cuda:0') model = model.to(device) # o
我过去读过一些关于模型的 MVC 建议,指出不应为域和 View 重用相同的模型对象;但我找不到任何人愿意讨论为什么这很糟糕。 我认为创建两个单独的模型 - 一个用于域,一个用于 View - 然后在
我正在使用pytorch构建一个像VGG16这样的简单模型,并且我已经重载了函数forward在我的模型中。 我发现每个人都倾向于使用 model(input)得到输出而不是 model.forwar
tf.keras API 中的 models 是否多余?对于某些情况,即使不使用 models,代码也能正常运行。 keras.models.sequential 和 keras.sequential
当我尝试使用 docker 镜像运行 docker 容器时遇到问题:tensorflow/serving。 我运行命令: docker run --name=tf_serving -it tensor
我有一个模型,我用管道注册了它: register_step = PythonScriptStep(name = "Register Model",
如果 View 需要访问模型中的数据,您是否认为 Controller 应: a)将模型传递给 View b)将模型的数据传递给 View c)都不;这不应该是 Controller 所关心的。让 V
我正在寻找一个可以在模型中定义的字段,该字段本质上是一个列表,因为它将用于存储多个字符串值。显然CharField不能使用。 最佳答案 您正在描述一种多对一的关系。这应该通过一个额外的 Model 进
我最近了解了 Django 中的模型继承。我使用很棒的包 django-model-utils 取得了巨大的成功。我继承自 TimeStampedModel 和 SoftDeletableModel。
我正在使用基于 resnet50 的双输出模型进行项目。一个输出用于回归任务,第二个输出用于分类任务。 我的主要问题是关于模型评估。在训练期间,我在验证集的两个输出上都取得了不错的结果: - 综合损失
我是keras的新手。现在,我将使用我使用 model.fit_generator 训练的模型来预测测试图像组。我可以使用 model.predict 吗?不确定如何使用model.predict_g
在 MVC 应用程序中,我加入了多个表并将其从 Controller 返回到 View,如下所示: | EmployeeID | ControlID | DoorAddress | DoorID |
我在使用 sails-cassandra 连接系统的 Sails 中有一个 Data 模型。数据。 Data.count({...}).exec() 返回 1,但 Data.find({...}).e
我正在使用 PrimeFaces dataTable 开发一个 jsf 页面来显示用户列表。用户存储在 Model.User 类的对象中。
我正在关注https://www.tensorflow.org/tutorials/keras/basic_classification解决 Kaggle 挑战。 但是,我不明白应该将什么样的数据输入
我是这个领域的新手。那么,你们能帮忙如何为 CNN 创建 .config 文件吗? 传递有关如何执行此操作的文档或教程将对我有很大帮助。谢谢大家。 最佳答案 这个问题对我来说没有多大意义,因为 .co
我是“物理系统建模”主题的新手。我阅读了一些基础文献,并在 Modelica 和 Simulink/Simscape 中做了一些教程。我想问你,如果我对以下内容理解正确: 符号操作是将微分代数方程组(
我是一名优秀的程序员,十分优秀!