- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想增加我的jtable的可读性,下面是MyTableModel.java类,如何使每一行有2种不同的颜色shown in this picture 。我可以为每一行赋予不同的颜色以增加用户的可读性的具体方法应该是什么。
public class MyTableModel extends AbstractTableModel{
String [] columnNames;
Vector<Vector<Object>> data;
public DataAccessObject ObjDb = new DataAccessObject ();
public MyTableModel(String [] coln , Vector<Vector<Object>> data)
{
columnNames = coln;
this.data =data;
}
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public int getRowCount() {
return data.size();
}
@Override
public String getColumnName(int col) {
return columnNames[col];
}
public Object getValueAt(int row, int col) {
return data.get(row).get(col);
}
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
public boolean isCellEditable(int row, int col) {
if (col <= 0) {
return true;
} else {
return true;
}
}
public void setValueAt(Object value, int row, int col) {
data.get(row).set(col, value);
fireTableCellUpdated(row, col);
}
private class RowListener implements ListSelectionListener {
public void valueChanged(ListSelectionEvent event) {
if (event.getValueIsAdjusting()) {
return;
}
// output.append("ROW SELECTION EVENT. ");
// outputSelection();
}
}
private class ColumnListener implements ListSelectionListener {
public void valueChanged(ListSelectionEvent event) {
if (event.getValueIsAdjusting()) {
return;
}
// output.append("COLUMN SELECTION EVENT. ");
// outputSelection();
}
}
}
Netbeans 自动创建了我的 jtable,其变量名称设置为 mytable 然后我 在定义下面的prepareRenderer时遇到问题,我是否错过了这里的步骤?我想做
每行都有不同的颜色下面是我的示例代码。
mytable.prepareRenderer(TableCellRenderer renderer, int row, int column)
{
Component c = super.prepareRenderer(renderer, row, column);
// Alternate row color
if (!isRowSelected(row))
c.setBackground(row % 2 == 0 ? getBackground() : Color.LIGHT_GRAY);
return c;
}
};
我也用过这个,但是这设置了 5 列,我有 7 列,剩下两列不是
最后着色,当我单击白色行时,文本颜色消失。
mytable.setDefaultRenderer(Object.class, new TableCellRenderer() {
private DefaultTableCellRenderer DEFAULT_RENDERER = new DefaultTableCellRenderer();
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean
isSelected, boolean hasFocus, int row, int column) {
Component c = DEFAULT_RENDERER.getTableCellRendererComponent(table, value,
isSelected, hasFocus, row, column);
System.out.println(column);
if (row % 2 == 0) {
c.setBackground(Color.WHITE);
} else {
c.setBackground(Color.LIGHT_GRAY);
}
return c;
}
});
最佳答案
使用SwingLabs, SwingX library中的JXTable
它具有可以执行此操作的功能...如果您可以使用第 3 方库,这将是我的首选解决方案...
使用 Nimbus 外观来执行此操作...但这会阻止您使用其他外观(例如系统外观)
创建您自己的一系列自定义TableCellRenderer
,它们根据当前行为其背景着色...这很乏味,因为您可能需要的每个单元格渲染器都需要能够执行此操作。 ..
重写JTable
的prepareCellRenderer
方法,并根据行自行强制设置单元格渲染器的背景...我不喜欢这个解决方案,因为它强制渲染器进行设计选择,这可能不符合其要求(覆盖单元格渲染器可能想要的值)并将您锁定到表的特定实现中......
创建一个JViewport
,它能够与JTable
通信并在 table 下面渲染糖果剥离,但 table 和渲染器需要是透明的......我已经完成了这个,它......很复杂......但允许我继续糖果剥离 View 端口的整个长度(超出表格的可渲染区域)......
已更新 JViewport
示例
这是我不久前为一个项目实现的概念示例(它实际上由接口(interface)
管理,因此我可以包含JList
和JTextArea
也是如此,但那是另一个问题)...
基本上,它使出现在 JTable
下方的 JViewport
负责渲染实际的糖果剥离。
但是“为什么?”您问...因为它不会影响表格或单元格渲染器。唯一的要求是表格和单元格渲染器都是透明的(除非必须如此)。
这意味着,您不需要在渲染器中放置糖果剥离逻辑,这意味着您不需要覆盖您创建的每个表的 prepareRenderer
并破坏单元格渲染器的要求...
它远非完美,但展示了基本思想......
好吧,但是为什么要这么麻烦呢?好吧,基本上,这种方法允许您在 table 绘制的区域之外进行绘制...
import java.awt.Color;
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JViewport;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
public class CandyStrippedTable {
public static void main(String[] args) {
new CandyStrippedTable();
}
public CandyStrippedTable() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
Object[] columns = new Object[10];
for (int col = 0; col < columns.length; col++) {
columns[col] = (char) (65 + col);
}
Object[][] data = new Object[10][10];
for (int row = 0; row < data.length; row++) {
for (int col = 0; col < data[row].length; col++) {
data[row][col] = row + "x" + col;
}
}
DefaultTableModel model = new DefaultTableModel(data, columns);
JTable table = new JTable(model);
table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
setOpaque(isSelected);
return this;
}
});
table.setFillsViewportHeight(true);
table.setOpaque(false);
JScrollPane sp = new JScrollPane();
sp.setViewport(new CandyStrippedViewPort(new Color(255, 0, 0, 128)));
sp.setViewportView(table);
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(sp);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class CandyStrippedViewPort extends JViewport {
private Color candyStrippedColor;
public CandyStrippedViewPort(Color color) {
candyStrippedColor = color;
}
public Color getCandyStrippedColor() {
return candyStrippedColor;
}
public void setCandyStrippedColor(Color candyStrippedColor) {
this.candyStrippedColor = candyStrippedColor;
repaint();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
g2d.setColor(getCandyStrippedColor());
Component view = getView();
if (view instanceof JTable) {
JTable table = (JTable) view;
Rectangle viewRect = getViewRect();
int y = 0;
int row = 0;
if (table.getRowCount() > 0) {
row = table.rowAtPoint(viewRect.getLocation());
while (row < table.getRowCount()) {
int rowHeight = table.getRowHeight(row);
Rectangle cellRect = table.getCellRect(row, 0, true);
if (row % 2 == 0) {
g2d.fillRect(0, cellRect.y - viewRect.y, getWidth(), cellRect.height);
}
y = cellRect.y + cellRect.height;
row++;
}
}
int rowHeight = table.getRowHeight();
while (y < getHeight()) {
if (row % 2 == 0) {
g2d.fillRect(0, y, getWidth(), rowHeight);
}
row++;
y += rowHeight;
}
}
g2d.dispose();
}
}
}
在单元格渲染器中设置数字格式
你可以从......开始
obj.table.setDefaultRenderer(Double.class,
new DefaultTableCellRenderer() {
@Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if (value instanceof Number) {
value = NumberFormat.getNumberInstance().format(value);
}
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
setOpaque(isSelected);
return this;
}
});
如果由于某种原因,默认格式适合,您可以执行类似的操作...
obj.table.setDefaultRenderer(Double.class,
new DefaultTableCellRenderer() {
@Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if (value instanceof Number) {
NumberFormat ni = NumberFormat.getNumberInstance();
ni.setMaximumFractionDigits(2)
value = ni.format(value);
}
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
setOpaque(isSelected);
return this;
}
});
相反
关于java AbstractTableModel 2 每行有不同的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25279727/
我正在阅读 java swing,但在理解它时遇到问题。 Color 是一个类吗? Color[] col= {Color.RED,Color.BLUE}; 这在java中是什么意思? 最佳答案 Is
我正在研究用 python 编写的 pacman 程序。其中一个模块是处理吃 bean 游戏的图形表示。这当然是一些主机颜色。列表如下: GHOST_COLORS = [] ## establishe
本网站:http://pamplonaenglishteacher.com 源代码在这里:https://github.com/Yorkshireman/pamplona_english_teache
我最近将我的手机更新为 Android Marshmallow 并在其上运行了我现有的应用程序,但注意到颜色行为有所不同:将更改应用到 View (可绘制)的背景时,共享相同背景的所有 View (引
所有 X11/w3c 颜色代码在 Android XML 资源文件格式中是什么样的? I know this looks a tad ridiculous as a question, but giv
试图让 ffmpeg 创建音频波形,同时能够控制图像大小、颜色和幅度。我已经尝试过这个(以及许多变体),但它只是返回无与伦比的 "。 ffmpeg -i input -filter_complex "
我很好奇你是否有一些关于 R 中颜色酿造的技巧,对于许多独特的颜色,以某种方式使图表仍然好看。 我需要大量独特的颜色(至少 24 种,可能需要更多,~50 种)用于堆叠区域图(所以不是热图,渐变色不起
我看到的许多 WPF 示例和示例似乎都有硬编码的颜色。这些指南 - http://msdn.microsoft.com/en-us/library/aa350483.aspx建议不要硬编码颜色。在构建
我想更改文件夹的默认蓝色 如何设置? 最佳答案 :hi Directory guifg=#FF0000 ctermfg=red 关于Vim NERDTree 颜色,我们在Stack Overflow上
是否有关于如何将任意字符串哈希为 RGB 颜色值的最佳实践?或者更一般地说:3 个字节。 你问:我什么时候需要这个?这对我来说并不重要,但想象一下任何 GitHub 上的那些管图 network pa
我正在尝试将默认颜色设置为自定义窗口小部件。 这是有问题的代码。 class ReusableCard extends StatelessWidget { ReusableCard({this.
import javax.swing.*; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.Ta
我有一个 less 文件来定义一堆颜色/颜色。每个类名都包含相关颜色的名称,例如 .colourOrange{..} 或 .colourBorderOrange{..} 或 navLeftButtOr
我有一个RelativeLayout,我需要一个黑色背景和一个位于其中间的小图像。我使用了这段代码: 其中@drawable/bottom_box_back是: 这样我就可以将图像居中了。但背
我需要设置 浅色 的 JPanel 背景,只是为了不覆盖文本(粗体黑色)。 此刻我有这个: import java.util.Random; .... private Random random =
我正在尝试制作一个自定义文本编辑器,可以更改特定键入单词的字体和颜色。如何更改使用光标突出显示的文本的字体和/或颜色? 我还没有尝试过突出显示部分。我尝试获取整个 hEdit(HWND) 区域并更改字
我想改变我整个应用程序的颜色。 在我的 AndroidManfiest.xml 中,我有正确的代码: 在 values 文件夹中,我有 app_theme.xml: @style/MyAc
是否可以使用 android 数据绑定(bind)从 xml 中引用颜色? 这很好用: android:textColor="@{inputValue == null ? 0xFFFBC02D : 0
有没有办法在 Android 应用程序中设置“空心”颜色? 我的意思是我想要一个带有某种背景的框,而文本实际上会导致背景透明。换句话说,如果整个 View 在蓝色背景上,文本将是蓝色的,如果它是红色的
我用CGContextStrokePath画在白色背景图片中的一条直线上,描边颜色为红色,alpha为1.0画线后,为什么点不是(255, 0, 0),而是(255, 96, 96)为什么不是纯红色?
我是一名优秀的程序员,十分优秀!