import javax.swing.*;
import javax.swing.table.*;
import javax.swing.border.*;

import java.awt.Dimension;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.Color;

import java.awt.*;
import java.awt.event.*;



// Tabelle mit unterschiedlicher Schriftfarbe
// festes Array

public class Tabelle05 extends JFrame {

  private JTable tabelle;

  public Tabelle05() {
    setLocation(100,100);
    this.setSize(550, 350);
    setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    this.setTitle("Tabelle05");
    setGUI();
  }

   void setGUI() {
      this.getContentPane().setLayout( new BorderLayout() );
      tabelle = createTable();
      JScrollPane scrollpane = new JScrollPane(tabelle);
      scrollpane.setBorder(new BevelBorder(BevelBorder.LOWERED));
      scrollpane.setPreferredSize(new Dimension(430, 200));
      this.getContentPane().add(scrollpane);
       // this.pack();  // Elemente werden auf Mindestgröße verkleinert
    }


  // createTable
  public JTable createTable() {
    // Create a model of the data.
        TableModel dataModel = new AbstractTableModel() {
            // These methods always need to be implemented.
            public int getColumnCount() {
              return names.length;
            }
            public int getRowCount() {
              return data.length;
            }
            public Object getValueAt(int row, int col) {
              return data[row][col];
            }

            public String getColumnName(int column) {
              return names[column];
            }
            public Class getColumnClass(int c) {
              return getValueAt(0, c).getClass();
            }
            public boolean isCellEditable(int row, int col) {
              return true;
            }
            public void setValueAt(Object aValue, int row, int column) {
                System.out.println("Setting value to: " + aValue);
                data[row][column] = aValue;
            }
         };

         JTable table = new JTable(dataModel);
         table.setAutoCreateRowSorter(true);



        // Turn off auto-resizing so that we can set column sizes programmatically.
       	// In this mode, all columns will get their preferred widths, as set blow.
        // table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

      	// Show the values in the "Favorite Number" column in different colors.
        TableColumn numbersColumn =table.getColumn("Favorite Number");

          // Anonyme Klasse
        DefaultTableCellRenderer numberColumnRenderer
            = new DefaultTableCellRenderer() {

     	    public void setValue(Object value) {
     	        int cellValue;
               if (value instanceof Integer)
                 cellValue = ((Integer)value).intValue();
               else
                 cellValue = 0;
               // cellValue = (value instanceof Number) ? ((Number)value).intValue() : 0;
     
               if (cellValue > 30) {
                 setForeground(Color.black);
                 setBackground(Color.red);
               }
               else {
                 setForeground(Color.red);
                 setBackground(Color.green);
               }
     
     	        setText((value == null) ? "" : value.toString());
     	      }
          };  // DefaultTableCellRenderer

       numberColumnRenderer.setHorizontalAlignment(
                    JLabel.RIGHT);

       numbersColumn.setCellRenderer(
                numberColumnRenderer);

       numbersColumn.setPreferredWidth(110);


       table.setFont( new Font("Arial", Font.PLAIN, 18) );
        return table;
  } // createTable


    public static void main(String[] args) {
      Tabelle05 frame = new Tabelle05();
      frame.setVisible(true);
    }


    final String[] names = {"First Name", "Last Name", "Favorite Color",
                            "Favorite Number", "Vegetarian"};
    final Object[][] data = {
      {"Mark", "Andrews", "Red",    new Integer(2),   new Boolean(true)},
      {"Tom", "Ball", "Blue",       new Integer(99),  new Boolean(false)},
      {"Alan", "Chung", "Green",    new Integer(838), new Boolean(false)},
      {"Jeff", "Dinkins", "Turquois", new Integer(8), new Boolean(true)},
      {"Amy", "Fowler", "Yellow",   new Integer(3),   new Boolean(false)},
      {"Brian", "Gerhold", "Green", new Integer(0),   new Boolean(false)},
      {"James", "Gosling", "Pink",  new Integer(21),  new Boolean(false)},
      {"David", "Karlton", "Red",   new Integer(1),   new Boolean(false)},
      {"Dave", "Kloba", "Yellow",   new Integer(14),  new Boolean(false)},
      {"Peter", "Korn", "Purple",   new Integer(12),  new Boolean(false)},
      {"Phil", "Milne", "Purple",   new Integer(3),   new Boolean(false)},
      {"Dave", "Moore", "Green",    new Integer(88),  new Boolean(false)},
      {"Hans", "Muller", "Maroon",  new Integer(5),   new Boolean(false)},
      {"Rick", "Levenson", "Blue",  new Integer(2),   new Boolean(false)},
      {"Tim", "Prinzing", "Blue",   new Integer(22),  new Boolean(false)},
      {"Chester", "Rose", "Black",  new Integer(0),   new Boolean(false)},
      {"Ray", "Ryan", "Gray",       new Integer(77),  new Boolean(false)},
      {"Georges", "Saab", "Red",    new Integer(4),   new Boolean(false)},
      {"Willie", "Walker", "Phthalo Blue", new Integer(4), new Boolean(false)},
      {"Kathy", "Walrath", "Blue",  new Integer(8),   new Boolean(false)},
      {"Arnaud", "Weber", "Green",  new Integer(44),  new Boolean(false)}
    };

}

