JTable Header - will links kleines icon hinzufuegen..?

Status
Nicht offen für weitere Antworten.

richardcurtle

Bekanntes Mitglied
Hi,

ich will im bestimmten JTable Headern links ein kleines icon als JLabel hinzufuegen. Wenn man draufklickt soll ein Dialog erscheinen.

Was ich nicht hinkriege ist dem JTableHeader dieses JLabel hinzuzufuegen :(

Weiss jemand weiter?
 

Ebenius

Top Contributor
Zur Abgrenzung: Der JTableHeader existiert einmal pro Tabelle. Willst Du das Icon in bestimmten JTableHeaders oder in bestimmten Spalten eines JTableHeaders darstellen?

Ebenius
 

richardcurtle

Bekanntes Mitglied
Zur Abgrenzung: Der JTableHeader existiert einmal pro Tabelle. Willst Du das Icon in bestimmten JTableHeaders oder in bestimmten Spalten eines JTableHeaders darstellen?

Ebenius

Habe mich ungenau ausgedrueckt - in einer bestimmten Spalte. Genauergesagt in Spalte 2 und 5 von insgesamt 10 Spalten.


Was ich auch gerne machen wuerde waere in Spalte 7 und 8 den Header als JCombobox zu verwirklichen. Man sollte dies aber nicht so deutlich sehen sondern eher wie bei einem TableCellRenderer/Editor als JLabel/JCombobox verwirklichen.
 

SebiB90

Top Contributor
JTable#getTableHeader()#setDefaultRenderer(TableCellRenderer)
TableCellRenderer wie gewohnt nutzen.
 

Ebenius

Top Contributor
JTable#getTableHeader()#setDefaultRenderer(TableCellRenderer)
TableCellRenderer wie gewohnt nutzen.
Würde ich so nicht machen. Eher so:
Java:
public static void main(String[] args) throws MalformedURLException {
  final Icon icon =
        new ImageIcon(new URL(
              "http://www.java-forum.org/images/icons/icon4.gif"));
  final TableCellRenderer headerRenderer = new TableCellRenderer() {

    public Component getTableCellRendererComponent(
          JTable table,
          Object value,
          boolean isSelected,
          boolean hasFocus,
          int row,
          int column) {
      final JTableHeader header = table.getTableHeader();
      final TableCellRenderer defaultRenderer = header.getDefaultRenderer();
      final Component rendererComp =
            defaultRenderer.getTableCellRendererComponent(table, value,
                  isSelected, hasFocus, row, column);
      if (rendererComp instanceof JLabel) {
        ((JLabel) rendererComp).setIcon(icon);
      }
      return rendererComp;
    }
  };

  final JTable table = new JTable(10, 10);
  final TableColumnModel cm = table.getColumnModel();
  final TableColumn col2 = cm.getColumn(table.convertColumnIndexToView(1));
  final TableColumn col5 = cm.getColumn(table.convertColumnIndexToView(4));
  col2.setHeaderRenderer(headerRenderer);
  col5.setHeaderRenderer(headerRenderer);

  final JPanel contentPane = new JPanel(new BorderLayout(6, 6));
  contentPane.add(new JScrollPane(table));

  final JFrame f = new JFrame("Test Frame: A");
  f.setContentPane(contentPane);
  f.pack();
  f.setLocationRelativeTo(null);
  f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  f.setVisible(true);
}
Es wird allerdings recht schwierig, herauszufinden, ob genau das Icon gedrückt wurde. Ein Renderer lebt nicht, deswegen hat es auch keinen Sinn, der Renderer-Komponente einen Listener zu geben. Einen Editor gibt's für TableHeaders nicht. Und das JLabel kann man leider auch nicht fragen, wo genau das Icon sitzt. Die Positionierung übernimmt das LabelUI so wie es gern möchte.

Um die Aktion auszuführen, wenn das Icon gedrückt wurde, würde ich daher so vorgehen. Das funktioniert zumindest, so lange das Layout des Labels vom BasicLabelUI gemacht wird. :)
Java:
table.getTableHeader().addMouseListener(new MouseAdapter() {

  @Override
  public void mouseClicked(MouseEvent e) {
    if (e.getClickCount() == 1 && SwingUtilities.isLeftMouseButton(e)) {
      final JTableHeader th = (JTableHeader) e.getSource();
      final TableColumnModel cm = th.getColumnModel();
      final int column = th.columnAtPoint(e.getPoint());
      if (column > -1 && column < cm.getColumnCount()) {
        final Component comp = getRendererComponent(th, column);
        if (comp instanceof JLabel && ((JLabel) comp).getIcon() != null) {
          final JLabel label = (JLabel) comp;
          final Rectangle bounds = th.getHeaderRect(column);
          final Rectangle viewR = new Rectangle(bounds);
          final Insets insets = label.getInsets();
          viewR.x = insets.left;
          viewR.y = insets.top;
          viewR.width -= insets.left + insets.right;
          viewR.height -= insets.top + insets.bottom;
          final Rectangle iconR = new Rectangle();
          final Rectangle textR = new Rectangle();

          SwingUtilities.layoutCompoundLabel(label, label
                .getFontMetrics(label.getFont()), label.getText(), label
                .getIcon(), label.getVerticalAlignment(), label
                .getHorizontalAlignment(), label
                .getVerticalTextPosition(), label
                .getHorizontalTextPosition(), viewR, iconR, textR, label
                .getIconTextGap());

          iconR.x += bounds.x;
          iconR.y += bounds.y;
          if (iconR.contains(e.getPoint())) {
            System.out.println("THIS IS THE PLACE TO PERFORM YOUR ACTION!");
          }
        }
      }
    }
  }

  private Component getRendererComponent(
        JTableHeader header,
        int columnIndex) {
    TableColumn aColumn = header.getColumnModel().getColumn(columnIndex);
    TableCellRenderer renderer = aColumn.getHeaderRenderer();
    if (renderer == null) {
      renderer = header.getDefaultRenderer();
    }

    return renderer.getTableCellRendererComponent(header.getTable(),
          aColumn.getHeaderValue(), false, false, -1, columnIndex);
  }
});
Ebenius
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Swing JTable : Header der Spalten ergänzen mit caption (wie bei html-table) AWT, Swing, JavaFX & SWT 2
L JTable Permanent Header AWT, Swing, JavaFX & SWT 0
N Swing JTable mit Sorter: Keine Sortierung bei Klick in Header AWT, Swing, JavaFX & SWT 3
V Swing JTable Row Header AWT, Swing, JavaFX & SWT 6
P Swing In JTable Header auch an der linken Seite AWT, Swing, JavaFX & SWT 2
V JTable Header L&F AWT, Swing, JavaFX & SWT 10
O Swing JTable Header AWT, Swing, JavaFX & SWT 2
Spin JTable Header wird nicht angezeigt ohne ScrollPane AWT, Swing, JavaFX & SWT 3
A JTable Header AWT, Swing, JavaFX & SWT 3
G Swing JTable Header neu initialisieren? AWT, Swing, JavaFX & SWT 2
G JTable Multiple Row Header Example - Probleme mit der Höhe der Zellen AWT, Swing, JavaFX & SWT 4
C Swing 1spaltige JTable ohne Header AWT, Swing, JavaFX & SWT 18
hdi Swing JTable: SortKeys und Header Column Width AWT, Swing, JavaFX & SWT 5
C jtable checkbox in header / spaltenüberschrift AWT, Swing, JavaFX & SWT 4
F Swing JTable Header modifizieren AWT, Swing, JavaFX & SWT 13
M Problem mit funktionellem JTable Header AWT, Swing, JavaFX & SWT 5
D Swing JTable, Header und Leerzeilen AWT, Swing, JavaFX & SWT 3
R Swing JTable: Eigene Zeichnung im Header AWT, Swing, JavaFX & SWT 11
C Swing JTable Header angelickt? AWT, Swing, JavaFX & SWT 4
eskimo328 JTable Zeilenumbruch im Header AWT, Swing, JavaFX & SWT 2
T 2JLabels in einen JTable Header AWT, Swing, JavaFX & SWT 2
A JTable Header + ScrollBar AWT, Swing, JavaFX & SWT 4
H JTable drucken mit Header AWT, Swing, JavaFX & SWT 4
G JTable und Header AWT, Swing, JavaFX & SWT 4
J JTable Zellen und Header AWT, Swing, JavaFX & SWT 2
D jTable Header zweizeilig? AWT, Swing, JavaFX & SWT 2
R JTable Mehrzeiliger Header zerstört JGoodies-Layout AWT, Swing, JavaFX & SWT 2
D JTable Header während Laufzeit ändern. AWT, Swing, JavaFX & SWT 3
D Jtable Header Höhe setzen ? AWT, Swing, JavaFX & SWT 2
D Header für den Row Header (JTable) AWT, Swing, JavaFX & SWT 2
O Probleme mit header von JTable AWT, Swing, JavaFX & SWT 6
L Checkbox in JTable (again), bei true Daten in Header AWT, Swing, JavaFX & SWT 7
D Mehrzeilige JTable Header AWT, Swing, JavaFX & SWT 2
N Jtable header fixieren AWT, Swing, JavaFX & SWT 2
K Kein Header in JTable ! AWT, Swing, JavaFX & SWT 8
F Die JTable und ihr Header AWT, Swing, JavaFX & SWT 5
J JTable - Header über mehrere Spalten AWT, Swing, JavaFX & SWT 3
G JTable sortieren durch click im Header AWT, Swing, JavaFX & SWT 9
J Border im Header bei JTable verändern AWT, Swing, JavaFX & SWT 3
S JTable Header AWT, Swing, JavaFX & SWT 5
K JTable - Header colspan AWT, Swing, JavaFX & SWT 7
K JTable header updated nicht immer AWT, Swing, JavaFX & SWT 5
A JTable - Header wird nicht angezeigt AWT, Swing, JavaFX & SWT 8
D JTable Header AWT, Swing, JavaFX & SWT 2
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
S HPRO und UPRO gemeinsame JTABLE gemeinsamer RENDERER ? AWT, Swing, JavaFX & SWT 1
F Swing JTable - MultiHeader inkl. Eingabemöglichkeit AWT, Swing, JavaFX & SWT 1
S JTable - Feldinhalte anzeigen AWT, Swing, JavaFX & SWT 15
D Swing JTable Spaltenbreite AWT, Swing, JavaFX & SWT 1
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
G jTable - getSelectedRow() AWT, Swing, JavaFX & SWT 3
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
P JTable Listener für die Änderung einzelner Zellen oder Rows AWT, Swing, JavaFX & SWT 2
D Tastaturabfragen CTRL+t, CTRL+E bei eine JTable, bestehend aus JTextAteas AWT, Swing, JavaFX & SWT 4
P Checkboxes in JTable nicht editable AWT, Swing, JavaFX & SWT 9
F Best-Practise: JTable Text in Zelle zu groß AWT, Swing, JavaFX & SWT 2
izoards JTable in CSV File schreiben... AWT, Swing, JavaFX & SWT 23
Kohl Jedes Objekt einer JTable um ein Zeichen verkürzen AWT, Swing, JavaFX & SWT 7
I JTable, DefaultTableModel, zwei Zahlen multiplizieren. AWT, Swing, JavaFX & SWT 26
M JTABLE / wie oft wurde gewürfelt. AWT, Swing, JavaFX & SWT 1
F JTable vergrößern AWT, Swing, JavaFX & SWT 2
H JTable: Diverse NullPointer-Exceptions zur Laufzeit AWT, Swing, JavaFX & SWT 3
J Swing Werte des JTable werden nicht angezeigt AWT, Swing, JavaFX & SWT 9
T Swing JTable cellRenderer mit jpg Hintergrundfarbe lässt sich nicht ändern. AWT, Swing, JavaFX & SWT 1
HoT Einzelne Zelle in JTable Rahmen unten setzen AWT, Swing, JavaFX & SWT 24
B JTable Zellen zusammenfügen AWT, Swing, JavaFX & SWT 3
M Swing Cell Renderer für Zeilenumbruch in JTable AWT, Swing, JavaFX & SWT 0
H JTable im JSplitPane darstellen AWT, Swing, JavaFX & SWT 2
MadMax2506 Swing JTable lädt sehr lange AWT, Swing, JavaFX & SWT 1
D Zeilenumbruch in einer JTable AWT, Swing, JavaFX & SWT 9
R Swing JTable und Spaltenausrichtung AWT, Swing, JavaFX & SWT 8
G JTable füllen AWT, Swing, JavaFX & SWT 1
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
W Swing JTable Zeilenumbruch innerhalb einer Zelle AWT, Swing, JavaFX & SWT 3
J Datensatz in jTable ausgeben AWT, Swing, JavaFX & SWT 3
M Swing Automatischer Editorstart in JTable-Zelle AWT, Swing, JavaFX & SWT 5
ralfb1105 Swing JTable aktualisieren AWT, Swing, JavaFX & SWT 5
adiko01 JTable: Nur markierte Zeilen aus der Tabelle in CSV exportiern AWT, Swing, JavaFX & SWT 9
M JTable.setDefaultRenderer(...) greift nicht AWT, Swing, JavaFX & SWT 0
J JTable: Eingabe in Tabellenzelle korrigieren AWT, Swing, JavaFX & SWT 4
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
D JTable nach INSERT aktualisieren /refreshen AWT, Swing, JavaFX & SWT 1
D MySQL Daten in JTable anzeigen AWT, Swing, JavaFX & SWT 2
H Swing Jtable extra spalte AWT, Swing, JavaFX & SWT 6
S Swing Rechteck über JTable zeichnen (per MouseListener) AWT, Swing, JavaFX & SWT 1
S Swing Mal wieder JTable Ansicht aktualisieren AWT, Swing, JavaFX & SWT 10
A JTable mit Daten füllen AWT, Swing, JavaFX & SWT 1
VfL_Freak Swing Einzelne Zeile in jTable selektieren klappt nicht AWT, Swing, JavaFX & SWT 7
N AWT jTable CellRenderer AWT, Swing, JavaFX & SWT 6
T Swing JTable valueChanged datensatz löschen AWT, Swing, JavaFX & SWT 1
0 Swing JTable aus anderer Klasse updaten AWT, Swing, JavaFX & SWT 5
S Jtable defaultRenderer wohin damit ? AWT, Swing, JavaFX & SWT 23
T Swing JTable / FocusListener AWT, Swing, JavaFX & SWT 0
it_is_all Warum wird die JTable im JDialog nicht angezeigt? AWT, Swing, JavaFX & SWT 1
L Swing JTable im Panel darstellen AWT, Swing, JavaFX & SWT 8
T Swing Double Click bei Buttons in JTable AWT, Swing, JavaFX & SWT 9
J addRow bei JTable AWT, Swing, JavaFX & SWT 6
M Jtable gibt -1 wert bei selectedRow und Column AWT, Swing, JavaFX & SWT 3
Meeresgott Swing JTable AWT, Swing, JavaFX & SWT 4
J JTable Selection Listener funktioniert nicht AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben