JTable Zelle Padding

Status
Nicht offen für weitere Antworten.
A

antion

Gast
Hallo,

ich würde gerne den Text in der ersten Spalte meiner JTable um ein paar Pixel einrücken. Zuerst habe ich es damit versucht, einfach drei Leerzeichen vor den Text zu setzen, allerdings klappt das nicht, wenn der Text länger ist als die Zelle und er automatisch abkürzt... irgendwie ersetzt er dann die Leerzeichen.

Weiß jemand, wie ich das machen kann?
 

KrokoDiehl

Top Contributor
Du könntest für diese Spalte einen eigenen Renderer schreiben oder
Code:
prepareRenderer()
der Tabelle überschreiben und es mit einer EmptyBorder probieren, die nur links eine Breite hat.
 

Ebenius

Top Contributor
Wenn das für alle Spalten passieren soll, dann nimm einfach [c]table.getColumnModel().setColumnMargin(5);[/c]. Wenn nicht, dann ist Border der richtige Ansatz. Allerdings nicht prepareRenderer überschreiben. Sonden einen eigenen Renderer bauen, der einen breiteren Border hat als gewöhnlich. Wenn die Zellen editierbar sind, denk auch an den Editor; der sollte möglichst nicht versetzt zum Renderer aufgehen, weil das blöd aussieht. Achtung: Du musst die Standard-Borders des TableCellRenderers weiter verwenden und einen CompoundBorder nutzen, der als inneren Border Deinen Abstandhalter hat. Nicht einfach den Border ersetzen, ansonsten hast Du beispielsweise keine Fokus-Markierung mehr.

Ebenius
 
A

antion

Gast
Hallo KrokoDiehl,
Soweit war ich schon, leider hab ich das selbst irgendwie nicht hinbekommen. Könntest du mir ein Code-Bsp. geben?
 

Ebenius

Top Contributor
*vordrängel*

Java:
/* (@)CellMarginRendererFun.java */

/* Copyright 2009 Sebastian Haufe

 * Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       [url]http://www.apache.org/licenses/LICENSE-2.0[/url]

 * Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License. */

package com.ebenius;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Insets;

import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.border.CompoundBorder;
import javax.swing.table.TableCellRenderer;

public class CellMarginRendererFun {

  static class CellMarginRenderer extends CompoundBorder
    implements TableCellRenderer {

    /** Serial version UID */
    private static final long serialVersionUID = 1L;
    private final TableCellRenderer renderer;

    public CellMarginRenderer(TableCellRenderer renderer, Insets insets) {
      if (insets == null) {
        throw new IllegalArgumentException("insets not allowed null");
      }
      if (renderer == null) {
        throw new IllegalArgumentException("renderer not allowed null");
      }
      this.renderer = renderer;
      this.insideBorder =
            BorderFactory.createEmptyBorder(insets.top, insets.left,
                  insets.bottom, insets.right);
    }

    public Component getTableCellRendererComponent(
          JTable table,
          Object value,
          boolean isSelected,
          boolean hasFocus,
          int row,
          int column) {
      final Component comp =
            renderer.getTableCellRendererComponent(table, value, isSelected,
                  hasFocus, row, column);
      if (comp instanceof JComponent) {
        final JComponent jcomp = (JComponent) comp;
        final Border orgBorder = jcomp.getBorder();
        this.outsideBorder = orgBorder;
        jcomp.setBorder(this);
      }
      return comp;
    }
  }

  /**
   * Test main method.
   * 
   * @param args ignored
   */
  public static void main(String[] args) {
    final JTable table = new JTable(10, 10);
    table.setDefaultRenderer(Object.class, new CellMarginRenderer(table
          .getDefaultRenderer(Object.class), new Insets(0, 5, 0, 2)));
    final JPanel contentPane = new JPanel(new BorderLayout(6, 6));
    contentPane.add(new JScrollPane(table));

    final JFrame f = new JFrame("Test Frame: CellPaddingRendererFun"); //$NON-NLS-1$
    f.setContentPane(contentPane);
    f.pack();
    f.setLocationRelativeTo(null);
    f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    f.setVisible(true);
  }
}
Ebenius
 

