Java Swing Probleme bei Erstellen einer Programm GUI

DeusExMachina schrieb:
Ich habe ja eine Liste und möchte nur aber nur maximal zwei Listen einträge auswählen lassen (ich meine im Swing Buch gelesen zu haben das geht aber finde des aber grad nich wieder und das buch ist verdammt dick)

Etwas mehr Mühe könntest Du Dir schon machen!


DeusExMachina schrieb:
Ich würde gern und das ist dann auch der Knackpunkt des ganzen das sohand haben das:

- Maximal 2 zahlen in der liste gewählt werden dürfen
- Ihre Reinfolge fest legt ob sie z1 oder z2 sind
- wenn eine neue Zahl gewählt wird z2 zu z1 wird (was ich denke einfach über eine If abfrage realisieren zu lassen sollte )

Geht alles mit ListSelectionListener.
 
Etwas mehr Mühe könntest Du Dir schon machen!

Stimmt schon und mach ich ja auch.

Ich hab nur meine Schwierigkeiten damit.


Geht alles mit ListSelectionListener.

mag sein aber ich raff es nicht.

Im moment sieht das ja bei mir so aus:

Code:
	private JPanel buildListPanel() {
	  JPanel listPanel = new JPanel();
	  listModel = new DefaultListModel();
	  JList list = new JList(listModel);
	  JScrollPane scrollPane = new JScrollPane(list);
	  scrollPane.setPreferredSize(new Dimension(240, ((2 * MAIN_HEIGHT / 3) - 10)));
	  listPanel.add(scrollPane);
	  listPanel.setPreferredSize(new Dimension(250, (2 * MAIN_HEIGHT / 3)));

	  return listPanel;
	}

Und ich hab das verlinkte und das Buch von O´Reilly durch gearbeitet bin aber kein stück schlauer geworden.
Nen Stuppser in die Richtige Richtung wäre mir sehr willkommen im Moment.
 
Hab ich dir doch auf der Seite 1 ganz unten geschrieben, wo klemmt es den jetzt genau?!


Erstmal machst du das mit der JList richtig, dass der Benutzer mehr als 1 selectieren kann und die auch nicht nebeneinander sein müssen.

Dann implementierst du noch den Listener(ListSelectionListener) in deine Klasse. Dann wird Eclispe gleich sich beschweren, dass du die valueChanged-Methode implemtieren musst.

Die wird dann ca. so aussehen:
Code:
	@Override
	public void valueChanged(ListSelectionEvent e) {
		if(!e.getValueIsAdjusting()){

                         JList list = (JList)e.getSource();
 
			Object[] selectedValues =  list.getSelectedValues();

		}
		
	}

Die ist natürlich nicht vollständig. In der Arbeitest du ab, dass nur 2 ausgewählt sein können und wie die weiter behandelt werden sollen.

Wenn 2 eingelesen sind, speicherst du die, ... kommt ein drittes dazu, fliegt das erste raus ... usw. und setzt bei der JList die Werte auf selected. Das ist eigentlich nur Fleißarbeit der Teil und etwas nachdenken.

Die Methode valueChanged wird immer aufgerufen, wenn der Benutzer etwas anderes selektiert oder die Selektion ändert.

Vergiss auch nicht, dass du die JList beim Listener anmelden musst.
Code:
list.addListSelectionListener(this);
Solltest du auch einfügen.
 
Zuletzt bearbeitet:
DeusExMachina schrieb:
"Etwas mehr Mühe könntest Du Dir schon machen!"

Stimmt schon und mach ich ja auch.

Ich hab nur meine Schwierigkeiten damit.

mag sein aber ich raff es nicht.

Und ich hab das verlinkte und das Buch von O´Reilly durch gearbeitet bin aber kein stück schlauer geworden.
Nen Stuppser in die Richtige Richtung wäre mir sehr willkommen im Moment.

Du vermittelst nicht den Eindruck, als ob Du wirklich an dem genannten Problem arbeitest. Der Listener ist in dem O'Reilly Buch sicher erklärt. Du schreibst sogar, dass dort die Lösung steht. Es gibt auch sonst jede Menge Beispiele, die man sich anschauen kann. Schwierigkeiten sind OK. Daraus lernt man.

