N
NicolasA
Gast
Tach Post,
also ich habe gerade meine Tabelle die in einem Thread geupdatet werden soll ein bisschen umgebastelt
und zwar so, dass ich auch ganze Zeilen anmarkern kann wenn ein bestimmter Wert drin steht.
Vorher hat das mit dem repaint(); wunderbar funktioniert nur leider geht es jetzt nicht mehr.
Hier ist der Quellcode von der Modelklasse:
Hier ist die Oberflaeche:
Vielleicht hat ja einer von Euch eine Idee.
Vielen Dank im Vorraus
NicolasA
also ich habe gerade meine Tabelle die in einem Thread geupdatet werden soll ein bisschen umgebastelt
und zwar so, dass ich auch ganze Zeilen anmarkern kann wenn ein bestimmter Wert drin steht.
Vorher hat das mit dem repaint(); wunderbar funktioniert nur leider geht es jetzt nicht mehr.
Hier ist der Quellcode von der Modelklasse:
Code:
package gui;
import java.util.Vector;
import javax.swing.event.TableModelEvent;
import javax.swing.table.AbstractTableModel;
import module.module.Modul;
public class Model extends AbstractTableModel {
// ModulListe liste = new ModulListe();
Vector meAnzeigeModule;
public Model(Vector module) {
this.meAnzeigeModule = module;
}
// Die Anzahl Columns
public int getColumnCount() {
return 3;
}
// Die Anzahl Vehikel
public int getRowCount() {
return meAnzeigeModule.size();
}
// Die Titel der einzelnen Columns
public String getColumnName(int column) {
switch( column ){
case 0: return "modul";
case 1: return "revision";
case 2: return "compilestatus";
//case 3: return "Besitzt Motor";
default: return null;
}
}
// Der Wert der Zelle (rowIndex, columnIndex)
public Object getValueAt(int rowIndex, int columnIndex) {
Modul modul = (Modul)meAnzeigeModule.get(rowIndex);
switch( columnIndex ){
case 0: return modul.getMeMname();
case 1: return modul.getMeMrevision();
case 2: return modul.getMeCompilestaus();
//case 3: return vehicle.hasMotor() ? Boolean.TRUE : Boolean.FALSE;
default: return null;
}
}
// Eine Angabe, welchen Typ von Objekten in den Columns angezeigt werden soll
public Class getColumnClass(int columnIndex) {
switch( columnIndex ){
case 0: return String.class;
case 1: return String.class;
case 2: return String.class;
//case 3: return Boolean.class;
default: return null;
}
}
}
Hier ist die Oberflaeche:
Code:
package gui;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Hashtable;
import java.util.Vector;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.JSlider;
import javax.swing.JTable;
import javax.swing.JToolBar;
import javax.swing.border.EmptyBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumnModel;
import aktion.AktionsLauscher;
import schnittstellen.DatenbankZugriff;
import module.module.Modul;
import module.module.ModulListe;
import produkte.Produkt;
import produkte.ProduktListe;
public class Oberflaeche extends JFrame implements Runnable{
private ModulListe meModulListe = null;
private ProduktListe meProduktListe = null;
private DatenbankZugriff meDatenbankZugriff = null;
private Vector meModule = null;
private Vector meProdukte = null;
private Vector anzeigeModule = null;
private Font meFont = null;
private JTable meModulTabelle = null;
private JPopupMenu mePop = null;
private JLabel fortschrittLabel = null;
private JLabel produkt = null;
private JComboBox produktBox = null;
private JProgressBar progress = null;
private Produkt aktProdukt = null;
private Thread tabellenUpdate = null;
private Model tabellenModel = null;
int sleep = 10000;
public static void main(String[] args) {
JFrame.setDefaultLookAndFeelDecorated(true);
new Oberflaeche();
}
private Oberflaeche() {
meDatenbankZugriff = new DatenbankZugriff();
meDatenbankZugriff.getProperties();
meDatenbankZugriff.verbindungHerstellen();
meModulListe = new ModulListe();
meProduktListe = new ProduktListe();
meProdukte = meProduktListe.getProduktListe(meDatenbankZugriff);
meFont = new Font("Arial",0,14);
setTitle("Integration Builder 1.0");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setMinimumSize(new Dimension(800,600));
progress = new JProgressBar();
fortschrittLabel = new JLabel();
anzeigeModuleHolen();
komponentenHinzufuegen();
tabellenUpdate = new Thread(this);
tabellenUpdate.start();
setSize(1024,768);
setLocationRelativeTo(null);
setVisible(true);
}
private void komponentenHinzufuegen() {
getContentPane().setLayout(new BorderLayout());
meModulTabelle = new JTable(tabellenModel) {
public Component prepareRenderer(
TableCellRenderer renderer, int row, int column) {
Component compTabelle = super.prepareRenderer(renderer, row, column);
if (!isRowSelected(row)) {
String type = (String) getModel().getValueAt(row,2);
compTabelle.setBackground(Color.WHITE);
if (type.compareToIgnoreCase("waiting") == 0) {
compTabelle.setBackground(Color.YELLOW);
}
else if(type.compareToIgnoreCase("compiling") == 0) {
compTabelle.setBackground(Color.ORANGE);
}
else if (type.compareToIgnoreCase("compiled") == 0) {
compTabelle.setBackground(Color.GREEN);
}
}
return compTabelle;
}
};
meModulTabelle.setEnabled(false);
meModulTabelle.getTableHeader().setFont(new Font("Arial",0,14));
meModulTabelle.setAutoResizeMode(JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);
meModulTabelle.setFont(meFont);
meModulTabelle.setShowHorizontalLines(true);
meModulTabelle.setShowVerticalLines(false);
TableColumnModel columnModel = meModulTabelle.getColumnModel();
columnModel.getColumn(0).setPreferredWidth(550);
mePop = new JPopupMenu();
JMenuItem item1 = new JMenuItem("show submodulinformation");
mePop.add(item1);
item1.setFont(meFont);
meModulTabelle.add(mePop);
meModulTabelle.setBackground(Color.decode("#ECECEC"));
JScrollPane pane = new JScrollPane(meModulTabelle);
pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);;
pane.setBorder(BorderFactory.createLoweredBevelBorder());
JPanel pnlNorden = new JPanel(new BorderLayout());
pnlNorden.setBorder(BorderFactory.createEmptyBorder(5,0,0,0));
JToolBar toolMenu = new JToolBar();
JLabel lblProdukt = new JLabel("product:");
lblProdukt.setFont(meFont);
produktBox = new JComboBox(meProdukte);
produktBox.setToolTipText("choose a product");
produktBox.setFont(meFont);
produktBox.setMaximumSize(new Dimension(200,20));
produktBox.addActionListener(new AktionsLauscher(this));
JButton btnAus = new JButton(new ImageIcon("close_24.gif"));
btnAus.setToolTipText("exit");
btnAus.setActionCommand("ausschalten");
btnAus.addActionListener(new AktionsLauscher(this));
JButton btnDrucken = new JButton(new ImageIcon());
btnDrucken.setToolTipText("print this table");
toolMenu.add(lblProdukt);
toolMenu.addSeparator();
toolMenu.add(produktBox);
toolMenu.addSeparator();
toolMenu.add(btnAus);
toolMenu.setPreferredSize(new Dimension(350,35));
toolMenu.setFloatable(false);
toolMenu.setRollover(true);
toolMenu.setBorderPainted(false);
toolMenu.setOpaque(false);
pnlNorden.add(toolMenu, BorderLayout.EAST);
JPanel northLeft = new JPanel();
northLeft.setBorder(BorderFactory.createEmptyBorder(0,10,0,0));
produkt = new JLabel(produktBox.getSelectedItem().toString());
produkt.setFont(new Font("Arial",0,28));
northLeft.add(produkt);
JPanel pnlWesten = new JPanel(new BorderLayout());
JPanel pnlWestemUnten = new JPanel(new BorderLayout());
pnlWestemUnten.setBorder(new EmptyBorder(10,20,10,20));
progress.setStringPainted(true);
pnlWestemUnten.add(progress);
JPanel leftMiddle = new JPanel();
fortschrittLabel.setFont(meFont);
leftMiddle.add(fortschrittLabel);
JPanel pnlUntenLinks = new JPanel();
pnlUntenLinks.setBorder(BorderFactory.createEmptyBorder(30,0,0,0));
JLabel imgDspace = new JLabel(new ImageIcon("dSPACE.gif"));
pnlUntenLinks.add(imgDspace);
pnlWestemUnten.add(leftMiddle, BorderLayout.NORTH);
pnlWesten.add(pnlWestemUnten, BorderLayout.SOUTH);
pnlNorden.add(northLeft, BorderLayout.WEST);
pnlWestemUnten.add(pnlUntenLinks, BorderLayout.SOUTH);
add(pane, java.awt.BorderLayout.CENTER);
add(pnlNorden, BorderLayout.NORTH);
add(pnlWesten, BorderLayout.WEST);
}
public void produktBoxAktionen () {
aktProdukt = (Produkt) produktBox.getSelectedItem();
produkt.setText(aktProdukt.getMePname());
}
public void btnAusAktionen() {
System.exit(0);
}
public void anzeigeModuleHolen() {
anzeigeModule = new Vector();
meModule = meModulListe.getModulListe(meDatenbankZugriff);
for (int i=0; i < meModule.size();i++) {
Modul aktModul = (Modul) meModule.get(i);
if ((aktModul.getMeCmnstatus() != 3 && aktModul.getMeIntegrationview().compareTo("") != 0)){
anzeigeModule.add(aktModul);
}
}
tabellenModel = new Model(anzeigeModule);
}
public void run() {
while (true) {
System.out.println(sleep);
aktProdukt = (Produkt) produktBox.getSelectedItem();
anzeigeModuleHolen();
tabellenModel.fireTableDataChanged();
String sqlBefehl = "SELECT COUNT(mname) AS 'anzahl' FROM Modul_Compile WHERE compilestatus = 'compiled' AND bnr = "
+ aktProdukt.getMePnr();
int anzahlCompilierteModule = 0;
try {
ResultSet sqlResult = meDatenbankZugriff.datenHolen(sqlBefehl);
sqlResult.next();
anzahlCompilierteModule = sqlResult.getInt("anzahl");
} catch (SQLException e1) {
e1.printStackTrace();
}
System.out.println("Tabbelle neuzeichnen");
double fortschritt = (double) anzahlCompilierteModule / (double) anzeigeModule.size() * 100;
progress.setValue((int) fortschritt);
fortschrittLabel.setText(anzahlCompilierteModule + " of " + anzeigeModule.size()
+ " modules");
progress.repaint();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
}
}
Vielleicht hat ja einer von Euch eine Idee.
Vielen Dank im Vorraus
NicolasA