Java Überwachungsprogramm für Motoren

Nanotic

Lieutenant
Registriert
Sep. 2010
Beiträge
560
Hallo liebe Community,

ich möchte ein Programm zum Überwachen von 4 Motoren schreiben.

Habe bereits angefangen, jedoch fehlt mir nur eine einzige Sache:
Das darstellen eines roten und gelben Feldes, wenn ein bestimmter Wert erreicht ist.

Habe über die disjunktive Normalform die vereinfachte Form errechnet und benutze diese um 2 Radiobutton gelb bzw. rot hinterlegen zu lassen.

Code:
public void actionPerformed(ActionEvent ae){
    System.out.println("Checkbox 1: "+jCheckBox1.isSelected());
    System.out.println("Checkbox 2: "+jCheckBox2.isSelected());
    System.out.println("Checkbox 3: "+jCheckBox3.isSelected());
    System.out.println("Checkbox 4: "+jCheckBox4.isSelected());
    
    if(ae.getSource()==((jCheckBox3.isSelected()== true &&jCheckBox4.isSelected()==true)||((jCheckBox1.isSelected()==true) &&(jCheckBox4.isSelected()==true))))
    {
      this.jRadioButton1.setBackground(Color.YELLOW);
    }
    if(ae.getSource()==(((jCheckBox1.isSelected()==true) && (jCheckBox2.isSelected()==true) && (jCheckBox4.isSelected()==true))||((jCheckBox1.isSelected()==true) &&( jCheckBox2.isSelected()==true) &&(jCheckBox3.isSelected()==true))||((jCheckBox2.isSelected()==true) &&(jCheckBox3.isSelected()==true) &&(jCheckBox4.isSelected()==true))||((jCheckBox1.isSelected()==true) &&(jCheckBox3.isSelected()==true) &&(jCheckBox4.isSelected()==true))))
    {
      this.jRadioButton1.setBackground(Color.RED);
    } 
    
  }
  // Ende Methoden

Wenn einer der Fälle eintritt, also ich z.B.: M4 und M3 in der jeweiligen Checkbox anklicke, passiert gar nichts. Wieso nicht?!

Wo liegt mein Fehler?

Danke im Voraus!
 
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 18.09.2014
  * @author 
  */

public class Motorlastüberwachung extends JFrame implements ActionListener {
  // Anfang Attribute
  private JLabel jLabel1 = new JLabel();
  private JLabel jLabel2 = new JLabel();
  private JLabel jLabel3 = new JLabel();
  private JLabel jLabel4 = new JLabel();
  private JCheckBox jCheckBox1 = new JCheckBox();
  private JCheckBox jCheckBox2 = new JCheckBox();
  private JCheckBox jCheckBox3 = new JCheckBox();
  private JCheckBox jCheckBox4 = new JCheckBox();
  private JLabel jLabel5 = new JLabel();
  private JLabel jLabel6 = new JLabel();
  private JRadioButton jRadioButton1 = new JRadioButton();
  private JRadioButton jRadioButton2 = new JRadioButton();
  // Ende Attribute
  
  public Motorlastüberwachung(String title) { 
    // Frame-Initialisierung
    super(title);
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    int frameWidth = 450; 
    int frameHeight = 450;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    setResizable(false);
    Container cp = getContentPane();
    cp.setLayout(null);
    // Anfang Komponenten
    
    jLabel1.setBounds(24, 8, 130, 40);
    jLabel1.setText("M1");
    jLabel1.setHorizontalTextPosition(SwingConstants.CENTER);
    jLabel1.setHorizontalAlignment(SwingConstants.CENTER);
    jLabel1.setFont(new Font("Constantia", Font.BOLD, 22));
    this.add(jLabel1);
    
    jLabel2.setBounds(24, 96, 130, 49);
    jLabel2.setText("M2");
    jLabel2.setFont(new Font("Constantia", Font.BOLD, 22));
    jLabel2.setHorizontalTextPosition(SwingConstants.CENTER);
    jLabel2.setHorizontalAlignment(SwingConstants.CENTER);
    this.add(jLabel2);
    
    jLabel3.setBounds(16, 192, 130, 49);
    jLabel3.setText("M3");
    jLabel3.setFont(new Font("Constantia", Font.BOLD, 22));
    jLabel3.setHorizontalAlignment(SwingConstants.CENTER);
    jLabel3.setHorizontalTextPosition(SwingConstants.CENTER);
    this.add(jLabel3);
    
    jLabel4.setBounds(16, 304, 130, 41);
    jLabel4.setText("M4");
    jLabel4.setFont(new Font("Constantia", Font.BOLD, 22));
    jLabel4.setHorizontalAlignment(SwingConstants.CENTER);
    jLabel4.setHorizontalTextPosition(SwingConstants.CENTER);
    this.add(jLabel4);
    
    
    jCheckBox1.setBounds(24, 56, 130, 25);
    jCheckBox1.setText("");
    jCheckBox1.addActionListener(this);
    this.add(jCheckBox1);
    
    jCheckBox2.setBounds(24, 152, 130, 33);
    jCheckBox2.setText("");
    jCheckBox2.addActionListener(this);
    this.add(jCheckBox2);
    
    jCheckBox3.setBounds(16, 250, 130, 40);
    jCheckBox3.setText("");
    jCheckBox3.addActionListener(this);
    this.add(jCheckBox3);
    
    jCheckBox4.setBounds(16, 360, 130, 41);
    jCheckBox4.setText("");
    jCheckBox4.addActionListener(this);
    this.add(jCheckBox4);
    
    jLabel5.setBounds(232, 64, 195, 41);
    jLabel5.setText("Gelbe Kontrollleuchte");
    this.add(jLabel5);
    
    jLabel6.setBounds(224, 208, 211, 33);
    jLabel6.setText("Rote Kontrollleuchte");
    this.add(jLabel6);
    
    jRadioButton1.setBounds(224, 112, 105, 49);
    jRadioButton1.setText("");
    this.add(jRadioButton1);
    
    jRadioButton2.setBounds(224, 248, 129, 57);
    jRadioButton2.setText("");
    this.add(jRadioButton2);
    // Ende Komponenten
    
    setVisible(true);
  } // end of public Motorlastüberwachung
  
