import java.awt.BorderLayout;
import java.awt.Checkbox;
import java.awt.Component;
import java.awt.Font;
import java.awt.GraphicsEnvironment;
import javax.swing.JSeparator;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;
import javax.swing.*;
import java.util.Date;
import java.text.SimpleDateFormat;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import javax.swing.table.TableColumn;
import javax.swing.table.TableCellRenderer;
import com.toedter.calendar.JDateChooserCellEditor;
import java.util.*;
public class NewSwingApp extends javax.swing.JFrame {
{
//Set Look & Feel
try {
javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch(Exception e) {
e.printStackTrace();
}
}
private JMenuItem helpMenuItem;
private JMenu jMenu5;
private JMenuItem deleteMenuItem;
private JSeparator jSeparator1;
private JMenuItem pasteMenuItem;
private JScrollPane jScrollPane1;
private JPanel jPanel2;
private JButton jButton2;
private JButton jButton1;
private JPanel jPanel1;
private JMenuItem copyMenuItem;
private JMenuItem cutMenuItem;
private JMenu jMenu4;
private JMenuItem exitMenuItem;
private JSeparator jSeparator2;
private JMenuItem closeFileMenuItem;
private JMenuItem saveAsMenuItem;
private JMenuItem saveMenuItem;
private JMenuItem openFileMenuItem;
private JMenuItem newFileMenuItem;
private JMenu jMenu3;
private JMenuBar jMenuBar1;
/**
* Auto-generated main method to display this JFrame
*/
public static void main(String[] args) {
NewSwingApp inst = new NewSwingApp();
inst.setVisible(true);
}
public NewSwingApp() {
super();
initGUI();
}
private void initGUI() {
try {
{
jPanel1 = new JPanel();
getContentPane().add(jPanel1, BorderLayout.CENTER);
jPanel1.setLayout(null);
jPanel1.setSize(900, 543);
{
final String[] columnNames = {"Proz./Akt.", "Wert", "Aktivität", "Farbe", "High Risk", "Dauer", "Start", "Ende", "Ressource", "Bearbeiter"};
final DefaultTableModel model = new DefaultTableModel(columnNames, 0) {
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
public boolean isCellEditable(int row, int col) {
if (col < 2) {
return false;
} else {
return true;
}
}
};
jScrollPane1 = new JScrollPane();
jPanel1.add(jScrollPane1);
jScrollPane1.setBounds(35, 28, 812, 259);
jScrollPane1.getVerticalScrollBar().setEnabled(true);
{
JTable table = new JTable(model) {
protected String[] columnToolTips = {
"Art des Prozesses",
"Zugewiesener Wert des Prozesses",
"Bezeichnung des Prozesses",
"Farbe des Prozesses im Gantt-Chart",
"Übersicht über High-Risk-Prozesse",
"Dauer des Prozesses",
"Startdatum des Prozesses",
"Enddatum des Prozesses",
"Benötigte Ressourcen des Prozesses",
"Zugewiesene Bearbeiter des Prozesses"
};
//Implement table cell tool tips.
public String getToolTipText(MouseEvent e) {
String tip = null;
java.awt.Point p = e.getPoint();
int rowIndex = rowAtPoint(p);
int colIndex = columnAtPoint(p);
int realColumnIndex = convertColumnIndexToModel(colIndex);
TableModel model = getModel();
String process = (String)model.getValueAt(rowIndex, 2);
Boolean isProject = (Boolean)model.getValueAt(rowIndex, 0);
Boolean highRisk = (Boolean)model.getValueAt(rowIndex, 4);
if (realColumnIndex == 0) { //Wert
if(Boolean.TRUE.equals(isProject)) {
tip = "'" + process + "' ist ein Unterprojekt des Projekts.";
}
else {
tip = "'" + process + "' ist eine Aktivität eines Unterprojekts.";
}
}
if (realColumnIndex == 1) { //Wert
tip = "Dies ist der zugewiesene Wert für '" + process + "'.";
}
else if (realColumnIndex == 2) { //Prozess
tip = "Der Prozess trägt die Bezeichnung '" + getValueAt(rowIndex, colIndex) + "'.";
}
else if (realColumnIndex == 3) { //Prozess
tip = "Der Prozess besitzt diese Farbe im Gantt-Chart";
}
else if (realColumnIndex == 4) { //High Risk
if(Boolean.TRUE.equals(highRisk)) {
tip = "'" + process + "' wurde als 'High Risk' eingestuft und besitzt eine besondere Priorität.";
}
else {
tip = "'" + process + "' wurde nicht als 'High Risk' eingestuft.";
}
}
else if (realColumnIndex == 5) { //Dauer
tip = "Für '" + process + "' wurden " + getValueAt(rowIndex, colIndex) + " Tag(e) eingeplant.";
}
else if (realColumnIndex == 6) { //Startdatum
tip = "Dies ist das Startdatum für '" + process + "'.";
}
else if (realColumnIndex == 7) { //Enddatum
tip = "Dies ist das Enddatum für '" + process + "'.";
}
else if (realColumnIndex == 8) { //Ressource
if(getValueAt(rowIndex, colIndex) != "") {
tip = "'" + process + "' benötigt folgende Ressourcen: '" + getValueAt(rowIndex, colIndex) + "'.";
}
else {
tip = "'" + process + "' benötigt keine weiteren Ressourcen.";
}
}
else if (realColumnIndex == 9) { //Bearbeiter
if (getValueAt(rowIndex, colIndex) != "") {
tip = "'" + process + "' wird bearbeitet von: '" + getValueAt(rowIndex, colIndex) + "'.";
}
else {
tip = "'" + process + "' wurde kein Bearbeiter zugewiesen.";
}
}
return tip;
}
//Implement table header tool tips.
protected JTableHeader createDefaultTableHeader() {
return new JTableHeader(columnModel) {
public String getToolTipText(MouseEvent e) {
java.awt.Point p = e.getPoint();
int index = columnModel.getColumnIndexAtX(p.x);
int realIndex =
columnModel.getColumn(index).getModelIndex();
return columnToolTips[realIndex];
}
};
}
};
//hier noch ausbessern. -> evtl. als Vektor einlesen?
final Object[] row0 = {new Boolean(true), "I.", "Produktfindung", new Color(105, 176, 219), new Boolean(false), "75", new Date(), new Date(), "", ""};
final Object[] row1 = {new Boolean(false), "I.1.", "Brainstorming", new Color(105, 176, 219), new Boolean(true), "5", new Date(), new Date(), "MindManager", "Ramin"};
final Object[] row2 = {new Boolean(false), "I.2.", "Forschung und Entwicklung", new Color(105, 176, 219), new Boolean(true), "70", new Date(), new Date(), "Mikroskop", "Moritz"};
final Object[] row3 = {new Boolean(true), "II.", "Lieferantenauswahl", new Color(185, 176, 219), new Boolean(false), "33", new Date(), new Date(), "", ""};
final Object[] row4 = {new Boolean(false), "II.1.", "Marktanalyse", new Color(185, 176, 219), new Boolean(true), "10", new Date(), new Date(), "Internet", "Anton"};
final Object[] row5 = {new Boolean(false), "II.2.", "Angebote einholen", new Color(185, 176, 219), new Boolean(true), "20", new Date(), new Date(), "", "Marc"};
final Object[] row6 = {new Boolean(false), "II.3.", "Angebote vergleichen", new Color(185, 176, 219), new Boolean(false), "3", new Date(), new Date(), "Zollstock", "Marc"};
final Object[] row7 = {new Boolean(true), "III.", "Bestellvorgang", new Color(125, 126, 219), new Boolean(false), "3", new Date(), new Date(), "", ""};
final Object[] row8 = {new Boolean(false), "III.1.", "Ideale Liefermenge ermitteln", new Color(125, 126, 219), new Boolean(true), "10", new Date(), new Date(), "Computer", "Ramin"};
final Object[] row9 = {new Boolean(false), "III.2.", "Liefermenge bestellen", new Color(125, 126, 219), new Boolean(false), "20", new Date(), new Date(), "Computer", ""};
final Object[] row10 = {new Boolean(false), "III.3.", "Ware bezahlen", new Color(125, 126, 219), new Boolean(true), "3", new Date(), new Date(), "Geldtransporter", "Anton"};
final Object[] row11 = {new Boolean(true), "IV.", "Verarbeitung", new Color(125, 226, 119), new Boolean(false), "91", new Date(), new Date(), "", ""};
final Object[] row12 = {new Boolean(false), "IV.1.", "Verarbeitungsverfahren festlegen", new Color(125, 226, 119), new Boolean(true), "10", new Date(), new Date(), "Computer", "Moritz"};
final Object[] row13 = {new Boolean(false), "IV.2.", "Material verarbeiten", new Color(125, 226, 119), new Boolean(true), "80", new Date(), new Date(), "Maschine", ""};
final Object[] row14 = {new Boolean(false), "IV.3.", "Bewertung der Effizienz", new Color(125, 226, 119), new Boolean(true), "1", new Date(), new Date(), "KLR-Unterlagen", "Anton"};
final Object[] row15 = {new Boolean(true), "V.", "Lessons Learned", new Color(225, 126, 119), new Boolean(true), "3", new Date(), new Date(), "Stift", "Ramin"};
model.addRow(row0);
model.addRow(row1);
model.addRow(row2);
model.addRow(row3);
model.addRow(row4);
model.addRow(row5);
model.addRow(row6);
model.addRow(row7);
model.addRow(row8);
model.addRow(row9);
model.addRow(row10);
model.addRow(row11);
model.addRow(row12);
model.addRow(row13);
model.addRow(row14);
model.addRow(row15);
class Renderer extends JLabel implements TableCellRenderer {
private Color colorSelected = new Color( 150, 200, 255 );
private Color colorFocus = new Color( 200, 255, 200 );
private Color colorNormal = new Color( 255, 255, 255 );
public Renderer(){
setOpaque( true );
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
// die normalen Farben
setForeground( Color.BLACK );
if( hasFocus )
setBackground( colorFocus );
else if( isSelected )
setBackground( colorSelected );
else
setBackground( colorNormal );
if ((Boolean)table.getValueAt(row, 0) && (column == 1 || column == 2)) {
setFont(getFont().deriveFont(Font.BOLD));
setText( value.toString());
}
else if (column == 1 || column == 2) {
setFont(getFont().deriveFont(Font.ITALIC));
setText( value.toString());
}
else {
setFont(getFont().deriveFont(Font.PLAIN));
setText( value.toString());
}
return this;
}
}
table.setDefaultRenderer(Object.class, new Renderer()); //neuer allg. Renderer
TableRowSorter<DefaultTableModel> rowSorter = new TableRowSorter<DefaultTableModel>( model );
table.setRowSorter( rowSorter );
jScrollPane1.setViewportView(table);
table.setDefaultRenderer(Color.class, new ColorRenderer(true)); //neuer Renderer für Farbanzeige
table.setDefaultEditor(Color.class, new ColorEditor()); //neuer Editor für Farbauswahl
table.setDefaultEditor(Date.class, new JDateChooserCellEditor());
TableColumn column = null;
int[] colWidth = new int[] {10, 15, 120, 20, 30, 20, 35, 35, 50, 50};
for(int i = 0; i < table.getColumnCount(); i++) {
column = table.getColumnModel().getColumn(i);
column.setPreferredWidth(colWidth[i]);
}
// These are the spinner values
int maxdays = 100;
String[] values = new String[maxdays+1];
for (int i = 0; i < values.length; i++) {
values[i] = new Integer(i).toString();
}
// Set the spinner editor on the 1st visible column
int vColIndex = 5;
TableColumn col = table.getColumnModel().getColumn(vColIndex);
col.setCellEditor(new SpinnerEditor(values));
// If you want to make the cell appear like a spinner in its
// non-editing state, also set the spinner renderer
col.setCellRenderer(new SpinnerRenderer(values));
TableColumn startColumn = table.getColumnModel().getColumn(6);
startColumn.setCellEditor(new JDateChooserCellEditor());
TableColumn endColumn = table.getColumnModel().getColumn(7);
endColumn.setCellEditor(new JDateChooserCellEditor());
TableColumn ressourceColumn = table.getColumnModel().getColumn(8);
JComboBox comboBox = new JComboBox();
comboBox.addItem("");
comboBox.addItem("MindManager");
comboBox.addItem("Computer");
comboBox.addItem("Zollstock");
comboBox.addItem("Stift");
comboBox.addItem("Mikroskop");
comboBox.addItem("Internet");
comboBox.addItem("Geldtransporter");
comboBox.addItem("Maschine");
comboBox.addItem("KLR-Unterlagen");
ressourceColumn.setCellEditor(new DefaultCellEditor(comboBox));
rowSorter.setSortable(0, false );
rowSorter.setSortable(3, false );
rowSorter.setComparator(5, new Comparator<String>() {
public int compare(String s1, String s2) {
int i1 = Integer.parseInt(s1);
int i2 = Integer.parseInt(s2);
return i1 - i2;
}
} );
}
jButton1 = new JButton();
jPanel1.add(jButton1);
jButton1.setText("Neue Zeile");
jButton1.setBounds(35, 301, 140, 28);
jButton2 = new JButton();
jPanel1.add(jButton2);
jButton2.setText("Zeile löschen");
jButton2.setBounds(189, 301, 140, 28);
jButton1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
// Die Anzahl Columns (Breite) der Tabelle
final Object[] rowNew = {new Boolean(false), "", "Neuer Prozess", new Color(153, 153, 255), new Boolean(false), "0", new Date(), new Date(), "", ""};
// eine neue Row hinzufügen
model.addRow(rowNew);
}
});
jButton2.addActionListener( new ActionListener(){
public void actionPerformed(ActionEvent e) {
int lastRow = model.getRowCount();
model.removeRow(lastRow - 1);
}
});
}
{
jPanel2 = new JPanel();
jPanel1.add(jPanel2);
jPanel2.setBounds(532, 315, 140, 91);
}
}
this.setSize(900, 600);
{
jMenuBar1 = new JMenuBar();
setJMenuBar(jMenuBar1);
{
jMenu3 = new JMenu();
jMenuBar1.add(jMenu3);
jMenu3.setText("File");
{
newFileMenuItem = new JMenuItem();
jMenu3.add(newFileMenuItem);
newFileMenuItem.setText("New");
}
{
openFileMenuItem = new JMenuItem();
jMenu3.add(openFileMenuItem);
openFileMenuItem.setText("Open");
}
{
saveMenuItem = new JMenuItem();
jMenu3.add(saveMenuItem);
saveMenuItem.setText("Save");
}
{
saveAsMenuItem = new JMenuItem();
jMenu3.add(saveAsMenuItem);
saveAsMenuItem.setText("Save As ...");
}
{
closeFileMenuItem = new JMenuItem();
jMenu3.add(closeFileMenuItem);
closeFileMenuItem.setText("Close");
}
{
jSeparator2 = new JSeparator();
jMenu3.add(jSeparator2);
}
{
exitMenuItem = new JMenuItem();
jMenu3.add(exitMenuItem);
exitMenuItem.setText("Exit");
}
}
{
jMenu4 = new JMenu();
jMenuBar1.add(jMenu4);
jMenu4.setText("Edit");
{
cutMenuItem = new JMenuItem();
jMenu4.add(cutMenuItem);
cutMenuItem.setText("Cut");
}
{
copyMenuItem = new JMenuItem();
jMenu4.add(copyMenuItem);
copyMenuItem.setText("Copy");
}
{
pasteMenuItem = new JMenuItem();
jMenu4.add(pasteMenuItem);
pasteMenuItem.setText("Paste");
}
{
jSeparator1 = new JSeparator();
jMenu4.add(jSeparator1);
}
{
deleteMenuItem = new JMenuItem();
jMenu4.add(deleteMenuItem);
deleteMenuItem.setText("Delete");
}
}
{
jMenu5 = new JMenu();
jMenuBar1.add(jMenu5);
jMenu5.setText("Help");
{
helpMenuItem = new JMenuItem();
jMenu5.add(helpMenuItem);
helpMenuItem.setText("Help");
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}