Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

JTable Farben ändern

Empfohlene Antworten

Veröffentlicht

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

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]

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???

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

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???

Hallo noch mal !!!!

Weiss den einer von Euch, wie man beim Programmstart eine dynamische Spaltenbreite hinbekommt, jedoch der Anwender diese Breite auch manuel ändern können.

Gruesse,

helmito

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.