Gridarta Editor
TableHeaderCellRenderer.java
Go to the documentation of this file.
1 /*
2  * Gridarta MMORPG map editor for Crossfire, Daimonin and similar games.
3  * Copyright (C) 2000-2023 The Gridarta Developers.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18  */
19 
20 package net.sf.gridarta.gui.dialog.browsearchetypes;
21 
22 import java.awt.BorderLayout;
23 import java.awt.Component;
24 import java.awt.Container;
25 import java.util.ArrayList;
26 import java.util.List;
27 import javax.swing.ImageIcon;
28 import javax.swing.JPanel;
29 import javax.swing.JTable;
30 import javax.swing.table.TableCellRenderer;
31 import org.jetbrains.annotations.NotNull;
32 
37 public class TableHeaderCellRenderer implements TableCellRenderer {
38 
42  @NotNull
43  private final ImageIcon closingIcon;
44 
48  @NotNull
49  private final TableCellRenderer tableCellRenderer;
50 
55  @NotNull
56  private final Container panel = new JPanel(new BorderLayout());
57 
63  @NotNull
64  private final List<ClosingLabel> labels = new ArrayList<>();
65 
72  public TableHeaderCellRenderer(@NotNull final ImageIcon closingIcon, @NotNull final TableCellRenderer tableCellRenderer) {
73  this.closingIcon = closingIcon;
74  this.tableCellRenderer = tableCellRenderer;
75  }
76 
77  @Override
78  public Component getTableCellRendererComponent(@NotNull final JTable table, @NotNull final Object value, final boolean isSelected, final boolean hasFocus, final int row, final int column) {
79  panel.removeAll();
80  final Component x = tableCellRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
81  panel.add(x, BorderLayout.CENTER);
82  if (column >= 2) {
83  ClosingLabel label;
84  try {
85  label = labels.get(column);
86  } catch (final IndexOutOfBoundsException ignored) {
87  while (labels.size() < column) {
89  }
90  label = new ClosingLabel(closingIcon);
91  assert labels.size() == column;
92  labels.add(label);
93  }
94  panel.add(label, BorderLayout.EAST);
95  }
96  return panel;
97  }
98 
104  public int getX(final int index) {
105  final ClosingLabel label;
106  try {
107  label = labels.get(index);
108  } catch (final ArrayIndexOutOfBoundsException ignored) {
109  return -1;
110  }
111 
112  return label.getPaintX();
113  }
114 
115 }
net.sf.gridarta.gui.dialog.browsearchetypes.TableHeaderCellRenderer.closingIcon
final ImageIcon closingIcon
The icon.
Definition: TableHeaderCellRenderer.java:43
net.sf.gridarta.gui.dialog.browsearchetypes.ClosingLabel
A JLabel that tracks the x coordinate at which it was painted last.
Definition: ClosingLabel.java:31
net.sf.gridarta.gui.dialog.browsearchetypes.TableHeaderCellRenderer.panel
final Container panel
The panel that renders the cell.
Definition: TableHeaderCellRenderer.java:56
net.sf.gridarta.gui.dialog.browsearchetypes.ClosingLabel.getPaintX
int getPaintX()
Returns the x coordinate at which this label was painted last.
Definition: ClosingLabel.java:61
net.sf.gridarta.gui.dialog.browsearchetypes.TableHeaderCellRenderer.TableHeaderCellRenderer
TableHeaderCellRenderer(@NotNull final ImageIcon closingIcon, @NotNull final TableCellRenderer tableCellRenderer)
Creates a new instance.
Definition: TableHeaderCellRenderer.java:72
net.sf.gridarta.gui.dialog.browsearchetypes.TableHeaderCellRenderer.labels
final List< ClosingLabel > labels
The closing icons.
Definition: TableHeaderCellRenderer.java:64
net.sf.gridarta.gui.dialog.browsearchetypes.TableHeaderCellRenderer.getTableCellRendererComponent
Component getTableCellRendererComponent(@NotNull final JTable table, @NotNull final Object value, final boolean isSelected, final boolean hasFocus, final int row, final int column)
Definition: TableHeaderCellRenderer.java:78
net.sf.gridarta.gui.dialog.browsearchetypes.TableHeaderCellRenderer
A TableCellRenderer that adds a closing icon.
Definition: TableHeaderCellRenderer.java:37
net.sf.gridarta.gui.dialog.browsearchetypes.TableHeaderCellRenderer.getX
int getX(final int index)
Returns the x coordinate of a closing icon.
Definition: TableHeaderCellRenderer.java:104
net.sf.gridarta.gui.dialog.browsearchetypes.TableHeaderCellRenderer.tableCellRenderer
final TableCellRenderer tableCellRenderer
The default TableCellRenderer of the associated table.
Definition: TableHeaderCellRenderer.java:49