Zum Inhalt springen

Rainer Wahnsinn

Mitglieder
  • Gesamte Inhalte

    14
  • Benutzer seit

  • Letzter Besuch

  1. Das will ich doch auch gar nicht... Ich habe ja am Ende nur noch nach einer Möglichkeit gefragt, wie ich zeitabhängig ein boolean Datenfeld auf true bzw false switchen kann...ich gehe nämlich davon aus, dass damit mein Problem gelöst wäre.
  2. public void starteAufzeichnung() { if(aktuellerPatient != null) { aufzeichnungAktiv = true; ekgDatenPanel.reset(); LogdateiAnzeige.erzeugeLogEintrag(AUFZEICHNUNG_GESTARTET,sprache); logger.log(Level.INFO,AUFZEICHNUNG_GESTARTET); new Thread(new Runnable() { @Override public void run() { try { aufzeichnungStarten(); } catch (IOException e) { LogdateiAnzeige.erzeugeLogEintrag(FEHLERMELDUNG,sprache); logger.log(Level.INFO,FEHLERMELDUNG); } }}).start(); } else{ LogdateiAnzeige.erzeugeLogEintrag(PATIENT_LADEN_BEVOR_AUFZEICHNUNG,sprache); logger.log(Level.INFO,PATIENT_LADEN_BEVOR_AUFZEICHNUNG); } } Und : private void aufzeichnungStarten() throws IOException { VirtuellerEKGRekorder ekgRecorder = new VirtuellerEKGRekorder(); EKG randomEkg = new EKG(); setAktuellesEkg(randomEkg); ekgRecorder.aufzeichnungStarten(); werte = new ArrayList<Float>(); werteGefiltert = new ArrayList<Float>(); while(aufzeichnungAktiv == true) { naechsterWert = ekgRecorder.getNaechsterWert(); naechsterWertGefiltert = ekgRecorder.getNaechsterWertGefiltert(); werte.add(naechsterWert); // werte.add(naechsterWertGefiltert); //R-ZACKEN SICHTBAR !!! werteGefiltert.add(naechsterWertGefiltert); aktuellesEkg.setEkgWerte(werte); ekgBildPanel.paintEkg(); ekgBildPanel.setPreferredSizeOfPanel(werte.size()); } ekgRecorder.aufzeichnungBeenden(); aktuellesEkg.setAbtastIntervall(ekgRecorder.getAbtastIntervall()); aktuellesEkg.setAnzahlWerte(werte.size()); aktuellesEkg.setFilterung(false); aktuellesEkg.setPatientenID(aktuellerPatient.getId()); aktuellesEkg.setPhysikalischesMaximum(ekgRecorder.getPhysikalischesMaximum()); aktuellesEkg.setPhysikalischesMinimum(ekgRecorder.getPhysikalischesMinimum()); } Im Aufruf "ekgBildPanel.paintEkg();" steckt dann die repaint Methode, die paintComponent aufruft
  3. Ich rufe die paintComponent() Methode wie gesagt nicht direkt auf...das passiert alles über paintEkg(). Und ja, ich fände es schön wenn mir jemand, der das Ganze besser beherrscht als ich es tue, einen Beispielcode zur Verfügung stellen könnte...ich sitze jetzt seit über 3 Stunden an dem *******, und hab schon alles mögliche ausprobiert...sonst würde ich nicht in ein Forum schreiben. Dein Beispiel ist zwar nett, hilft mir aber leider nicht wirklich weiter... Mein Problem ist wo im Code ich diesen Thread am besten einbaue...ich möchte es erst einmal gerne in der paintComponent Methode machen, später wenn es einmal funktioniert kann ich es immer noch auslagern. Es müsste doch eigentlich mit einem einfachen switch von einem boolean datenfeld gehen... if(true) male Kreis an EKG-Linie setze 500ms auf false
  4. Doch, ich rufe die paintComponent() Methode schon über repaint auf... das Problem bei der Sache ist aber dass die EKG-Kurve beim Starten einer Aufzeichnung langsam durchläuft...also nicht die ganze Kurve auf einmal gezeichnet wird...dafür benutze ich einen Thread. Die Punkte sollen aber zusätzlich gezeichnet werden, wenn ein EKG-Wert über einer bestimmten Schwelle liegt. /** * Malt die EKG-Kurve */ public void paintEkg() { ekgKurve.repaint(); ekgKurve.add(ekgLinie,BorderLayout.CENTER); }
  5. Vielleicht könnte man das Ganze ja auch einfach mit nem boolean Datenfeld machen, dessen Wert alle 500ms zwischen true / false geswiched wird. Aber wie gesacht...kenn mich nicht wirklich mit Threads aus...wo ich im Code genau so nen Thread starte, wie das mit dem wechseln realisiert werden könnte, usw. Wär toll wenn mir da jemand weiter helfen könnte mfg Rainer
  6. hmm...das Ganze sollte wenn möglich schon in der Methode passieren.
  7. Hallo, sitz gerade an einem Timer und komm nicht wirklich weiter. Und zwar habe ich einen Thread, der nach und nach eine EKG-Linie zeichnet. Immer, wenn eine R-Zacke kommt, also ein bestimmter Schwellenwert überschritten wird, soll ein Punkt an der jeweiligen Stelle gezeichnet werden. Danach soll dies 0.5 Sekunden lang nicht mehr geschehen. Der Code dazu : /** * Diese Methode ist fuer das Zeichnen der EKG-Linien zustaendig. */ @Override public void paintComponent(Graphics g) throws IndexOutOfBoundsException { super.paintComponent(g); if(controller.getAktuellesEkg() != null) { floatWerte = controller.getAktuellesEkg().getEkgWerte(); for(int i = 1; i < floatWerte.size(); i++) { if(aufzeichnung) { if(floatWerte.get(i) > grenze) { g.drawLine(i-1, floatWerte.get(i-1).intValue(), i, floatWerte.get(i).intValue()); g.setColor(Color.red); g.fillOval(i-1, floatWerte.get(i-1).intValue(), 8,8); g.setColor(Color.black); } else g.drawLine(i-1, floatWerte.get(i-1).intValue(), i, floatWerte.get(i).intValue()); } else{ g.drawLine(i-1, floatWerte.get(i-1).intValue(), i, floatWerte.get(i).intValue()); } } } } Die zweite if-Bedingung soll, auch wenn sie erfüllt ist, nur alle 0.5 sekunden durchgeführt werden, wenn die Zeit aber noch nicht abgelaufen ist soll die Ausführung des Programms weiterlaufen. Bin nicht so der große Experte was Threads anbetrifft, deshalb vermute ich dass es da eine Möglichkeit gibt, ich aber alleine nicht drauf komme. Habe es schon mit einem Timer / TimerTask versucht, allerdings müsste dafür i als final deklariert werden, was in meinem Fall nicht möglich ist. Hat von euch jemand ne Idee wie ich das lösen könnte ??? Viele Grüße, Rainer
  8. Hallo... ich möchte gerne die Farbe eine Linie (standardmäßig in schwarz), sobald die Werte einen bestimmen Maxwert erreichen, ändern. Wenn ich die Linie einfach mit "g.setColor(linienFarbe);" ändere, wird sie für einen kurzen Augenblick rot, danach aber überall wieder schwarz. Gibt es in Java eine Möglichkeit dies zu realisieren? Hier meine aktueller Paint-Methode : public void paintComponent(Graphics g) throws IndexOutOfBoundsException { super.paintComponent(g); if(controller.getAktuellesEkg() != null) { floatWerte = controller.getAktuellesEkg().getEkgWerte(); for(int i = 1; i < floatWerte.size(); i++) { g.drawLine(i-1, floatWerte.get(i-1).intValue(), i, floatWerte.get(i).intValue()); g.setColor(linienFarbe); } } }
  9. Ja genau, so etwas brauche ich. Habs jetzt mal in : 2=Der Patient mit dem Namen {0} wurde geladen. geändert. Die Frage ist jetzt nur noch, wie ich den Parameter ändern kann. Auf die normalen Dinger habe ich bisher so zugegriffen : LogdateiAnzeige.erzeugeLogEintrag(sprache.getOriginalResourceBundle().getString("2"),sprache); Aber mit getString("2", parameter) scheint es nicht zu funktionieren... Viele Grüße, Rainer
  10. Hallo, um ein Projekt zu internationalisieren hab ich eine englische und eine deutsche properties-Datei geschrieben. Gibt es eine Möglichkeit, am Anfang oder am Ende ein, bzw. mehrere Leerzeichen an einen Schlüssel anzuhängen? Hier ein Beispiel : 2=The patient named 3= was loaded. 46= Patient's Data : Viele Grüße, Rainer
  11. Also brauch ich nen ScrollPane, keine Scrollbar...schon mal gut zu wissen :cool::cool: Jetzt aber immer noch die Frage....in diesem Pane soll ein Bild von einem EKG geladen, verändert, gelöscht werden können... Hab mir zwar nen paar Beispiele angeschaut, aber so wirklich will's nicht funktionieren...In dem Pane hab ich's aber schonmal, wenn ich es nach WEST ziehe ist auch nur ein kleiner Teil der Kurve zu sehen...was fehlt jetzt noch damit ich auch die Scrollbalken sehe...? Viele Grüße, Rainer package view; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.Font; import java.awt.ScrollPane; import java.awt.event.AdjustmentEvent; import java.awt.event.AdjustmentListener; import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollBar; import javax.swing.border.Border; public class EkgBildPanel { private static JPanel ekgBildPanel; private ScrollPane sc; public EkgBildPanel(JFrame hauptfenster) { ekgBildPanel = new JPanel(new BorderLayout()); Border ekgBildPanelBorder = BorderFactory.createLineBorder(Color.black); ekgBildPanel.setBorder(ekgBildPanelBorder); Container contentPane = hauptfenster.getContentPane(); contentPane.add(ekgBildPanel); JLabel title = new JLabel(" EKG-Kurve :"); title.setFont(new Font("Dialog", 0, 25)); ekgBildPanel.add(title, BorderLayout.NORTH); sc = new ScrollPane(ScrollPane.SCROLLBARS_AS_NEEDED); ekgBildPanel.add(sc,BorderLayout.CENTER); sc.setVisible(true); sc.getVAdjustable().setUnitIncrement(1); sc.getHAdjustable().setUnitIncrement(1); sc.setSize(100,100); paintEkg(); } // Malt die EKG-Kurve public void paintEkg() { sc.repaint(); sc.add(new EKGview()); } }
  12. Halli Hallo, für ein Projekt muss ich eine EKG-Kurve in einem JPanel darstellen. Im Hauptfenster habe ich ein GridLayout(2,2), wovon ein Panel eben das mit der EKG-Kurve ist. Da diese jedoch länger ist als das Panel muss ich eine Scrollbar implementieren, die allerdings nicht das tut was sie soll. Im Internet habe ich zwar viel Beispiele gefunden, die mich allerdings nicht wirklich weiter gebracht haben. Ich hoffe, dass mir hier jemand weiterhelfen kann, danke im Vorraus, Rainer Hier der Code : package view; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.Font; import java.awt.event.AdjustmentEvent; import java.awt.event.AdjustmentListener; import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollBar; import javax.swing.border.Border; public class EkgBildPanel { private static JPanel ekgBildPanel; public EkgBildPanel(JFrame hauptfenster) { ekgBildPanel = new JPanel(new BorderLayout()); Border ekgBildPanelBorder = BorderFactory.createLineBorder(Color.black); ekgBildPanel.setBorder(ekgBildPanelBorder); Container contentPane = hauptfenster.getContentPane(); contentPane.add(ekgBildPanel); JLabel title = new JLabel(" EKG-Kurve :"); title.setFont(new Font("Dialog", 0, 25)); ekgBildPanel.add(title, BorderLayout.NORTH); paintEkg(); // Scrollbar final JScrollBar scrollbar = new JScrollBar(JScrollBar.HORIZONTAL, 0, 20, 0, 300); scrollbar.setUnitIncrement(2); scrollbar.setBlockIncrement(1); ekgBildPanel.add(scrollbar,BorderLayout.SOUTH); scrollbar.addAdjustmentListener(new AdjustmentListener() { public void adjustmentValueChanged(AdjustmentEvent e) { scrollbar.setValue(scrollbar.getValue()); paintEkg(); }}); } // Malt die EKG-Kurve public void paintEkg() { ekgBildPanel.repaint(); ekgBildPanel.add(new EKGview(),BorderLayout.CENTER); } }
  13. Sehr sehr geil, danke dir ! Funktioniert einwandfrei....dass man dafür echt extra nen Forumspost starten muss...hab ca. 2 Stunden gesucht und nur irgendwat über repaint(), revalidate() etc. gefunden Danke auch für den Link, Grüße, Rainer
  14. Hallo, ich hoffe dass ich hier richtig bin und mir jemand folgende Frage beantworten kann : Ich habe eine GUI (meine erste) geschrieben, die anfangs ein Bild in die Mitte eines Panels setzt. Bei Auswahl des passenden Menüpunktes soll dieses Bild durch ein anderes ersetzt werden, was mir allerdings nicht so recht gelingen mag. Hier mal die wichtigsten Code-Fragmente : JMenuItem patient1 = new JMenuItem("Alfred"); patientLaden.add(patient1); patient1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JLabel bildAlfred = new JLabel(newImageIcon("Daten/PatientenDaten/Bilder/Alfred.jpg")); patientenBildPanel.setPatientenBild(bildAlfred); try {... ------- import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.border.Border; public class PatientenBildPanel { private JPanel patientenBildPanel; private JLabel patientenBild; public PatientenBildPanel(JFrame hauptfenster) { patientenBildPanel = new JPanel(); patientenBildPanel.setLayout(new BorderLayout()); Border patientenBildPanelBorder = BorderFactory.createLineBorder(Color.black); patientenBildPanel.setBorder(patientenBildPanelBorder); Container contentPane = hauptfenster.getContentPane(); contentPane.add(patientenBildPanel); /* * ERSTES PANEL : PATIENTEN-BILD-PANEL (oben links) */ patientenBild = new JLabel(new ImageIcon("Daten/patientenBild.jpg")); patientenBildPanel.add(patientenBild, BorderLayout.CENTER); patientenBildPanel.add(new JLabel(" Patienten-Bild:"),BorderLayout.WEST); // FALLS UM DAS BILD HERUM NOCH ETWAS EINGEFÜGT WERDEN SOLL // patientenBildPanel.add(new JButton("1"), BorderLayout.NORTH); // patientenBildPanel.add(new JButton("2"), BorderLayout.SOUTH); // patientenBildPanel.add(new JButton("3"), BorderLayout.WEST); // patientenBildPanel.add(new JButton("4"), BorderLayout.EAST); System.out.println(getPatientenBild().toString()); } public JLabel getPatientenBild() { return patientenBild; } public void setPatientenBild(JLabel patientenBild) { this.patientenBild = patientenBild; System.out.println(getPatientenBild().toString()); } } Wie kriege ich es nun hin, dass das Bild aktualisiert wird? Ich überprüfe das ganze schon mit toString(), das Datenfeld wird auf jeden Fall geändert, nur das Bild halt nicht neu gezeichnet. Vielen dank, Rainer

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...