KrokoDiehl

Top Contributor
Ebenius' Hinweis ist wesentlich hilfreicher ;)
Java:
public class MeinBesondererRenderer extends DefaultTableCellRenderer
{
    public Component getTableCellRendererComponent(JTable table, Object value,
                          boolean isSelected, boolean hasFocus, int row, int column)
    {
        Component comp = super.getTableCellRendererComponent(table, value, isSelected, 
            hasFocus, row, column);

        if (table.convertColumnIndexToModel(column) == meineBesondereSpalte)
        {
            Border defaultBorder = ((JComponent)comp).getBorder();

            // hier gehört dein Code hin, Eimerchen und Schäufelchen hast du nun ;)
        }

        return comp;
    }
}

........boaaah
 
A

antion

Gast
Hey, danke euch beiden für die Hilfe... wieso muss das eigentlich immer so lange und kompliziert sein? ;)

Auf eure Anregung hin, habe ich das etwas kürzer gemacht:

Java:
    public class myRenderer extends DefaultTableCellRenderer {

        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            setForeground(table.getForeground());
            if (isSelected) {
                setBackground(table.getSelectionBackground());
                setForeground(table.getSelectionForeground());
            } else
                setBackground(table.getBackground());

            //Einrücken
            Component comp = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
            Border defaultBorder = ((JComponent)comp).getBorder();
            defaultBorder =  BorderFactory.createEmptyBorder(0, 10, 0, 0);
            this.setBorder(defaultBorder);

            setValue(value.toString());
            return this;
        }
    }
 
A

antion

Gast
Achja, das habe ich noch vergessen ;)

Java:
TableFiles.getColumnModel().getColumn(0).setCellRenderer(new myRenderer());

Dann wird der obige Code nur für die erste Spalte genutzt
 

KrokoDiehl

Top Contributor
Moin.
Du musst Ebenius' Hinweis noch beachten und eine CompoundBorder benutzen, weil so überschreibst du die eigentliche vom Renderer (defaultBorder bei dir). Wenn eine Zelle z.B. fokussiert ist, hat sie z.B. einen gelben, gestrichelten Rahmen (zumindest bei manchen L&F's), die verlierst du mit deiner Lösung.
Und Klassennamen schreibt man mit beginnendem Großbuchstaben ;)
 

Ebenius

Top Contributor
Kopier Dir doch einfach aus meinem Code oben den MarginCellRenderer. Der funktioniert prächtig.