  // Anfang Methoden
  public void actionPerformed(ActionEvent ae){
    System.out.println("Checkbox 1: "+jCheckBox1.isSelected());
    System.out.println("Checkbox 2: "+jCheckBox2.isSelected());
    System.out.println("Checkbox 3: "+jCheckBox3.isSelected());
    System.out.println("Checkbox 4: "+jCheckBox4.isSelected());
    
    if(ae.getSource()==((jCheckBox3.isSelected()== true &&jCheckBox4.isSelected()==true)||((jCheckBox1.isSelected()==true) &&(jCheckBox4.isSelected()==true))))
    {
      this.jRadioButton1.setBackground(Color.YELLOW);
    }
    if(ae.getSource()==(((jCheckBox1.isSelected()==true) && (jCheckBox2.isSelected()==true) && (jCheckBox4.isSelected()==true))||((jCheckBox1.isSelected()==true) &&( jCheckBox2.isSelected()==true) &&(jCheckBox3.isSelected()==true))||((jCheckBox2.isSelected()==true) &&(jCheckBox3.isSelected()==true) &&(jCheckBox4.isSelected()==true))||((jCheckBox1.isSelected()==true) &&(jCheckBox3.isSelected()==true) &&(jCheckBox4.isSelected()==true))))
    {
      this.jRadioButton1.setBackground(Color.RED);
    } 
    
  }
  // Ende Methoden
  
  public static void main(String[] args) {
    new Motorlastüberwachung("Motorlastüberwachung");
  } // end of main
  
} // end of class Motorlastüberwachung
 
Es passiert nichts, weil dein Programm in Hintergrund abschmiert. Du versucht ae.getSource() mit einem Booleschen Wert zu vergleichen.

Kleine Anmeckerung: du holst dir zwar das ContentPane, machst aber nichts damit außer das Layout zu setzen.
 
Oh mein Gott, was für ein hilfreicher Post. Du hättest zumindest eine deiner Meinung nach bessere Alternative zu Swing dabeischreiben können.
 
Sorry klar. Hab Aufgrund der Anforderung Windows only gerade mit einer WAF/WPF Anwendung begonnen. XAML und Features wie Data Binding sind einfach unglaublich gut.
 
Das ist ja alles schön und gut, nur wie bekomme ich jetzt den richtigen Vergleich hin?
Das "ae" mit einem neuen Objekt zu vergleichen bekomme ich hin, jedoch hapert es bei 2 bzw in meinem Fall mehreren Objekten.
 
Wie Darlis schon gesagt hat, du vergleichst ein Objekt (in diesem Fall eine Checkbox) mit einem boolschen Wert. Das ist natürlich Quatsch und gibt false zurück. Deshalb wird der RadioButton nicht angemalt.
Lass einfach den Vergleich mit dem Objekt ('ae.getSource()==') weg.

Ausserdem, schreib 'jCheckBox1.isSelected()' anstatt 'jCheckBox1.isSelected()==true'. Ist kürzer und besser lesbar.

Edit: Danke an Darlis für die Korrektur, das dürfte gar nicht kompilieren.
 
Zuletzt bearbeitet:
Elfire schrieb:
Das ist natürlich Quatsch und gibt false zurück.
Das ist ebenso Quatsch, wir sind hier ja nicht bei PHP. So ein Vergleich ist in Java nicht möglich, der Code kann nicht compiliert werden.
 
Zurück
Oben