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 ComboBox  und Checkbox
// festes Array

public class Tabelle04 extends JFrame {

  private JTable _tabelle;

  public Tabelle04() {
    setLocation(100,100);
    this.setSize(550, 250);
    setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    this.setTitle("Tabelle04");
    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, BorderLayout.CENTER);
     // this.pack();  // zeigt die optimale Größe aller GUI-Elemente
    }


  // 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);
     table.setFont( new Font("Arial", Font.PLAIN,18));



        // 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");
        comboBox.setEditable(true);

        TableColumn colorColumn = table.getColumn("Favorite Color");
        // Eine Combobox dient als Editor für die Spalte "Favorite Color"
        colorColumn.setCellEditor( new DefaultCellEditor(comboBox));

        // Setzen eines Hintergrunds und Tooltipp für die Farbspalte
        DefaultTableCellRenderer
           colorColumnRenderer =
            new DefaultTableCellRenderer();
        colorColumnRenderer.setBackground(Color.cyan);
        colorColumnRenderer.setToolTipText("Click for combo box");
        colorColumn.setCellRenderer(colorColumnRenderer);

      
        return table;
  } // createTable


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

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