Code, der Deine Versuche illustriert, lieferst Du nicht. Den Schubser hast Du bekommen. Sorry, aber ich sehe hier das Bemühen nicht und werde keine vollständige Lösung posten.
 
Du vermittelst nicht den Eindruck, als ob Du wirklich an dem genannten Problem arbeitest.

Wenn dem so ist, entschuldige ich mich dafür ich arbeite durch aus an dem Problem nur haben mir weder Java in a Nutshell noch Java Swing weiter helfen können beide Bücher erklären aber das was ich brauche ist 1. nicht enthalten (oder so verschachtelt versteckt das ich es nicht finde) und 2. was schlimmer ist für mich nur teilweise verständlich.

Code, der Deine Versuche illustriert, lieferst Du nicht

Stimmt da ich das ganze Prinzip Jlist und Selection stumpf nicht raffe.


und werde keine vollständige Lösung posten.

Das erwartet ja auch niemand.

_____________________________


Ich muss aber zu geben ich raff es nicht, ich verstehe diesen Listen kram nicht, ich bin kurz davor was zu zerschlagen aber das hilft auch nicht.
Also lasse ich es gut sein und mir noch mal erklären
 
DeusExMachina schrieb:
Wenn dem so ist, entschuldige ich mich dafür ich arbeite durch aus an dem Problem nur haben mir weder Java in a Nutshell noch Java Swing weiter helfen können beide Bücher erklären aber das was ich brauche ist 1. nicht enthalten (oder so verschachtelt versteckt das ich es nicht finde) und 2. was schlimmer ist für mich nur teilweise verständlich.

Swing ist ein mächtiges Framework. Hier alle Feinheiten zu verstehen, dauert seine Zeit. Ein begrenztes Problem, wie in Deiner Aufgabe, sollte sich aber auch mit recht begrenzten Kenntnissen lösen lassen - wenn man sich mit den relevanten Grundlagen beschäftigt hat. Darum scheinst Du Dich drücken zu wollen.

Klar liefern die Bücher nicht die unmittelbare Antwort, aber sie sollten Dich in die Lage versetzen, das Problem durch Transfer lösen zu können. Dazu muss man auch mal ein paar Beispielprogramme durcharbeiten und versuchen zu verstehen, wie so eine Liste bzw. Swing arbeitet. Danach setzt man sich hin und versucht das Wissen auf das Problem anzuwenden. Über den Code kannst Du uns dann wieder informieren. Und nicht "ich versteh's nicht". Sorry, aber das ist zu wenig.


DeusExMachina schrieb:
Stimmt da ich das ganze Prinzip Jlist und Selection stumpf nicht raffe.

Wenn Du es nicht verstehst, wirst Du auch die Lösung nicht verstehen und Dir ist nicht geholfen. Was man schon daran sieht, dass eine beinahe vollständige Lösung bereits gepostet wurde, und Du darauf überhaupt nicht eingehst, sondern lieber versuchst, jemanden dazu zu bringen, noch weitere Details zu liefern.

DeusExMachina schrieb:
Ich muss aber zu geben ich raff es nicht, ich verstehe diesen Listen kram nicht, ich bin kurz davor was zu zerschlagen aber das hilft auch nicht.
Also lasse ich es gut sein und mir noch mal erklären

Erklärungen hat ein Poster Dir schon mehr als ausreichend gegeben. Wenn Du Dich damit auseinander setzen würdest bzw. Du Dir fertige Beispiele anschaust, diese modifizierst und lernst zu verstehen, wärst Du irgendwann in der Lage, Dein Problem zu lösen. Und darum geht es bei Übungen.
 
Ich habe meinen Verständnis Fehler gefunden und die Aufgabe lösen können.

