- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不知道应该如何处理这个问题,我想要做的是当值大于 0 时这些 P&L 单元格前景为绿色,如果小于 0 则为红色。我知道我需要以某种方式使用 tablecellrenderer我只是不知道如何开始。
这是表格设置:
tbl_positions = new WebTable(posdata, posHeaders)
{
public Component prepareRenderer(TableCellRenderer renderer,
int rowIndex, int vColIndex) {
Component c = super.prepareRenderer(renderer, rowIndex,
vColIndex);
if (rowIndex % 2 == 0 && !isCellSelected(rowIndex, vColIndex))
{
c.setBackground((new Color(216, 216, 216)));
}
else
{
if(!isCellSelected(rowIndex, vColIndex))
{
if(rowIndex != 21)
c.setBackground(getBackground());
else
c.setBackground((new Color(216, 249, 255)));
}
else
{
c.setBackground((new Color(0, 128, 255)));
}
}
if(vColIndex == 5 || vColIndex == 6 )
{
Integer intValue = (Integer) getValueAt(rowIndex, vColIndex);
c.setForeground(getColor(intValue));
}
else
{
c.setForeground(getForeground());
}
return c;
}
private Color getColor(Integer intValue)
{
Color color = null;
if (intValue > 0) {
color = Color.GREEN;
} else if (intValue < 0) {
color = Color.RED;
} else {
color = getForeground();
}
return color;
}
};
现在可以运行了:
最佳答案
对于像设置前景这样简单的事情,您不需要自定义渲染器。您只需重写 JTable
的 prepareRenderer
即可。类似的东西
JTable table = new JTable(model) {
@Override
public Component prepareRenderer(TableCellRenderer renderer,
int row, int col) {
Component c = super.prepareRenderer(renderer, row, col);
if (col == PL_COLUMN) {
Integer intValue = (Integer) getValueAt(row, col);
c.setForeground(getColor(intValue));
} else {
c.setForeground(getForeground());
}
return c;
}
private Color getColor(int intValue) {
Color color = null;
if (intValue > 0) {
color = Color.GREEN;
} else if (intValue < 0) {
color = Color.RED;
} else {
color = getForeground();
}
return color;
}
};
花点时间看一下How to Use Tables: Editors and Renderers有关自定义渲染的更多信息
<小时/>import java.awt.Color;
import java.awt.Component;
import java.util.Random;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
public class TestTableRenderer {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
public void run() {
NikeSaysJustDoIt();
}
});
}
private static void NikeSaysJustDoIt() {
Random random = new Random();
Object[][] data = new Object[30][7];
for (int i = 0; i < data.length; i++) {
for (int j = 0; j < data[i].length; j++) {
data[i][j] = (random.nextInt(65536) - 32768);
}
}
String[] cols = new String[] { "col", "col", "col", "col", "col", "col", "col" };
DefaultTableModel model = new DefaultTableModel(data, cols);
JTable table = new JTable(model) {
@Override
public Component prepareRenderer(TableCellRenderer renderer,
int row, int col) {
Component c = super.prepareRenderer(renderer, row, col);
if (col == 5 || col == 6) {
Integer intValue = (Integer) getValueAt(row, col);
c.setForeground(getColor(intValue));
} else {
c.setForeground(getForeground());
}
return c;
}
private Color getColor(int intValue) {
Color color = null;
if (intValue > 0) {
color = Color.GREEN;
} else if (intValue < 0) {
color = Color.RED;
} else {
color = getForeground();
}
return color;
}
};
JOptionPane.showMessageDialog(null, new JScrollPane(table));
}
}
<小时/>
我留下了一堆注释,可以帮助您理解代码。请注意,您可能需要格式化程序。您拥有的图像显示为不同的格式。一种有货币符号,一种没有。另外,您的一些值是整数,一些是小数。因此,您很可能需要两个格式化程序才能按照您想要的方式获得它。
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.text.NumberFormat;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
public class TableFormatRenderDemo {
public TableFormatRenderDemo() {
JFrame frame = new JFrame();
frame.add(new JScrollPane(createTable()));
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
/*
* We are using all double values. We leave the rendering to
* the renderer. The NumberFormat is used to format the text.
*/
private JTable createTable() {
Object[][] data = new Object[][] {
{ "AUD", 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 },
{ "CAD", 0.0, 0.0, 0.0, 0.0, 45.00, -0.35 },
{ "CHF", 0.897, -1, 0.896, 0.0, -120.00, 0.00 },
{ "CHK", 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 },
{ "Total", null, null, null, null, 20125.00, 0.00 } };
String[] cols = { "col 1", "col 2", "col 3", "col 4", "col 5", "col 6",
"col 7" };
DefaultTableModel model = new DefaultTableModel(data, cols);
JTable table = new JTable(model) {
@Override
public Dimension getPreferredScrollableViewportSize() {
return getPreferredSize();
}
};
// Set the custom renerer
table.setDefaultRenderer(Object.class, new NumberFormatRenderer());
return table;
}
private NumberFormat getFormatter() {
NumberFormat formatter = NumberFormat.getCurrencyInstance();
DecimalFormatSymbols decimalFormatSymbols = ((DecimalFormat) formatter)
.getDecimalFormatSymbols();
decimalFormatSymbols.setCurrencySymbol("$");
((DecimalFormat) formatter)
.setDecimalFormatSymbols(decimalFormatSymbols);
return formatter;
}
/**
* Custom renderer we use for the table
*/
private class NumberFormatRenderer extends DefaultTableCellRenderer {
private static final long serialVersionUID = 5152961981995932787L;
private static final int PL_USD_COL = 5;
private static final int DAILY_PL_COL = 6;
// TODO We may want to have a setter for this formatter
private final NumberFormat formatter = getFormatter();
private final Color POSITIVE_COLOR = new Color(65, 185, 62);
private final Color NEGATIVE_COLOR = Color.RED;
private final Color LAST_ROW_COLOR = Color.CYAN;
private final Color ALT_ROW_COLOR = Color.LIGHT_GRAY;
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
super.getTableCellRendererComponent(table, value, isSelected,
hasFocus, row, column);
renderAlternateBackground(row, table.getBackground(), table.getRowCount());
renderForeground(row, column, table.getForeground(),
table.getRowCount(), value);
// Formats the last row with the given NumberFormat
if (row == table.getRowCount() - 1 && column != 0 && value != null) {
setText(formatter.format((Double) value));
}
// Centers the text
setHorizontalAlignment(CENTER);
return this;
}
/**
* Renders the foreground. Render only if column is one of
* the predefined "PL" columns, using the helper method
* <code>getColor</code> to determine the color to render based on the
* <code>value</code>.
*
* @param row
* @param col
* @param tableForeground
* @param rowCount
* @param value
*/
private void renderForeground(int row, int col, Color tableForeground,
int rowCount, Object value) {
if (col == PL_USD_COL || col == DAILY_PL_COL) {
setForeground(getColor((Double) value, tableForeground));
} else {
setForeground(tableForeground);
}
}
/**
* Helper method for the <code>renderForeground</code> method. Returns
* a <code>Color</code> base on the value.
* @param value
* @param tableForeground
* @return
*/
private Color getColor(double value, Color tableForeground) {
Color color = null;
if (value > 0) {
color = POSITIVE_COLOR;
} else if (value < 0) {
color = NEGATIVE_COLOR;
} else {
color = tableForeground;
}
return color;
}
/**
* Rendered alternate background color. Check for odd rows numbers.
* The last row is rendered as the select <code>LAST_ROW_COLOR</code> color.
* @param row
* @param tableBackground
* @param rowCount
*/
private void renderAlternateBackground(int row, Color tableBackground,
int rowCount) {
if (row % 2 != 0) {
setBackground(ALT_ROW_COLOR);
} else if (row == (rowCount - 1)) {
setBackground(LAST_ROW_COLOR);
} else {
setBackground(tableBackground);
}
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new TableFormatRenderDemo();
}
});
}
}
关于java - 根据正值或负值渲染 jtable 单元格前景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26534515/
在我的 OpenGL 程序中,我按顺序执行以下操作: // Drawing filled polyhedrons // Drawing points using GL_POINTS // Displa
我想传递一个包含原始页面的局部变量,这个变量只包含一个带有值的符号。 当我使用此代码时,它运行良好,可以在部分中访问 origin 变量: render :partial => "products",
为什么这个 HTML/脚本(来自“JavaScript Ninja 的 secret ”)不渲染? http://jsfiddle.net/BCL54/
我想在阅读完 View 后返回到特定的网页位置(跳转到页内 anchor )。换句话说,在 views.py 中,我想做类似的事情: context={'form':my_form} return r
我有一个包含单条折线的 PathGeometry,并以固定的间隔向该线添加一个新点(以绘制波形)。使用 Perforator 工具时,我可以看到每次向直线添加一个点时,WPF 都会将整个 PathGe
尝试了解如何消除或最小化网站上不同 JavaScript 库的渲染延迟。 例如,如果我想加载来自许多社交网络的“即时”关注按钮,它们似乎会相互阻止渲染,并且您会收到令人不快的弹出窗口。 (func
我有以 xyz 点格式表示 3D 表面(即地震断层平面)的数据。我想创建这些表面的 3D 表示。我使用 rgl 和 akima 取得了一些成功,但是它无法真正处理可能会自行折叠或在同一 x,y 点具有
我正在用 Libgdx 编写一个小游戏。 我有一个 Render[OpenGL] 线程,它不断对所有对象调用 render() 和一个更新线程不断对所有对象调用 update(double delta
我有一个 .Rmd 文件包含: ```{r, echo=FALSE, message=FALSE, results='asis'} library(xtable) print(xtable(group
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improve
请不要评判我,我只是在学习 Swift。 最近我安装了 MetalPetal 框架,并按照说明操作: https://github.com/MetalPetal/MetalPetal#example-
如果您尝试渲染 Canvas 宽度和高度之外的图像,计算机是否仍会尝试渲染它并使用资源来尝试渲染它?我只是想找出在尝试渲染图像之前检查图像是否在 Canvas 内是否更好。 最佳答案 我相信它仍然在无
我在 safari 中渲染时遇到问题。 在 firefox、chrome 和 IE 上。如下图所示: input.searchbox{-webkit-border-radius:10px;-moz-b
我正在尝试通过远程桌面在 Windows7 下运行我在 RHEL7 服务器中制作的 java 程序。 服务器中的所有java程序都无法通过远程桌面呈现。如果我在服务器位置访问服务器本身,它们看起来没问
我正处于一个新项目的设计阶段,该项目将采用数据集并将其加载到文档中,然后围绕模板呈现文档。呈现的文件可以是 CSV 数据集、PDF 营销信函、电子邮件……很多东西。数据不会是数学方程式,我只是在寻找一
有没有办法在不同的 div 下渲染 React 组件的子组件? ... ... ... ... ...
使用以下代码: import numpy as np from plotly.offline import iplot, init_notebook_mode import plotly.graph_
截至最近, meteor 的所有文档都指出 onRendered是一种在模板完成渲染时获取回调的新方法。和 rendered只是为了向后兼容。 但是,这似乎对我不起作用。 onRendered永远不会
所以在我的基本模板中,我有:{% render "EcsCrmBundle:Module:checkClock" %} 然后我创建了 ModuleController.php ... getDoctr
我正在使用 vue-mathjax 来编译我的 vue 项目中的数学方程。它正在编译第一个括号 () 之间的文本。我想防止编译括号内的字符串。在文档中我发现,对于$符号,如果我们想逃避编译,我们需要使
我是一名优秀的程序员,十分优秀!