是否可以在一个 JTable
单元格中包含多个对象,如下所示,其中第一行的每个单元格中有两个 JLabels
?
我在这个示例中遇到的问题是我无法向任何 JLabels
(Icons
) 添加任何监听器。我的猜测是我需要更改 CellRenderer
之外的其他内容?
public class JTableIcons extends JPanel {
private DefaultTableModel model;
private JTable table;
public JTableIcons() {
initModel();
initTable();
this.setLayout(new BorderLayout());
this.add(table, BorderLayout.CENTER);
}
class MyRenderer implements TableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
JPanel panel = new JPanel();
if (row == 0) {
JLabel lblCol = new JLabel("Column:" + column);
Icon icon = UIManager.getIcon("OptionPane.errorIcon");
JLabel lblIcon = new JLabel();
lblIcon.setIcon(icon);
panel.add(lblIcon);
panel.add(lblCol);
} else {
JLabel lbl = new JLabel("(" + row + "," + column + ")");
panel.add(lbl);
}
panel.setOpaque(false);
return panel;
}
}
private void initTable() {
table = new JTable(model);
table.setDefaultRenderer(Object.class, new MyRenderer());
table.setShowGrid(true);
table.setGridColor(Color.gray);
table.setRowHeight(80);
}
private void initModel() {
String[] cols = { "", "", "" };
Object[][] rows = { { "", "", "" }, { "", "", "" }, { "", "", "" }, { "", "", "" } };
model = new DefaultTableModel(rows, cols);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new JTableIcons());
f.setVisible(true);
f.setSize(new Dimension(500, 350));
f.setLocationRelativeTo(null);
}
});
}
}
最佳答案
I would like to add two or more objects,
当一个组件就可以时,不要使用两个组件。 renderer在这个example实现 Icon
接口(interface)以利用文本和图标的灵活相对定位。必要时,将多个组件添加到合适的轻量级容器中,例如JPanel
。
and then also have different listeners to the added objects.
关于java - 单个 JTable 单元格中的多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20464899/