Zum Inhalt springen

JTable Farben ändern


helmito

Empfohlene Beiträge

Hallo,

ich bin momentan dabei ein Programm zu schreiben, welches aus einer Datenbank liest und den Inhalt dann in ein JTable-Objekt darstellt.

Das Lesen und Anzeigen der Daten ist kein Problem.

Mein Problem ist, dass der Inhalt der Tabelle "ausgewertet" werden soll.

D.H., dass die Zellen, die beispielsweise den Inhalt "C" haben die Hintergrundfarbe "grün" haben soll, während z.B. die Felder mit den Inhalt "E" die Hintergrundfarbe "rot"haben soll.

Ein weiteres Problem, was ich habe ist, dass die Spalten ser Tabelle am Anfang immer dieselbe Größe haben. Zwar kann man die Größen im nachhinein ändern, nur ist das nicht was ich möchte. Kann mir jemand sagen, wie man es hinbekommt, dass die Spaltenbreite vom Spalten-Inhalt variiert (optimale Grösse), jedoch soll hinterher immer noch möglich sein, die Spaltengrößen manuell zu verändern.

Hier habt Ihr zum besseren Verständnis mal meinen Quellcode:

import javax.swing.JTable;

import java.util.Vector;

import java.awt.Color;

import javax.swing.table.DefaultTableCellRenderer;

import javax.swing.table.DefaultTableModel;

import javax.swing.table.TableCellRenderer;

import javax.swing.JScrollPane;

import java.awt.GridLayout;

import javax.swing.JPanel;

public class Table

{

private JTable table = null;

private DefaultTableModel d;

private TableCellRenderer cellR;

private Color notSelected;

private Color selected;

private JScrollPane scroll = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, // This initialized a JScroll-object

JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

private int row_q = 0;

private int column_q = 0;

public Table(Vector rowData, Vector columnNames)

{

table = new JTable(rowData, columnNames);

d = new DefaultTableModel(rowData, columnNames);

this.init();

}

public void init()

{

table.setModel(d);

table.setAutoResizeMode(table.AUTO_RESIZE_OFF);

row_q = table.getRowCount();

column_q = table.getColumnCount();

notSelected = table.getGridColor();

scroll.setViewportView(table);

}

public void check_table()

{

String buffer;

for(int i = 0; i < column_q; i++)

{

for(int run = 0; run < row_q; run++)

{

buffer = (String) d.getValueAt(run, i);

if (buffer.equals("C") == true)

{

}

else if (buffer.equals("C") == true);

}

}

}

public JScrollPane get_table()

{

check_table();

return scroll;

}

Danke für eure Hilfe,

HELMITO

Link zu diesem Kommentar
Auf anderen Seiten teilen

hi,

dafür gibt es den TableCellRenderer. Diesen in einer eigenen klasse implementieren und die Methode "getTableCellRendererComponent" so überschreiben, dass die gewünschte JComponent (mit Hintergrundfarbe) zurückgegeben wird.

diesen TableCellRenderer einfach mit der Methode setDefaultRenderer(Class, TableCellRenderer) einer JTable hinzufügen und schon erstahlen alle Zellen mit dem inhalt "c" in herrlichem rot / grün / gelb :)

bei weiteren Fragen einfach posten.

hth

[edit]

hilfreich auch der java-almanach

[/edit]

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

Danke für die Information.

Ich hab jetzt die Klasse soweit geändert:


  // This renderer extends a component. It is used each time a

  // cell must be displayed.

  public class MyTableCellRenderer extends JLabel implements TableCellRenderer

  {


    // This method is called each time a cell in a column

    // using this renderer needs to be rendered.


    public Component getTableCellRendererComponent(JTable table, Object value,

                                                   boolean isSelected, boolean hasFocus,

                                                   int r, int c)

    {


      Object contentCell = table.getValueAt(r,c);


      if (contentCell.equals("COMPLETED") == true)

      {

        this.setBackground(new Color(0,255,0));

        this.setForeground(new Color(0,255,0));

      }

      else if (contentCell.equals("ERROR") == true)

      {

        this.setBackground(new Color(0,0,255));

        this.setForeground(new Color(255,0,0));

      }

      else if (contentCell.equals("GEHEN") == true)

      {

        this.setBackground(new Color(0,0,255));

        this.setForeground(new Color(255,255,0));

      }


      this.setText(value.toString());

      return this;

    }

}

Code Auszüge bitte auf das relevante kürzen und in [ code][ /code] Tags (ohne Leerzeichen) einschließen.

Gruß Jaraz

Zwar ändert die neu implementierte Klasse die Vordergrund-Farbe nur kann man seltsamer weise die Hintergrund-Farbe nicht ändern.:(

Kann mir vielleicht einer sagen, wieso???

Link zu diesem Kommentar
Auf anderen Seiten teilen

hi,

Original geschrieben von helmito

[...]

Zwar ändert die neu implementierte Klasse die Vordergrund-Farbe nur kann man seltsamer weise die Hintergrund-Farbe nicht ändern.:(

Kann mir vielleicht einer sagen, wieso???

dein TableCellRenderer ist ein JLabel. ein JLabel ist per default durchsichtig. du musst label.setOpaque(true); aufrufen, damit die hintergrundfarbe auch zu sehen ist.

hth

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hat geklappt, DANKE!!!:)

Durch die Änderungen ist nur die Fähigkeit sich mithilfe der Pfeiltasten durch die Tabelle navigieren zu können offenbar mit überschrieben worden.

Vor den Änderungen konnte man auf eine Zeile der Tabelle klicken, so dass sich dann diese Zeile graphisch von den anderen Zeilen hervorgehoben hat (hatte eine andere Farbe, wobei die Zelle, die den Fokus hat weiß war mit einen farbigen Rand).

Man konnte dann mit Hilfe der Pfeiltasten sich durch die Tabellen navigieren.

Wie krieg ich diese Fähigkeit den wieder hin???

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...