Ebenius
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Best-Practise: JTable Text in Zelle zu groß AWT, Swing, JavaFX & SWT 2
HoT Einzelne Zelle in JTable Rahmen unten setzen AWT, Swing, JavaFX & SWT 24
W Swing JTable Zeilenumbruch innerhalb einer Zelle AWT, Swing, JavaFX & SWT 3
M Swing Automatischer Editorstart in JTable-Zelle AWT, Swing, JavaFX & SWT 5
M Wert einer Zelle aus JTable ziehen AWT, Swing, JavaFX & SWT 4
P Fokus auf Zelle in JTable AWT, Swing, JavaFX & SWT 1
LexeB4F Zelle in JTable gezielt einfärben AWT, Swing, JavaFX & SWT 4
LexeB4F JTable mehrere Zelle selektieren und inhalte Löschen.. Ideen gesucht AWT, Swing, JavaFX & SWT 1
K Swing JTable mit ImageIcon und Text in einer Zelle AWT, Swing, JavaFX & SWT 1
E JTable Hintergrund von geklickter Zelle ändern AWT, Swing, JavaFX & SWT 2
M JTable: Prüfen ob Zelle leer ist AWT, Swing, JavaFX & SWT 5
O Swing JTable - Zelle fokussieren AWT, Swing, JavaFX & SWT 10
L JTable selektierte Zelle in Bearbeitungs Modus AWT, Swing, JavaFX & SWT 2
H Combobox in einer einzelnen Zelle der Jtable AWT, Swing, JavaFX & SWT 2
R Swing Hintergrundfarbe der Zelle in einer JTable bei Markierung AWT, Swing, JavaFX & SWT 2
M Jtable Objecte aus Zelle AWT, Swing, JavaFX & SWT 13
S Swing Zelle einer JTable hervorheben (ohne CellRenderer) AWT, Swing, JavaFX & SWT 3
A JTable Zelle markieren von bis und Löschen AWT, Swing, JavaFX & SWT 6
F JTable soll mit Buttons befüllt werden, aber nicht in jede Zelle einer Spalte AWT, Swing, JavaFX & SWT 3
GianaSisters Swing ComboBox im jTable (in bestimmter Zelle nicht über die ganze Spalte) AWT, Swing, JavaFX & SWT 4
O JButton in Zelle von JTable AWT, Swing, JavaFX & SWT 4
J Zelle eine JTable ändern AWT, Swing, JavaFX & SWT 3
R Drag an Drop JTable Zelle AWT, Swing, JavaFX & SWT 6
T JTable, Popup Fester per Rechtsklick auf Zelle AWT, Swing, JavaFX & SWT 19
H variable Höhe einer JTextArea (als Renderer/Editor) als Zelle einer JTable AWT, Swing, JavaFX & SWT 9
C Swing JTable zeigt in jeder Zelle einer Reihe denselben Inhalt AWT, Swing, JavaFX & SWT 2
lenniii Zelle in JTable ändern AWT, Swing, JavaFX & SWT 2
J Swing JTable, jede Zelle ein anderer Title im TitledBorder AWT, Swing, JavaFX & SWT 5
S Swing JTable nach einer Änderung einer Zelle komplett aktualisieren. AWT, Swing, JavaFX & SWT 10
N Methode zum ermitteln der editierte Zeile/Zelle in jTable AWT, Swing, JavaFX & SWT 8
C Swing JTable Zelle mit Einfachklick editieren AWT, Swing, JavaFX & SWT 3
C JTable: Mehrere Farben in einer Zelle darstellen AWT, Swing, JavaFX & SWT 10
T Swing JTable - true zurückbekommen, wenn der Cursor in einer Zelle blinkt AWT, Swing, JavaFX & SWT 7
C JTable markierte Zelle wird bei removeRow nicht mit gelöscht AWT, Swing, JavaFX & SWT 6
Dit_ Verschiedene Icons in einer JTable-Zelle AWT, Swing, JavaFX & SWT 2
R JTable Hintergrund der Zeile abhängig von Inhalt einer Zelle verändern AWT, Swing, JavaFX & SWT 3
S Swing DnD: Wie finde ich heraus, von welcher Zelle aus im JTable der Drag gestartet wurde? AWT, Swing, JavaFX & SWT 3
E Zelle in JTable nach klick markieren AWT, Swing, JavaFX & SWT 2
O JTable Zelle mit "ENTER" in Editmode setzen AWT, Swing, JavaFX & SWT 4
eskimo328 JTable nächste Zelle nach Eingabe einer Ziffer AWT, Swing, JavaFX & SWT 5
B Swing Einzelne Zelle in JTable soll NICHT auswählbar sein AWT, Swing, JavaFX & SWT 9
A Swing JTable Icon nur in einer Zelle AWT, Swing, JavaFX & SWT 2
B Swing JTable merkt sich die zuletzt selektierte Zelle AWT, Swing, JavaFX & SWT 3
T einzelne Zelle einer JTable auswählen und Hintergrundfarbe ändern AWT, Swing, JavaFX & SWT 2
M JTable - verlassen einer Zelle AWT, Swing, JavaFX & SWT 15
R JTable Darstellen der selektierten Zelle braucht lange AWT, Swing, JavaFX & SWT 7
S JTable Probleme wenn ich Zelle verlasse AWT, Swing, JavaFX & SWT 4
S Welches Event beim ändern einer Zelle in einer JTable AWT, Swing, JavaFX & SWT 4
S Welches Event beim auswählen einer Zelle? [JTable] AWT, Swing, JavaFX & SWT 3
A Multiple Zeilen in einer JTable Zelle AWT, Swing, JavaFX & SWT 6
W MouseListener für jede Zelle einer JTable AWT, Swing, JavaFX & SWT 4
V JTable verliert Fokus, wie offene Zelle schliessen? AWT, Swing, JavaFX & SWT 5
G jTable, spezille Zelle automatisch füllen AWT, Swing, JavaFX & SWT 13
J JTable: Einzelne Zelle selektieren AWT, Swing, JavaFX & SWT 6
T JPanel in JTable Zelle adden AWT, Swing, JavaFX & SWT 7
T JTable-Zelle mittels JFileChooser befüllen AWT, Swing, JavaFX & SWT 5
S JTable zwei Text-Zeilen in einer Zelle AWT, Swing, JavaFX & SWT 2
N JTable: Informiert werden, wenn User eine Zelle editiert hat AWT, Swing, JavaFX & SWT 2
M JTable: Editieren einer Zelle "von außen" abbreche AWT, Swing, JavaFX & SWT 2
M JTable Zelle ändern -> andere Zellen mit ändern AWT, Swing, JavaFX & SWT 5
S JCbox in Jtable Zelle nur anzeigen , wenn JCombobox ="a AWT, Swing, JavaFX & SWT 3
S Eine Zeile zu einer JTable hinzufügen wo Zelle selektiert is AWT, Swing, JavaFX & SWT 4
M JTable Zelle editieren AWT, Swing, JavaFX & SWT 2
S jTable Font einer Zelle ändern AWT, Swing, JavaFX & SWT 5
G Bei JTable eine bestimmte Zelle färben AWT, Swing, JavaFX & SWT 11
V JTable Zelle über befehl "selecten"? AWT, Swing, JavaFX & SWT 5
G JTable-Zeile/Zelle markieren und mir Shortcut in Arbeitsspei AWT, Swing, JavaFX & SWT 3
D JTable: Focus auf Zelle markiert ihren Text zum editieren AWT, Swing, JavaFX & SWT 2
S Farbe einer Zelle in JTable ändern AWT, Swing, JavaFX & SWT 13
J JList-Item ind JTable-Zelle auswählen. AWT, Swing, JavaFX & SWT 5
R JTable: Jede Zelle mit eigenem ToolTip belegen AWT, Swing, JavaFX & SWT 5
R Drag & Drop einer einzelnen Zelle (JTable) AWT, Swing, JavaFX & SWT 2
T JTable Focus auf Zelle setzen AWT, Swing, JavaFX & SWT 3
R Focus durch "tabben" von JTable Zelle auf andere K AWT, Swing, JavaFX & SWT 8
V JTable: Bei Klick in Zelle -> Ganze Zeile markeiren AWT, Swing, JavaFX & SWT 7
W JTable und mehrere Components in einer Zelle AWT, Swing, JavaFX & SWT 4
S JTree in einer JTable-Zelle AWT, Swing, JavaFX & SWT 6
G JTable: Rahmen bei Focus um Zelle AWT, Swing, JavaFX & SWT 2
W Problem/Absturz bei Zelle nicht editierbar setzen (JTable) AWT, Swing, JavaFX & SWT 6
R JTable - Boolean-Wert aus Zelle auslesen. AWT, Swing, JavaFX & SWT 9
T "..." am Ende der Zelle in JTable AWT, Swing, JavaFX & SWT 2
G JTable Zeilenumbruch innerhalb einer Zelle bzw. columnHeader AWT, Swing, JavaFX & SWT 1
I Swing JTable zeichnet kein vertical Grid AWT, Swing, JavaFX & SWT 6
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
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

Ähnliche Java Themen

Neue Themen


Oben