From 691e909d015900503f61e95e0923c2e78e08a941 Mon Sep 17 00:00:00 2001 From: leo Date: Wed, 11 Nov 2020 10:26:48 +0100 Subject: [PATCH] initial version --- src/wuerfel/Start.java | 49 +++++++ .../controller/StartStopController.java | 46 +++++++ src/wuerfel/controller/WertAdapter.java | 64 +++++++++ src/wuerfel/model/WuerfelModel.java | 88 +++++++++++++ src/wuerfel/view/WuerfelView.form | 74 +++++++++++ src/wuerfel/view/WuerfelView.java | 122 ++++++++++++++++++ 6 files changed, 443 insertions(+) create mode 100644 src/wuerfel/Start.java create mode 100644 src/wuerfel/controller/StartStopController.java create mode 100644 src/wuerfel/controller/WertAdapter.java create mode 100644 src/wuerfel/model/WuerfelModel.java create mode 100644 src/wuerfel/view/WuerfelView.form create mode 100644 src/wuerfel/view/WuerfelView.java diff --git a/src/wuerfel/Start.java b/src/wuerfel/Start.java new file mode 100644 index 0000000..f13f962 --- /dev/null +++ b/src/wuerfel/Start.java @@ -0,0 +1,49 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package wuerfel; + +import javax.swing.JOptionPane; +import javax.swing.UIManager; +import wuerfel.controller.StartStopController; +import wuerfel.controller.WertAdapter; +import wuerfel.model.WuerfelModel; +import wuerfel.view.WuerfelView; + +/** + * + * @author leo + */ +public class Start +{ + public Start() + { + WuerfelView view = new WuerfelView(); + WuerfelModel model = new WuerfelModel(); + StartStopController controller = new StartStopController(view, model); + controller.registerEvents(); + WertAdapter wAdapter = new WertAdapter(view, model); + wAdapter.einschreiben(); + view.setVisible(true); + } + + /** + * @param args the command line arguments + */ + public static void main(String[] args) + { + try + { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + } + catch (Exception ex) + { + JOptionPane.showMessageDialog(null, ex.toString()); + } + + new Start(); + } + +} diff --git a/src/wuerfel/controller/StartStopController.java b/src/wuerfel/controller/StartStopController.java new file mode 100644 index 0000000..735da4e --- /dev/null +++ b/src/wuerfel/controller/StartStopController.java @@ -0,0 +1,46 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package wuerfel.controller; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import wuerfel.model.WuerfelModel; +import wuerfel.view.WuerfelView; + +/** + * + * @author leo + */ +public class StartStopController implements ActionListener +{ + private WuerfelView view; + private WuerfelModel model; + + public StartStopController(WuerfelView view, WuerfelModel model) + { + this.view = view; + this.model = model; + } + + public void registerEvents() + { + view.getBtnStart().addActionListener(this); + view.getBtnStop().addActionListener(this); + } + + @Override + public void actionPerformed(ActionEvent e) + { + if (e.getSource() == view.getBtnStart()) + { + model.start(); + } + else + { + model.stop(); + } + } +} diff --git a/src/wuerfel/controller/WertAdapter.java b/src/wuerfel/controller/WertAdapter.java new file mode 100644 index 0000000..a0f07e8 --- /dev/null +++ b/src/wuerfel/controller/WertAdapter.java @@ -0,0 +1,64 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package wuerfel.controller; + +import java.util.concurrent.Flow; +import java.util.concurrent.Flow.Subscriber; +import java.util.concurrent.Flow.Subscription; +import javax.swing.JOptionPane; +import wuerfel.model.WuerfelModel; +import wuerfel.view.WuerfelView; + +/** + * + * @author leo + */ +public class WertAdapter implements Subscriber +{ + private WuerfelView view; + private WuerfelModel model; + private Subscription subscription; + + public WertAdapter(WuerfelView view, WuerfelModel model) + { + this.view = view; + this.model = model; + } + + public void einschreiben() + { + model.addWertSubscription(this); + } + + @Override + public void onSubscribe(Flow.Subscription subscription) + { + this.subscription = subscription; // wird bei onNext und onError gebraucht + subscription.request(1); // 1 Wert bekommen + } + + @Override + public void onNext(Integer item) + { + String strWert = String.valueOf(item); // Wert in String umwandeln + view.getLblWert().setText(strWert); + + subscription.request(1); // für nächsten Wert anmelden + } + + @Override + public void onError(Throwable throwable) + { + JOptionPane.showMessageDialog(view, throwable.toString()); + } + + @Override + public void onComplete() // Fertig + { + + } + +} diff --git a/src/wuerfel/model/WuerfelModel.java b/src/wuerfel/model/WuerfelModel.java new file mode 100644 index 0000000..480ea10 --- /dev/null +++ b/src/wuerfel/model/WuerfelModel.java @@ -0,0 +1,88 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package wuerfel.model; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Flow.Subscriber; +import java.util.concurrent.SubmissionPublisher; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * + * @author leo + */ +public class WuerfelModel implements Runnable +{ + private int wert; + private volatile boolean laufend; + private SubmissionPublisher iPublisher; + private ExecutorService eService; + + public WuerfelModel() + { + wert = 1; + laufend = false; + iPublisher = new SubmissionPublisher<>(); + eService = Executors.newSingleThreadExecutor(); // ein einziger nebenläufiger Thread + } + + public void addWertSubscription(Subscriber subscriber) + { + iPublisher.subscribe(subscriber); + } + + public void start() + { + laufend = true; + + eService.submit(this); // Thread starten + notifyAll(); + } + + + public void stop() + { + laufend = false; + } + + @Override + public void run() { + + while (laufend) + //while (true) + { + try + { + wert++; + if (wert > 6) + { + wert = 1; + } + Thread.sleep(100); + } + catch (Exception e) + { + System.err.println(e); + } + + //if (laufend) + iPublisher.submit(wert); + } + + while (!laufend) + { + try { + wait(); + } catch (InterruptedException ex) { + Logger.getLogger(WuerfelModel.class.getName()).log(Level.SEVERE, null, ex); + } + } + + + } +} diff --git a/src/wuerfel/view/WuerfelView.form b/src/wuerfel/view/WuerfelView.form new file mode 100644 index 0000000..1eef16c --- /dev/null +++ b/src/wuerfel/view/WuerfelView.form @@ -0,0 +1,74 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/wuerfel/view/WuerfelView.java b/src/wuerfel/view/WuerfelView.java new file mode 100644 index 0000000..b517046 --- /dev/null +++ b/src/wuerfel/view/WuerfelView.java @@ -0,0 +1,122 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package wuerfel.view; + +/** + * + * @author leo + */ +public class WuerfelView extends javax.swing.JFrame { + + /** + * @return the btnStart + */ + public javax.swing.JButton getBtnStart() { + return btnStart; + } + + /** + * @return the btnStop + */ + public javax.swing.JButton getBtnStop() { + return btnStop; + } + + /** + * @return the lblWert + */ + public javax.swing.JLabel getLblWert() { + return lblWert; + } + + /** + * Creates new form WuerfelView + */ + public WuerfelView() { + initComponents(); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + pnlTop = new javax.swing.JPanel(); + btnStart = new javax.swing.JButton(); + btnStop = new javax.swing.JButton(); + pnlMain = new javax.swing.JPanel(); + lblWert = new javax.swing.JLabel(); + + setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); + + btnStart.setText("Start"); + pnlTop.add(btnStart); + + btnStop.setText("Stop"); + pnlTop.add(btnStop); + + getContentPane().add(pnlTop, java.awt.BorderLayout.PAGE_START); + + pnlMain.setLayout(new java.awt.BorderLayout()); + + lblWert.setFont(new java.awt.Font("Tahoma", 0, 48)); // NOI18N + lblWert.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); + lblWert.setText("1"); + pnlMain.add(lblWert, java.awt.BorderLayout.CENTER); + + getContentPane().add(pnlMain, java.awt.BorderLayout.CENTER); + + setSize(new java.awt.Dimension(816, 539)); + setLocationRelativeTo(null); + }// //GEN-END:initComponents + + /** + * @param args the command line arguments + */ + public static void main(String args[]) { + /* Set the Nimbus look and feel */ + // + /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. + * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html + */ + try { + for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { + if ("Nimbus".equals(info.getName())) { + javax.swing.UIManager.setLookAndFeel(info.getClassName()); + break; + } + } + } catch (ClassNotFoundException ex) { + java.util.logging.Logger.getLogger(WuerfelView.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } catch (InstantiationException ex) { + java.util.logging.Logger.getLogger(WuerfelView.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } catch (IllegalAccessException ex) { + java.util.logging.Logger.getLogger(WuerfelView.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } catch (javax.swing.UnsupportedLookAndFeelException ex) { + java.util.logging.Logger.getLogger(WuerfelView.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } + // + + /* Create and display the form */ + java.awt.EventQueue.invokeLater(new Runnable() { + public void run() { + new WuerfelView().setVisible(true); + } + }); + } + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton btnStart; + private javax.swing.JButton btnStop; + private javax.swing.JLabel lblWert; + private javax.swing.JPanel pnlMain; + private javax.swing.JPanel pnlTop; + // End of variables declaration//GEN-END:variables +}