(Zum einen war die aufgabenstellung deutlich weniger Komplex als ich sie verstanden hatte und zum anderen hatte ich die Funktion des ListSelectionEvent völlig falsch verstanden.

Ich bedanke mich noch einmal bei allen die mir geholfen haben und auch bei denen die mir mit durchaus angebrachten drastischen Worten den nötigen Tritt versetzt haben (machmal brauch man das)

Der Fertige Code (der ohne eure Hilfe bestimmt nicht so entstanden wäre) sieht nun so aus (Schade das es in diesem Forum keine Spoilerfunktion gibt um solche Blöcke einzuklappen):

Code:
package aufgabe3;

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import javax.swing.event.*;

import aufgabe3.Complex;
import aufgabe3.CoordinateSystem;

public class MainMenu implements ActionListener, ListSelectionListener {
	//Parameter
	private static final int MAIN_WIDTH = 800;
	private static final int MAIN_HEIGHT = 600;
	//Dateimenu
	private JFileChooser fileMenu = new JFileChooser();
	//Listen 
	private DefaultListModel listModel = new DefaultListModel();
	private JList listOfNumbers = new JList(listModel);
	//Textfields
	private JTextField realTextField = new JTextField(10);
	private JTextField imagTextField = new JTextField(10);
	//Paintit
	private CoordinateSystem cs = new CoordinateSystem(listModel);
	//Label
	private JLabel labelSumme = new JLabel("Summe: Kein Wert selectiert");
	private JLabel labelProdukt = new JLabel("Produkt: Kein Wert selectiert");

	public static void main(final String... rArgs) {
		new MainMenu().startup();
	}

	private JPanel buildMainPanel() {
		JPanel mainPanel = new JPanel();
		mainPanel.setLayout(new BorderLayout());
		mainPanel.add(buildContentPane(), BorderLayout.CENTER);
		mainPanel.add(buildSidebarPane(), BorderLayout.EAST);

		return mainPanel;
	}

	private JComponent buildContentPane() {
		JPanel contentPane = new JPanel();
		contentPane.setLayout(new BorderLayout());
		contentPane.add(buildGraphicPanel(), BorderLayout.CENTER);
		contentPane.add(buildResultPanel(), BorderLayout.SOUTH);

		return contentPane;
	}

	private JComponent buildSidebarPane() {
		JPanel sidebarPane = new JPanel();
		sidebarPane.setLayout(new BorderLayout());
		sidebarPane.add(buildListPanel(), BorderLayout.NORTH);
		sidebarPane.add(buildControlPanel(), BorderLayout.SOUTH);

		return sidebarPane;
	}

	/** Build listPanel
	 * 
	 * @return listPanel
	 */
	private JPanel buildListPanel() {
		//Erstellen des Panels
		JPanel listPanel = new JPanel();
				
		//Festlegen des Design Aufbaus
		JScrollPane scrollPane = new JScrollPane(listOfNumbers);
		scrollPane.setPreferredSize(new Dimension(240, ((2 * MAIN_HEIGHT / 3) - 10)));
		listPanel.add(scrollPane);
		listPanel.setPreferredSize(new Dimension(250, (2 * MAIN_HEIGHT / 3)));
		listOfNumbers.addListSelectionListener(this);

		return listPanel;
	}

	/**Eingabe und Steuerfeld
	 * 
	 * @return ControlPanel
	 */
	private JPanel buildControlPanel() {
		JPanel controlPanel = new JPanel(new GridBagLayout());
		GridBagConstraints gridBagConstraints = new GridBagConstraints();

		// Erstellen der Buttons und ihrer Funktion
		//Load Button
		JButton loadButton = new JButton("Load");	// Erstellen der Button Variablen und initialisieren der Instanz des Buttons
		loadButton.setToolTipText("Liste Laden");	// Erzeugen des Tooltips
		loadButton.addActionListener(this);			// Anmelden dieser Instanz des Button beim für diese Instanz gültigem ActionListener
		loadButton.setActionCommand("Load");		// Erzeugen der ActionListener Variablen
		loadButton.setMnemonic('o');				// Erzeugen und Definieren des Hotkey
		
		//Save Button
		JButton saveButton = new JButton("Save");
		saveButton.setToolTipText("Liste Speichern");
		saveButton.addActionListener(this);
		saveButton.setActionCommand("Save");
		saveButton.setMnemonic('a');
		
		//Eingabe Felder
		controlPanel.add(realTextField);
		JLabel label = new JLabel("+ j *");
		controlPanel.add(imagTextField);
		
		//Add Button
		JButton addButton = new JButton("Add");
		addButton.setToolTipText("Eingegebene Zahl hinzufügen");
		addButton.addActionListener(this);
		addButton.setActionCommand("Add");
		addButton.setMnemonic('d');
		
		//AddRandom Button
		JButton addRandomButton = new JButton("AddRandom");
		addRandomButton.setToolTipText("Eine Zufällige Zahl hinzufügen");
		addRandomButton.addActionListener(this);
		addRandomButton.setActionCommand("AddRandom");
		addRandomButton.setMnemonic('R');
		
		//Delete Button
		JButton deleteButton = new JButton("Delete");
		deleteButton.setToolTipText("Delete selected");
		deleteButton.addActionListener(this);
		deleteButton.setActionCommand("Del");
		
		//Delete All Button
		JButton deleteAllButton = new JButton("Delete All");
		deleteAllButton.setToolTipText("Clear List");
		deleteAllButton.addActionListener(this);
		deleteAllButton.setActionCommand("DelAll");

		// Textfeld für die Eingabe des Realanteils
		gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
		gridBagConstraints.gridwidth = 1;
		gridBagConstraints.gridheight = 1;
		gridBagConstraints.gridx = 0;
		gridBagConstraints.gridy = 0;
		controlPanel.add(realTextField, gridBagConstraints);

		// Label für J *
		gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
		gridBagConstraints.gridwidth = 1;
		gridBagConstraints.gridx = 1;
		gridBagConstraints.gridy = 0;
		controlPanel.add(label, gridBagConstraints);

		// Textfeld für die Eingabe des Imaginäranteils
		gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
		gridBagConstraints.gridwidth = 1;
		gridBagConstraints.gridx = 3;
		gridBagConstraints.gridy = 0;		
		controlPanel.add(imagTextField, gridBagConstraints);

		// Der Addbutton
		gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
		gridBagConstraints.gridwidth = 2;
		gridBagConstraints.gridx = 0;
		gridBagConstraints.gridy = 1;
		controlPanel.add(addButton, gridBagConstraints);

		// Addrandom Button
		gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
		gridBagConstraints.gridwidth = 2;
		gridBagConstraints.gridx = 2;
		gridBagConstraints.gridy = 1;
		controlPanel.add(addRandomButton, gridBagConstraints);

		// Delete selected Button
		gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
		gridBagConstraints.gridwidth = 2;
		gridBagConstraints.gridx = 0;
		gridBagConstraints.gridy = 2;
		controlPanel.add(deleteButton, gridBagConstraints);

		// Clear List Button
		gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
		gridBagConstraints.gridwidth = 2;
		gridBagConstraints.gridx = 2;
		gridBagConstraints.gridy = 2;
		controlPanel.add(deleteAllButton, gridBagConstraints);

		// Load
		gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
		gridBagConstraints.gridwidth = 2;
		gridBagConstraints.gridx = 0;
		gridBagConstraints.gridy = 3;
		controlPanel.add(loadButton, gridBagConstraints);

		// Save
		gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
		gridBagConstraints.gridwidth = 2;
		gridBagConstraints.gridx = 3;
		gridBagConstraints.gridy = 3;
		controlPanel.add(saveButton, gridBagConstraints);

		controlPanel.setPreferredSize(new Dimension(250, 100));
		return controlPanel;
	}

	/**Anzeige Bereich der Ergebnisse 
	 * 
	 * @return graphicPanel
	 */
	private JComponent buildGraphicPanel() {
		JComponent graphicPanel = new JPanel();
		graphicPanel.setPreferredSize(new Dimension(MAIN_HEIGHT, MAIN_WIDTH));
		graphicPanel.add(cs);
//		graphicPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2));
		return graphicPanel;
//		return cs;
	}

	/**Anzeige Bereich der Ergebnisse
	 * 
	 * @return resultPanel
	 */
	private JComponent buildResultPanel() {
		JComponent resultPanel = new JPanel(new GridLayout(1, 1, 5, 0));
		resultPanel.add(labelSumme);
		resultPanel.add(labelProdukt);
		resultPanel.setPreferredSize(new Dimension(MAIN_WIDTH, 50));

		return resultPanel;
	}

	/**Erstellen der Menueleiste
	 * 
	 * @return menuBar
	 */
	private JMenuBar createMenuBar() {
		JMenuBar menuBar = new JMenuBar();
		JMenu fileMenu = new JMenu("File");
		fileMenu.setMnemonic('F');
		JMenuItem load = new JMenuItem("Load");
		JMenuItem save = new JMenuItem("Save");
		JMenuItem exit = new JMenuItem("Exit");

		menuBar.add(fileMenu);
		fileMenu.add(load);
		load.addActionListener(this);
		load.setActionCommand("Load");
		load.setMnemonic('L');
		fileMenu.add(save);
		save.addActionListener(this);
		save.setActionCommand("Save");
		save.setMnemonic('S');
		fileMenu.addSeparator();
		fileMenu.add(exit);
		exit.addActionListener(this);
		exit.setActionCommand("Exit");
		exit.setMnemonic('E');

		return menuBar;
	}

	private void startup() {
		JFrame frame = new JFrame("Complex Solutions");
		frame.setResizable(false);
		frame.setJMenuBar(createMenuBar());
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(MAIN_WIDTH, MAIN_HEIGHT);

		frame.add(buildMainPanel());
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
		
		fileMenu.setFileSelectionMode(JFileChooser.FILES_ONLY);
		cs.setSelectedIndicesArray(listOfNumbers.getSelectedIndices());
	}

	@Override
	public void valueChanged(ListSelectionEvent e) {
		calculator();
		cs.setSelectedIndicesArray(listOfNumbers.getSelectedIndices());
		cs.repaint();
		}

	@Override
	public void actionPerformed(ActionEvent arg) {
		if ("Load".equals(arg.getActionCommand()))
			deserialize();
		else if ("Save".equals(arg.getActionCommand()))
			serialize();
		else if ("Add".equals(arg.getActionCommand()))
			addNumber();
		else if ("AddRandom".equals(arg.getActionCommand()))
			addRandomNumber();
		else if ("Del".equals(arg.getActionCommand()))
			deleteNumbers();
		else if ("DelAll".equals(arg.getActionCommand()))
			deleteAllNumbers();
		else if ("Exit".equals(arg.getActionCommand()))
			System.exit(0);
	}

	private void addNumber() {
		try {
			double real = Double.valueOf(realTextField.getText());
			double imag = Double.valueOf(imagTextField.getText());
			Complex newComplexNumber = new Complex(real, imag);
			
			if (listModel.contains(newComplexNumber) == false) {
				listModel.addElement(newComplexNumber);
				cs.setSelectedIndicesArray(listOfNumbers.getSelectedIndices());
				cs.repaint();

			} else {
				JOptionPane.showMessageDialog(null,
						"You can't enter the same number twice", "ERROR!",
						JOptionPane.INFORMATION_MESSAGE);
			}
		} catch (NumberFormatException e) {
			JOptionPane.showMessageDialog(null,
					"You entered an invalid number", "ERROR!",
					JOptionPane.INFORMATION_MESSAGE);
		}
	}

	private void addRandomNumber(){
		Complex newComplexNumber;
		
		do{
			newComplexNumber= new Complex(Math.random() * 100 - 50, Math.random() * 100 - 50);
		}while (listModel.contains(newComplexNumber) == true);
			listModel.addElement(newComplexNumber);
			cs.setSelectedIndicesArray(listOfNumbers.getSelectedIndices());
			cs.repaint();
	}
	
	private void deleteNumbers(){
		int[] toRemove = listOfNumbers.getSelectedIndices();
		for(int index = toRemove.length - 1; index >= 0; index--){
			listModel.remove(toRemove[index]);
		}
	}

	private void deleteAllNumbers(){
		listModel.removeAllElements();
	}
	
	private void calculator(){
		int[] toCalc = listOfNumbers.getSelectedIndices();
		
		if (toCalc.length > 0){
			Complex sum = new Complex(0,0);
			Complex prod = new Complex(1,0);

			for (int index : toCalc){
				sum.add((Complex) listModel.get(index));
				prod.mul((Complex) listModel.get(index));
			}
			labelSumme.setText("Summe:" + sum);
			labelProdukt.setText("Product: " + prod);
		} else {
			labelSumme.setText("Summe: Kein Wert selectiert");
			labelProdukt.setText("Product:  Kein Wert selectiert");
		}
	}
	



	private void serialize(){
		FileOutputStream fs;
		
		int dialogReturn = fileMenu.showSaveDialog(null);
		if(dialogReturn == JFileChooser.APPROVE_OPTION){
			try {
				fs = new FileOutputStream(fileMenu.getSelectedFile());
				ObjectOutputStream os = new ObjectOutputStream(fs);
				os.writeObject(listModel);		
			} catch (IOException e) {
				JOptionPane.showMessageDialog(null, "An I/O-Exception occured", "ERROR!", JOptionPane.INFORMATION_MESSAGE);
			}
		}
	}
	
	private void deserialize(){
		FileInputStream fs;
		
		int dialogReturn = fileMenu.showOpenDialog(null);
		if(dialogReturn == JFileChooser.APPROVE_OPTION){
			try {
				fs = new FileInputStream(fileMenu.getSelectedFile());
				ObjectInputStream os = new ObjectInputStream(fs);
				listModel = (DefaultListModel) os.readObject();
				listOfNumbers.setModel(listModel);
				cs.setListModel(listModel);
//				cs.setSelectedIndicesArray(listOfNumbers.getSelectedIndices());
				cs.repaint();
			}catch (IOException e) {
				JOptionPane.showMessageDialog(null, "An I/O-Exception occured\nThe File you selected is invalid, doesn't exist or you lack permisson to read it", "Error", JOptionPane.INFORMATION_MESSAGE);
			}catch (ClassNotFoundException e) {
				JOptionPane.showMessageDialog(null, "ERROR", "Error", JOptionPane.INFORMATION_MESSAGE);
			}
		}
	}
	
	
//Ende	
}

Zusätzlich benötigt werden:
Code:
	package aufgabe3;

	import java.awt.Color;
	import java.awt.Dimension;
	import java.awt.Graphics;
	import javax.swing.BorderFactory;
	import javax.swing.DefaultListModel;
	import javax.swing.JPanel;



public class CoordinateSystem extends JPanel {
		/**
		 * 
		 */
		private static final long serialVersionUID = 1L;
		private final int maxSize = 475;
		private DefaultListModel listModel;
		private int[] selectedIndices;
		
		public CoordinateSystem(DefaultListModel listModel){
			this.listModel = listModel;
			
			setBorder(BorderFactory.createLineBorder(Color.BLACK));
		}
		
		public Dimension getPreferredSize() {
			return new Dimension(maxSize, maxSize);
		}
		
		public void paintComponent(Graphics g) {
			super.paintComponent(g);
			
			g.setColor(Color.BLACK);
			g.drawLine(maxSize/2, 0, maxSize/2, maxSize);
			g.drawLine(0, maxSize/2, maxSize, maxSize/2);

			
			double factor = maxSize / 2 / findMax();
			
			g.setColor(Color.GREEN);
			for (int i = 0; i < listModel.size(); i++){
				Complex z = (Complex) listModel.get(i);
				g.drawLine(maxSize/2, maxSize/2, maxSize/2 + (int)(z.getReal() * factor), maxSize/2 - (int)(z.getImag() * factor));
			}
			
			g.setColor(Color.BLUE);
			for (int index : selectedIndices){
				Complex number = (Complex) listModel.get(index);
				g.drawLine(maxSize/2, maxSize/2, maxSize/2 + (int)(number.getReal() * factor), maxSize/2 - (int)(number.getImag() * factor));
			}

		}
		
		public void setListModel(DefaultListModel listModel){
			this.listModel = listModel;
		}
		
		public void setSelectedIndicesArray(int[] indices){
			selectedIndices = indices;
		}
		
		private double findMax(){
			double max = 0;
			
			for (int i = 0; i < listModel.size(); i++){
				Complex z = (Complex) listModel.get(i);
				max = Math.max(max, Math.max(Math.abs(z.getReal()), Math.abs(z.getImag())));
			}

			return max;
		}
		

	}

und

Code:
package aufgabe3;

import java.io.Serializable;
import java.text.DecimalFormat;

/**
 * Class Complex
 * 
 * Klasse zur Repasentation von Komplexen Zahlen. Sowie Methoden zur Berechenung Komplexer Zahlen.
 * 
 * @author arno & nym
 * 
 * @version 1.0
 */
public class Complex implements Serializable{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private double real;
	private double imag;
	
	// Standardkonstruktor
	
	public Complex(){
		this(0.0, 0.0);
	}

	public Complex (double real, double imag){
	
		this.real = real;
		this.imag = imag;
		
	}
	
/**
* getReal
* 
* Getter Methode für den Realwert
* 
* @return Realwert der komplexen Zahl
*/
	
public double getReal() {
	return real;

}
/**
 * getImag
 * 
 * Getter Methode für den Imaginärwert
 * 
 * @return Imaginärwert der komplexen Zahl
 */

public double getImag() {
	return imag;
}

//Mathematische Operatoren 

/**
 * Complex add
 * 
 * Addition zweier Komplexer Zahlen fuer die gilt:
 * 
 * z1 + z2 = (a1 + a2) + (b1 + b2)*j
 * 
 * @param z  erster Summand in Form einer Komplexen Zahl
 * @param z.(*)  z.(*) ist die Darstellung des Aufrufes. * Steht fuer den zweiten Summand in Form einer komplexen Zahl
 * @return z (Wert der Summe, es ist zu beachten das z hierbei veraendert wird)
 */
public Complex add(Complex z){
	  this.real = this.real + z.real;
	  this.imag = this.imag + z.imag;
	  return this;
	}

/**
 * Complex sub
 * 
 * Subtraktion zweier Komplexer Zahlen fuer die gilt:
 * 
 * z1 - z2 = (a1 - a2) + (b1 - b2)*j
 * 
 * @param z  Minuend in Form einer Komplexen Zahl
 * @param z.(*)  z.(*) ist die Darstellung des Aufrufes. * Steht fuer den Subtrahend in Form einer komplexen Zahl
 * @return z (Wert der Differenz, es ist zu beachten das z hierbei veraendert wird)
 */
public Complex sub(Complex z) {
	  this.real = this.real - z.real;
	  this.imag = this.imag - z.imag;
	  return this;
	}

/**
 * Complex mul
 * 
 * Multiplikation zweier Komplexer Zahlen fuer die gilt:
 * 
 * z1 * z2 = (a1 * a2 - b1 * b2) + (a1 * b2 + b1 * a2) * j 
 * 
 * @param z  Multiplikator in Form einer Komplexen Zahl
 * @param z.(*)  z.(*) ist die Darstellung des Aufrufes. * Steht fuer den Multiplikand in Form einer komplexen Zahl
 * @return z (Wert des Produktes, es ist zu beachten das z hierbei veraendert wird)
 */
public Complex mul(Complex z) {
	  double _real = this.real * z.real - this.imag * z.imag;
	  double _imag = this.real * z.imag + z.real * this.imag;
	  this.real = _real;
	  this.imag = _imag;
	  return this;
	}
/**
 * Complex div
 * 
 * Division zweier Komplexer Zahlen fuer die gilt:
 * 
 * z1 / z2 = ((a1 * a2 - b1 * b2) / ( a2^2 + b2^2 )) + ((a1 * b2 + b1 * a2) / ( a2^2 + b2^2 ) * j 
 * 
 * @param z  Dividend in Form einer Komplexen Zahl
 * @param z.(*)  z.(*) ist die Darstellung des Aufrufes. * Steht fuer den Divisor in Form einer komplexen Zahl
 * @return z (Wert des Quotienten, es ist zu beachten das z hierbei veraendert wird)
 */
public Complex div(Complex z) {
	  double d, d1, d2;
	  d = z.real * z.real + z.imag * z.imag;
	  if (d == 0) {
	    this.real = 0;
	    this.imag = 0;
	  }
	  else {
	    d1 = this.real * z.real + this.imag * z.imag;
	    d2 = this.imag * z.real - this.real * z.imag;
	    this.real = d1 / d;
	    this.imag = d2 / d;
	  }
	  return this;
	}

 //Ab hier new instance Methoden
  
/**
 * Complex add
 * 
 * Addition zweier Komplexer Zahlen fuer die gilt:
 * 
 * z1 + z2 = (a1 + a2) + (b1 + b2)*j
 * 
 * @param z1 erster Summand
 * @param z2 zweiter Summand
 * @return Rueckgabe der Summe als Ergebnis der Addition von zwei komplexen Zahlen, als neues Objekt. Die Eingabewerte bleiben unveraendert.
 */  
	public static Complex add(Complex z1, Complex z2){
	  return new Complex(z1.real + z2.real, z1.imag + z2.imag);
	}

/**
 * Complex sub
 * 
* Subtraktion zweier Komplexer Zahlen fuer die gilt:
* 
* z1 - z2 = (a1 - a2) + (b1 - b2)*j
* 
 * @param z1 	Minuend
 * @param z2 	Subtrahend
 * @return 		Rueckgabe des Wertes der Differenz von zwei komplexen Zahlen, als neues Objekt. Die Eingabewerte bleiben unveraendert.
*/
	public static Complex sub(Complex z1, Complex z2) {
	  return new Complex(z1.real - z2.real, z1.imag - z2.imag);
	}

/**
 * Complex mul
 * 
* Multiplikation zweier Komplexer Zahlen für die gilt:
* 
* z1 * z2 = (a1 * a2 - b1 * b2) + (a1 * b2 + b1 * a2) * j 
* 
 * @param z1 Erster Faktor, Multiplikator
 * @param z2 Zweiter Faktor, Multiplikand
 * @return Rückgabe des Produktes als Ergebnis der Multiplikation von zwei komplexen Zahlen, als neues Objekt. Die Eingabewerte bleiben unverändert.
*/
	public static Complex mul(Complex z1, Complex z2) {
	  return new Complex(z1.real * z2.real - z1.imag * z2.imag, z1.real * z2.imag + z2.real * z1.imag);
	}

/**
 * Complex div
 * 
* Division zweier Komplexer Zahlen für die gilt:
* 
* z1 / z2 = ((a1 * a2 - b1 * b2) / ( a2^2 + b2^2 )) + ((a1 * b2 + b1 * a2) / ( a2^2 + b2^2 ) * j 
* 
 * @param z1 Dividend oder Zaehler
 * @param z2 Divisor oder Teiler/Nenner
 * @return Rueckgabe Wert des Quotienten als Ergebnis der Division von zwei komplexen Zahlen, als neues Objekt. Die Eingabewerte bleiben unveraendert.
*/	
	public static Complex div(Complex z1, Complex z2) {
	  double d, d1, d2;
	  d = z2.real * z2.real + z2.imag * z2.imag;
	  if (d == 0)
	    return new Complex(0, 0);

	  d1 = z1.real * z2.real + z1.imag * z2.imag;
	  d2 = z1.imag * z2.real - z1.real * z2.imag;
	  return new Complex(d1 / d, d2 / d);
	}

/**
 * Berechnen des Betrages einer Komplexen Zahl
 * @return Der Betrag einer Komplexen Zahl fuer den gilt: " Wurzel von (a * a + b * b ) "
 */
	public double getAbs() {
	  return Math.sqrt(real * real + imag * imag);
	}
	

/**
 * Berechnen des Phasenwinkels
 * @return phase (als Variable des Phasenwinkels)
 */
	public double getPhase(){
		double phase;
		
		phase = Math.atan2(imag, real);
	
		if (phase < 0)
			phase = 2 * Math.PI + phase;
		return phase;
	}
	
/**
 * Methode um eine Komplexezahl als ausgebbaren String darzustellen
 * @return String mit den Ausgabewerten
 */
	@Override public String toString(){
		
		DecimalFormat df = new DecimalFormat("#0.0000");
		
		if (imag < 0)
			return String.format("(" + df.format(real) + " - " + df.format((Math.abs(imag))) + "*j" + ")");
		else
			return String.format("(" + df.format(real) + " + " + df.format(imag) + "*j" + ")");
	}

/**
 * Automatisch Generierte equals Funktion
 * 
 * @param Object obj
 * 
 * @return true
 * @return false
 * 
 */
	@Override public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Complex other = (Complex) obj;
		if (Double.doubleToLongBits(imag) != Double
				.doubleToLongBits(other.imag))
			return false;
		if (Double.doubleToLongBits(real) != Double
				.doubleToLongBits(other.real))
			return false;
		return true;
	}
		
	
}
 
Zurück
Oben