我正试图将每个列单元格具有不同值的组合框加载到我的JTable中,但我找不到任何实现这一点的方法。第一列的代码如下:
Database database = Database.getInstance();
ResultSet resultSet = database.query("SELECT Titel from Serie");
while(resultSet.next())
{
comboBox.addItem(resultSet.getString("Titel"));
}
seriesColumn.setCellEditor(new DefaultCellEditor(comboBox));
根据返回的系列名称,将执行一个新的查询,以获取每个系列的所有插曲。所以他们都是不同的。下面的图片让我们了解一下我的意思:
第二列现在应该包含根据第一列的系列的剧集,但它们都是相同的。
此示例程序的主要部分是使用自定义单元格编辑器EpisodeEditor
。它根据第一列中选择的“系列”动态决定“剧集”。
(我在此演示中使用了一个模拟数据源。)
import javax.swing.*;
import javax.swing.table.TableCellEditor;
import java.util.*;
public class ComboBoxTable
{
public static void main(String[] args)
{
// Mock data source
DataSource dataSource = new DataSource();
JComboBox<String> seriesComboBox = new JComboBox<>();
for (String s : dataSource.getSeries())
{
seriesComboBox.addItem(s);
}
JTable table = new JTable(
new String[][] {{"", ""}, {"", ""}, {"", ""}},
new String[] {"Series", "Episode"});
table.getColumn("Series").setCellEditor(new DefaultCellEditor(seriesComboBox));
table.getColumn("Episode").setCellEditor(new EpisodeEditor(dataSource));
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().add(new JScrollPane(table));
f.setBounds(300, 200, 400, 300);
f.setVisible(true);
}
}
class EpisodeEditor extends AbstractCellEditor implements TableCellEditor
{
private DataSource dataSource;
private JComboBox<String> episodesComboBox = new JComboBox<>();
EpisodeEditor(DataSource dataSource)
{
this.dataSource = dataSource;
}
@Override
public java.awt.Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected,
int row, int column)
{
String series = (String) table.getModel().getValueAt(row, 0);
List<String> episodes = dataSource.getEpisodes(series);
episodesComboBox.removeAllItems();
for (String ep : episodes)
{
episodesComboBox.addItem(ep);
}
episodesComboBox.setSelectedItem(value);
return episodesComboBox;
}
@Override
public Object getCellEditorValue()
{
return episodesComboBox.getSelectedItem();
}
}
class DataSource
{
List<String> getSeries()
{
return Arrays.asList("Prison Break", "Breaking Bad", "Pokemon");
}
List<String> getEpisodes(String series)
{
switch (series)
{
case "Prison Break":
return Arrays.asList("Break 1", "Break 2", "Break 3");
case "Breaking Bad":
return Arrays.asList("Bad 1", "Bad 2", "Bad 3");
case "Pokemon":
return Arrays.asList("P1", "P2", "P3");
default:
throw new IllegalArgumentException("Invalid series: " + series);
}
}
}
我有一个表,表中有一些列。两列有组合框,现在我想做的是,当用户从column1组合框中选择一些值时,根据用户选择的值,应该填充column2组合框。例如,如果用户从column1组合框中选择value1,则column2组合框将仅显示与value1对应的值。
问题内容: 我有我的自定义单元格渲染器,想删除单元格的边框。 我该怎么做?我试过setBorder,但是不起作用。 这是我的渲染器代码: 问题答案: 单元格之间绘制的线不是单元格本身的一部分。它们是由桌子绘制的。您可以使用以下方法在整个表格中将其关闭: 要仅禁用水平或垂直线: 或者,您可以使用以下方法更改线条的颜色:
我需要使用extjs 4.2.1实现一个网格。这个网格将有细胞编辑插件,在列中我将有许多文本字段和组合框。 我的问题是针对特定情况的。我有一列国家/地区(例如)。列编辑器将是带有国家/地区商店的组合框。下一个组合框将是同一行索引中所选国家/地区的城市。当我定义该商店时,此列将保留在同一商店中,我不知道这一点。 在第 0 行中,我选择美国,我必须在下一个组合中加载美国城市。在第 1 行中,我选择英国
问题内容: 我有一个JTable,我想用自定义渲染器尝试检查isEnabled()的所有禁用的复选框单元变灰,然后更改背景颜色,但仍然无法使用。有什么建议么?谢谢!!! 问题答案: 如“ 概念:编辑器和渲染器 ”中所述,“通常使用单个单元格渲染器来绘制包含相同类型数据的所有单元格。” 您需要维护表模型中的enabled状态。 附录:作为一个具体示例,此示例中的数据模型是一组简单的Date实例。ge
问题内容: 我想让imageIcon在每个单元格中以不同的方式显示,但是由于某种原因,当我对其进行编译时,图像不会显示。它显示图像的名称,但是图像本身不显示。这是一张图片。http://i49.tinypic.com/r9ibrn.jpg } 问题答案: 您可以在调用构造函数时传递图像的名称(请阅读)。
问题内容: 假设我有以下JTable,只要按下一个按钮,就会显示该JTable: 我想呈现 最初 对JCheckBox 为真的单元格,以及所有 最初为 false的所有单元格不显示任何内容(无JCheckBox)。用户可以选中或取消选中最初为真的单元格中的JCheckBoxes,这会对我创建的图表有所帮助。 现在,我的单元格渲染器在所有单元格中显示JCheckBoxes,包括最初为false的单元