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;



// Tabelle mit CombobBox
// Tabelle mit unterschiedlicher Schriftfarbe, je nach Wert

public class Tabelle7 extends JFrame {



    public Tabelle7() {
        JTable tabelle;

        JFrame frame = new JFrame("Tabelle5");

        tabelle = createTable();

        // Finish setting up the table.
        JScrollPane scrollpane = new JScrollPane(tabelle);
      	scrollpane.setBorder(new BevelBorder(BevelBorder.LOWERED));

        scrollpane.setPreferredSize(new Dimension(430, 200));

        this.getContentPane().add(scrollpane);
        this.pack();
        this.setVisible(true);
    }


  // 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];
            }

            // The default implementations of these methods in
            // AbstractTableModel would work, but we can refine them.
            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);


        // 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);

        // Create a combo box to show that you can use one in a table.
        JComboBox comboBox = new JComboBox();
        comboBox.addItem("Red");
        comboBox.addItem("Orange");
        comboBox.addItem("Yellow");
        comboBox.addItem("Green");
        comboBox.addItem("Blue");
        comboBox.addItem("Indigo");
        comboBox.addItem("Violet");

        TableColumn colorColumn = table.getColumn("Favorite Color");
        // Use the combo box as the editor in the "Favorite Color" column.
        colorColumn.setCellEditor(new DefaultCellEditor(comboBox));


        // Set a pink background and tooltip for the Color column renderer.
        DefaultTableCellRenderer colorColumnRenderer = new DefaultTableCellRenderer();
        colorColumnRenderer.setBackground(Color.pink);
        colorColumnRenderer.setToolTipText("Click for combo box");
        colorColumn.setCellRenderer(colorColumnRenderer);

        // Set a tooltip for the header of the colors column.
      	TableCellRenderer headerRenderer = colorColumn.getHeaderRenderer();
      	if (headerRenderer instanceof DefaultTableCellRenderer) {
          ( (DefaultTableCellRenderer) headerRenderer).setToolTipText("Spalte Farben!");
        }


      	// Show the values in the "Favorite Number" column in different colors.
        TableColumn numbersColumn = table.getColumn("Favorite Number");
        DefaultTableCellRenderer numberColumnRenderer = new DefaultTableCellRenderer() {
        
	    public void setValue(Object value) {
	        int cellValue;
          if (value instanceof Number)
            cellValue = ((Number)value).intValue();
          else
            cellValue = 0;
          // cellValue = (value instanceof Number) ? ((Number)value).intValue() : 0;

          if (cellValue > 30)
            setForeground(Color.black);
          else
            setForeground(Color.red);

	        setText((value == null) ? "" : value.toString());
	    }
        };
        numberColumnRenderer.setHorizontalAlignment(JLabel.RIGHT);
        numbersColumn.setCellRenderer(numberColumnRenderer);
        numbersColumn.setPreferredWidth(110);




        return table;
  } // createTable






  //Überschreiben, damit das Programm bei Herunterfahren des Systems beendet werden kann
  protected void processWindowEvent(WindowEvent e) {
    super.processWindowEvent(e);
    if(e.getID() == WindowEvent.WINDOW_CLOSING) {
      System.exit(0);
    }
  }




    public static void main(String[] args) {
        new Tabelle7();
    }


    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)}
    };

}


/*
import java.io.*;
import java.sql.*;

public class DbTableShow
{
  public static void main( String[] argv )
  {
    String sDbDrv=null, sDbUrl=null, sTable=null, sUsr="", sPwd="";
    if( 3 <= argv.length ) {
      sDbDrv = argv[0];
      sDbUrl = argv[1];
      sTable = argv[2];
      if( 4 <= argv.length )  sUsr = argv[3];
      if( 5 <= argv.length )  sPwd = argv[4];
    } else {
      try {
        BufferedReader in = new BufferedReader(
                            new InputStreamReader( System.in ) );
        System.out.println( "Name des Datenbanktreibers eingeben (z.B. org.gjt.mm.mysql.Driver):" );
        sDbDrv = in.readLine();
        System.out.println( "Url der Datenbank eingeben (z.B. jdbc:mysql://localhost:3306/MeineDb):" );
        sDbUrl = in.readLine();
        System.out.println( "Name der Tabelle eingeben (z.B. MeineTestTabelle):" );
        sTable = in.readLine();
        System.out.println( "Benutzername (z.B. root):" );
        sUsr = in.readLine();
        System.out.println( "Passwort (z.B. mysqlpwd):" );
        sPwd = in.readLine();
      } catch( IOException ex ) {
        System.out.println( ex );
      }
    }
    if( null != sDbDrv && 0 < sDbDrv.length() &&
        null != sDbUrl && 0 < sDbUrl.length() &&
        null != sTable && 0 < sTable.length() ) {
      Connection cn = null;
      Statement  st = null;
      ResultSet  rs = null;
      try {
        // Select fitting database driver and connect:
        Class.forName( sDbDrv );
        cn = DriverManager.getConnection( sDbUrl, sUsr, sPwd );
        st = cn.createStatement();
        rs = st.executeQuery( "select * from " + sTable );
        // Get meta data:
        ResultSetMetaData rsmd = rs.getMetaData();
        int i, n = rsmd.getColumnCount();
        // Print table content:
        for( i=0; i<n; i++ )
          System.out.print( "+---------------" );
        System.out.println( "+" );
        for( i=1; i<=n; i++ )    // Attention: first column with 1 instead of 0
          System.out.print( "| " + extendStringTo14( rsmd.getColumnName( i ) ) );
        System.out.println( "|" );
        for( i=0; i<n; i++ )
          System.out.print( "+---------------" );
        System.out.println( "+" );
        while( rs.next() ) {
          for( i=1; i<=n; i++ )  // Attention: first column with 1 instead of 0
            System.out.print( "| " + extendStringTo14( rs.getString( i ) ) );
          System.out.println( "|" );
        }
        for( i=0; i<n; i++ )
          System.out.print( "+---------------" );
        System.out.println( "+" );
      } catch( Exception ex ) {
        System.out.println( ex );
      } finally {
        try { if( null != rs ) rs.close(); } catch( Exception ex ) {}
        try { if( null != st ) st.close(); } catch( Exception ex ) {}
        try { if( null != cn ) cn.close(); } catch( Exception ex ) {}
      }
    }
  }

  // Extend String to length of 14 characters
  private static final String extendStringTo14( String s )
  {
    if( null == s ) s = "";
    final String sFillStrWithWantLen = "              ";
    final int iWantLen = sFillStrWithWantLen.length();
    final int iActLen  = s.length();
    if( iActLen < iWantLen )
      return (s + sFillStrWithWantLen).substring( 0, iWantLen );
    if( iActLen > 2 * iWantLen )
      return s.substring( 0, 2 * iWantLen );
    return s;
  }
}
*/
