import java.io.*;
import javax.swing.JFrame;
import java.awt.Container;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.Point;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.AbstractAction;
import javax.swing.Icon;
import javax.swing.SwingUtilities;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableRowSorter;
import javax.swing.table.TableModel;
import java.awt.EventQueue;
import java.awt.event.*;
import java.text.*;
import java.util.*;
import javax.swing.*;
import java.awt.Color;
import java.awt.Component;
public class tabelle extends JFrame {
private static final long serialVersionUID = 1L;
private static final String[] TABLE_COLUMN_NAMES = new String[] {
"Name", "Raum", "RFID Nummer", "Barcode", "Archivnummer", "Datum"
};
File allFile = new File("texttabelle.txt");
int readersize = 1;
Calendar greenDate = new GregorianCalendar(2012, 00, 01, 00, 00, 00);
Calendar foundDate = new GregorianCalendar();
int counter;
int counterGreen = 0;
int counterRed = 0;
int []colorRed = new int [10000];
int []colorGreen = new int [10000];
int colorWhite;
JPanel centerPanelPicture = new JPanel(new BorderLayout());
JPanel centerPanelTable = new JPanel(new BorderLayout());
private JTable table;
private DefaultTableModel model;
JComboBox settingBox1 = new JComboBox(new String[] {
"01","02","03","04","05","06","07","08","09","10","11","12","13","14",
"15","16","17","18","19","20","21","22","23","24","25","26","27","28",
"29","30","31"});
int day = 01;
JComboBox settingBox2 = new JComboBox(new String[] {
"01","02","03","04","05","06","07","08","09","10","11","12"});
int month = 00;
JComboBox settingBox3 = new JComboBox(new String[] {
"2012","2013","2014","2015","2016","2017","2018","2019","2020","2021",});
int year = 2012;
JComboBox settingBox4 = new JComboBox(new String[] {
"00","01","02","03","04","05","06","07","08","09","10","11","12","13",
"14","15","16","17","18","19","20","21","22","23"});
int hour = 00;
JComboBox settingBox5 = new JComboBox(new String[] {
"00","01","02","03","04","05","06","07","08","09","10","11","12","13",
"14","15","16","17","18","19","20","21","22","23","24","25","26","27",
"28","29","30","31","32","33","34","35","36","37","38","39","40","41",
"42","43","44","45","46","47","48","49","50","51","52","53","54","55",
"56","57","58","59"});
int minute = 00;
JComboBox settingBox6 = new JComboBox(new String[] {
"00", "01","02","03","04","05","06","07","08","09","10","11","12","13","14",
"15","16","17","18","19","20","21","22","23","24","25","26","27","28",
"29","30","31","32","33","34","35","36","37","38","39","40","41","42",
"43","44","45","46","47","48","49","50","51","52","53","54","55","56",
"57","58","59"});
int second = 00;
JRadioButton radioAll = new JRadioButton("Alle Objekte", true);
JRadioButton radioRoom = new JRadioButton("Objekte Raum");
JRadioButton radioLast = new JRadioButton("Zuletzt gefundene Objekte");
String room = "B100";
JTextField textfield = new JTextField(room);
private int mouseClm = -1, mouseRow = -1;
//Konstruktor
public tabelle() {
model = new DefaultTableModel(TABLE_COLUMN_NAMES, 0);
table = new JTable(model);
table.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent evt) {
Point p = evt.getPoint();
mouseRow = table.rowAtPoint(p);
mouseClm = table.columnAtPoint(p);}
});
enableSorting(table); // aufruf methode fürs sortieren
Container contentPane = getContentPane();
centerPanelTable.add(new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER));
centerPanelTable.setVisible(true); //Beim starten unsichtbar
contentPane.add(centerPanelTable, BorderLayout.CENTER);
JPanel southPanel = new JPanel(new GridLayout(1,7));
JButton showAllObjectsButton = new JButton(new ShowAllObjectsAction("Bibliothek"));
southPanel.add(showAllObjectsButton);
showAllObjectsButton.setEnabled( true );
JToggleButton updateButton = new JToggleButton(new updateAction("Aktualisieren"));
southPanel.add(updateButton);
updateButton.setEnabled(true);
JButton settingButton = new JButton(new settingAction("Einstellungen"));
southPanel.add(settingButton);
settingButton.setEnabled( true );
contentPane.add(southPanel, BorderLayout.SOUTH);
settingBox1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
final Object selectedItem = settingBox1.getSelectedItem();
String a = selectedItem.toString();
day = Integer.parseInt(a);}});
settingBox2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
final Object selectedItem = settingBox2.getSelectedItem();
String a = selectedItem.toString();
month = (Integer.parseInt(a) - 1);}});
settingBox3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
final Object selectedItem = settingBox3.getSelectedItem();
String a = selectedItem.toString();
year = Integer.parseInt(a);}});
settingBox4.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
final Object selectedItem = settingBox4.getSelectedItem();
String a = selectedItem.toString();
hour = Integer.parseInt(a);}});
settingBox5.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
final Object selectedItem = settingBox5.getSelectedItem();
String a = selectedItem.toString();
minute = Integer.parseInt(a);}});
settingBox6.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
final Object selectedItem = settingBox6.getSelectedItem();
String a = selectedItem.toString();
second = Integer.parseInt(a);}});
textfield.setEnabled(false);
radioRoomListener rRL = new radioRoomListener();
radioRoom.addActionListener(rRL);
OtherModus oM = new OtherModus();
radioAll.addActionListener(oM);
radioLast.addActionListener(oM);
}
// Ende Konstruktor
private class ShowAllObjectsAction extends AbstractAction {
public ShowAllObjectsAction() {
this(null);
}
public ShowAllObjectsAction(String text) {
this(text, null);
}
public ShowAllObjectsAction(String text, Icon icon) {
super(text, icon);
}
public void actionPerformed(ActionEvent e) {
if(!allFile.exists()) {
JOptionPane.showMessageDialog(null, "Die Angegebene TextdateiDatei existiert nicht.\nKann nicht fortfahren.",
null, JOptionPane.ERROR_MESSAGE);
return;
}
model.setRowCount(0);
BufferedReader br = null;
try{
FileReader fr = new FileReader(allFile);
br = new BufferedReader(fr);
String[][] fileContent = readANSIFileToArray(br);
for(String[] line:fileContent) {
model.addRow(line);
}
table.revalidate();
}
catch(IOException ex) {
JOptionPane.showMessageDialog(null, "Beim lesen der Datei ist ein Fehler aufgetreten:\n" + ex.getMessage(),
null,JOptionPane.ERROR_MESSAGE);
} finally {
try {
if(br != null) {
br.close();
}
} catch (IOException e1) {
e1.printStackTrace();
}
}
//Unüberschriebener Standard DefaultTableCellRenderer, für die normale anzeige
table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer()
{
//leer
});}
}
//ActionListener für aktualisieren Button
private class updateAction extends AbstractAction{
public updateAction() {
this(null);
}
public updateAction(String text) {
this(text, null);
}
public updateAction(String text, Icon icon) {
super(text, icon);
}
public void actionPerformed(ActionEvent e){
JToggleButton tBtn = (JToggleButton)e.getSource();
if (tBtn.isSelected()) {
//aktualisieren der Tabelle wie bei "Bibliothek" button
//Zwischen modus "alle Objekte" und "Objekte Raum" oder "Objekte letzter Sitzung wählen"
if(radioAll.isSelected() || radioRoom.isSelected()){
if(!allFile.exists()) {
JOptionPane.showMessageDialog(null, "Die Angegebene TextdateiDatei existiert nicht.\nKann nicht fortfahren.",
null, JOptionPane.ERROR_MESSAGE);
return;
}
}
else if(radioLast.isSelected()){
}
model.setRowCount(0);
BufferedReader br = null;
//Zwischen modus "alle Objekte" und "Objekte Raum" oder "Objekte letzter Sitzung wählen"
try{
if(radioAll.isSelected() || radioRoom.isSelected()){
FileReader fr = new FileReader(allFile);
br = new BufferedReader(fr);
}
else if(radioLast.isSelected()){
}
String[][] fileContent = readANSIFileToArray(br);
for(String[] line:fileContent) {
model.addRow(line);
}
table.revalidate();
}
catch(IOException ex) {
JOptionPane.showMessageDialog(null, "Beim lesen der Datei ist ein Fehler aufgetreten:\n" + ex.getMessage(),
null,JOptionPane.ERROR_MESSAGE);
} finally {
try {
if(br != null) {
br.close();
}
} catch (IOException e1) {
e1.printStackTrace();
}
}
//Zweitens Zeilen Datum überprüfen
int size = 0;
try{
size = arraySize(readersize);
System.out.println("size = "+size);
}
catch(IOException et) {
JOptionPane.showMessageDialog(null, "Beim lesen der Datei ist ein Fehler aufgetreten!:\n" + et.getMessage(),
null,JOptionPane.ERROR_MESSAGE);
}
//Alle Zähler zurücksetzten, für das erneute benutzen
counterRed = 0;
counterGreen = 0;
//Datum jedes Objektes aus der Tabelle hohlen und vergleichen
for( counter = 0; (size-1)>=counter; counter++ ){
String stringDate = (String)model.getValueAt(counter, 5);
if(stringDate == null){
stringDate = "01.09.1989 um 19:30:00";
}
SimpleDateFormat dateformat = new SimpleDateFormat("dd.MM.yyyy' um 'HH:mm:ss");
try{
Date dateDate = dateformat.parse(stringDate);
foundDate.setTime(dateDate);
//Zeilen die gefärbt werden bestimmen
if(greenDate.after(foundDate)){
colorRed[counterRed] = counter;
counterRed = counterRed +1;
}
else if(greenDate.before(foundDate) || (greenDate.equals(foundDate))){ //auch abgefangen, falls gleich
colorGreen[counterGreen] = counter;
counterGreen = counterGreen +1;
}
}
catch (ParseException pe){
JOptionPane.showMessageDialog(null, "Das Datums Format konnte nicht eingelesen werden!:\n" + pe.getMessage(),
null,JOptionPane.ERROR_MESSAGE);
}
}
//Renderer fürs Aktualisieren / DefaultTableCellRenderer Klasse wird mit super überschrieben
table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer(){
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
Component c = super.getTableCellRendererComponent(table, value,
isSelected, hasFocus,
row, column);
for (int i = 0; i < counterRed; i++)
{ if (row == mouseRow && column == mouseClm) {
setBackground(Color.WHITE);
}
else if (row == colorRed[i]) {
setBackground(Color.RED);
System.out.println(colorRed[i] + " wird rot");
}
}
for (int i = 0; i < counterGreen; i++)
{ if (row == mouseRow && column == mouseClm) {
setBackground(Color.WHITE);
}
else if(row == colorGreen[i]){
setBackground(Color.GREEN);
System.out.println(colorGreen[i] + " wird grün");
}
}
return this;
}
});
}
else {} }}
//ActionListener für die Einstellungen
private class settingAction extends AbstractAction{
public settingAction() {
this(null);
}
public settingAction(String text) {
this(text, null);
}
public settingAction(String text, Icon icon) {
super(text, icon);
}
public void actionPerformed(ActionEvent e) {
//Unterklasse für das einstellungenfenster
final class setting extends JDialog{
//Konstruktor
public setting(){
Container settingContainer = getContentPane();
JPanel settingPanelNORTH1 = new JPanel(new GridLayout(1,7));
JPanel settingPanelNORTH = new JPanel(new GridLayout(3,1));
JPanel settingPanelCENTER = new JPanel(new GridLayout(1,7));
JPanel settingPanelSOUTH = new JPanel(new GridLayout(5,3));
JLabel settingHeadline = new JLabel("Stellen Sie den Zeitpunkt ein, ab dem Objekte makiert werden sollen.");
settingPanelNORTH.add(settingHeadline);
JLabel buffer10 = new JLabel("");
settingPanelNORTH.add(buffer10);
settingPanelNORTH.add(settingPanelNORTH1);
JLabel settingHeadline1 = new JLabel("Tag");
settingPanelNORTH1.add(settingHeadline1);
JLabel settingHeadline2 = new JLabel("Monat");
settingPanelNORTH1.add(settingHeadline2);
JLabel settingHeadline3 = new JLabel("Jahr");
settingPanelNORTH1.add(settingHeadline3);
JLabel buffer = new JLabel(" um");
settingPanelNORTH1.add(buffer);
JLabel settingHeadline4 = new JLabel("Stunde");
settingPanelNORTH1.add(settingHeadline4);
JLabel settingHeadline5 = new JLabel("Minute");
settingPanelNORTH1.add(settingHeadline5);
JLabel settingHeadline6 = new JLabel("Sekunde");
settingPanelNORTH1.add(settingHeadline6);
settingPanelCENTER.add(settingBox1);
settingPanelCENTER.add(settingBox2);
settingPanelCENTER.add(settingBox3);
JLabel buffer2 = new JLabel(" um");
settingPanelCENTER.add(buffer2);
settingPanelCENTER.add(settingBox4);
settingPanelCENTER.add(settingBox5);
settingPanelCENTER.add(settingBox6);
JLabel buffer3 = new JLabel("");
settingPanelSOUTH.add(buffer3);
JLabel buffer4 = new JLabel("");
settingPanelSOUTH.add(buffer4);
JLabel buffer5 = new JLabel("");
settingPanelSOUTH.add(buffer5);
ButtonGroup bg = new ButtonGroup();
settingPanelSOUTH.add(radioAll);
JLabel buffer6 = new JLabel("");
settingPanelSOUTH.add(buffer6);
JLabel buffer7 = new JLabel("");
settingPanelSOUTH.add(buffer7);
settingPanelSOUTH.add(radioRoom);
settingPanelSOUTH.add(textfield);
JLabel buffer8 = new JLabel("");
settingPanelSOUTH.add(buffer8);
settingPanelSOUTH.add(radioLast);
JLabel buffer9 = new JLabel("");
settingPanelSOUTH.add(buffer9);
JLabel bufferA = new JLabel("");
settingPanelSOUTH.add(bufferA);
bg.add(radioRoom);
bg.add(radioAll);
bg.add(radioLast);
JButton settingButtonOK = new JButton(new settingOKaction("OK"));
settingPanelSOUTH.add(settingButtonOK);
settingContainer.add(settingPanelNORTH, BorderLayout.NORTH);
settingContainer.add(settingPanelCENTER, BorderLayout.CENTER);
settingContainer.add(settingPanelSOUTH, BorderLayout.SOUTH);
}
}
JDialog settingWindow = new setting();
settingWindow.setTitle("Einstellungen");
settingWindow.pack();
settingWindow.setLocation(400, 300);
settingWindow.setModal(true);
settingWindow.setResizable(false);
settingWindow.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
settingWindow.setVisible(true);
settingWindow.setLocation(400, 100);
}
}
//ActionListener für das Einstellungen Unterfenster settingOKaction
private class settingOKaction extends AbstractAction{
public settingOKaction() {
this(null);
}
public settingOKaction(String text) {
this(text, null);
}
public settingOKaction(String text, Icon icon) {
super(text, icon);
}
public void actionPerformed(ActionEvent e) {
greenDate.set(year, month , day, hour, minute, second);
SwingUtilities.windowForComponent((Component)e.getSource()).dispose(); //schließt das JDialog wieder
}
}
private class radioRoomListener implements ActionListener{
public void actionPerformed(ActionEvent e){
textfield.setEnabled(true);
}}
private class OtherModus implements ActionListener{
public void actionPerformed(ActionEvent e){
textfield.setEnabled(false);
}}
//readANSIFILE methode
private String[][] readANSIFileToArray(Reader reader) throws IOException {
if(!(reader instanceof BufferedReader)) {
return(readANSIFileToArray(new BufferedReader(reader)));
}
//Selber die größe des arrays festlegen
LineNumberReader f;
String line;
int sizeANSIFile = 1; //für die größe des arrays
f = new LineNumberReader(new FileReader("texttabelle.txt"));
while ((line = f.readLine()) != null) {
sizeANSIFile= f.getLineNumber();
}
f.close();
BufferedReader br = (BufferedReader) reader;
String[][] values = new String[sizeANSIFile][0];
if(radioAll.isSelected() || radioLast.isSelected()){
int lineCounter = 0;
for(String s = null; (s = br.readLine()) != null; lineCounter++) {
String[] lineContent = s.split(";"); //länge von lineContent = anzahl Spalten
for(int y = 0, size = lineContent.length; y < size; y++) {
values[lineCounter] = lineContent;//Verbessert values[lineCounter][y] = lineContent[y]; //Hm, values[lineCounter] = lineContent[y]; funktioniert leider nicht. Nie getestet, aber denke so müsste es auch klappen.
}
}
}
//hier für modus "Objekt Raum" Ergebniss ändern
else if (radioRoom.isSelected()){
Boolean flagg = false;
room = textfield.getText();
System.out.println(room + " aus readANSIFileToArray");
int lineCounter = 0;
for(String s = null; (s = br.readLine()) != null; lineCounter++) {
String[] lineContent = s.split(";");
//Überprüfen, ob in einem der Spalten der gesuchte raum steht
for(int i= 0, size = lineContent.length; i <size; i++ ){
if(room.equals(lineContent[i])){
flagg = true;
System.out.println(lineContent[i] + " = " + flagg);
}
else{System.out.println(lineContent[i] + " != " + room);
}
}
//values nür befüllen, wenn die flagg gesetzt ist
if(flagg == true){
for(int y = 0, size = lineContent.length; y < size; y++) {
values[lineCounter] = lineContent;
}
}
flagg = false;
}
}
return(values);
}
//Methode zum größe feststellen
private int arraySize(int readersize) throws IOException {
LineNumberReader g;
String line;
//readersize = 1; //für die größe des arrays
try {
g = new LineNumberReader(new FileReader("texttabelle.txt"));
while ((line = g.readLine()) != null) {
readersize= g.getLineNumber();
}
g.close();
}
catch (IOException e) {
JOptionPane.showMessageDialog(null, "Fehler beim feststellen, der größe der Arrays!",
null, JOptionPane.ERROR_MESSAGE);
}
return readersize;
}
//Methode zum Sortieren
public void enableSorting(JTable table) {
DefaultTableModel model = (DefaultTableModel) table.getModel();
if (model == null)
{return;
}
TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>();
table.setRowSorter(sorter);
sorter.setModel(model);
}
//main
public static void main (String []args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
JFrame Window = new tabelle();
Window.setTitle("RFID Finder Tabellenansicht");
Window.setSize(780,637);
Window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Window.setVisible(true);
}
});
}
}