我正在尝试使用JTables,TableModels,JTableHeaders,渲染器等.我正在尝试制作一个简单的虚拟表(用于练习目的),如下所示:
- 1 2 3
A A1 A2 A3
B B1 B2 B3
C C1 C2 C3
Run Code Online (Sandbox Code Playgroud)
我还希望B2单元格 - 只有那个单元格 - 具有蓝色(Color.BLUE)背景 - 所有其他单元格都可以具有自动分配的Swing默认颜色.
我的代码如下,基于我在本网站和互联网上发现的无数例子.但我没有得到我想要的结果.相反,我得到一个看起来像这样的表:
A A1 A2 A3
B B1 B2 B3
C C1 C2 C3
Run Code Online (Sandbox Code Playgroud)
请注意,第一行(标题)根本不存在.此外,使用下面列出的代码,这将执行并设置所有颜色单元格的颜色,而不仅仅是我想要的B2单元格.
代码:
public class MyTable
{
public static void main(String[] args)
{
String[][] data = getTableData();
String[] cols = getTableCols();
JFrame frame = magicallyCreateJFrame(); // I promise this works!
MyRenderer myRenderer = new MyRenderer(); // See below
DefaultTableModel defModel = new DefaultTableModel(data, cols);
JTable myTable = new JTable(defModel);
myTable.setDefaultRenderer(Object.class, myRenderer);
frame.add(myTable);
frame.pack();
frame.setVisible(true);
}
}
public static String[] getTableCols()
{
String cols =
{
"-",
"1",
"2",
"3",
};
}
public static String[][] getTableData()
{
String[][] data =
{
{
"A",
"A1",
"A2",
"A3",
},
{
"B",
"B1",
"B2",
"B3",
},
{
"C",
"C1",
"C2",
"C3",
},
};
return data;
}
Run Code Online (Sandbox Code Playgroud)
快节奏的MyRenderer课程:
public class MyRenderer extends DefaultTableCellRenderer
{
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if(row == 2 && column == 2)
c.setBackground(new java.awt.Color(0, 0, 255));
return c;
}
}
Run Code Online (Sandbox Code Playgroud)
除了这是一个可怕的代码并打破了许多"最佳实践"类型的模式和技术(记住这只是我正在玩的东西)这一事实,我在这里做的任何事情都是明显的吗?为什么我没有得到表头(第一行" - 1 2 3")?为什么我的默认单元格渲染器不能处理我指定的特定B2单元格?
JTable似乎是奇怪,美丽和强大的野兽.我正在慢慢地将我的思绪包裹在他们周围,但我对实施感到窒息.感谢任何可以帮助!
cam*_*ckr 15
您需要确保将渲染器重置为其默认背景颜色(并处理行选择):
if (! table.isRowSelected(row))
{
if(row == 2 && column == 2)
c.setBackground(new java.awt.Color(0, 0, 255));
else
c.setBackground(table.getBackground());
}
Run Code Online (Sandbox Code Playgroud)
将来在您的问题上发布适当的SSCCE.
| 归档时间: |
|
| 查看次数: |
27569 次 |
| 最近记录: |