Graphische Oberfläche

MariusMeier

Mitglied
Hallo zusammen

Ich wollte mich mal erkundigen wegen folgendem Problem. Als Projekt in unserer Schule müssen wir eine Filtersoftware (Widerstände, Kondensatoren, OPAMPs) erstellen bis zur 20. Ordnung. 2 Ordnungen ergeben 1 Biquad, also ingesamt 10 Biquads. So ein Biquad besitzt einen Operationsverstärker, Widerstände und Kondensatoren.

Nun Zum eigentlichen Teil: Ich will nun eine graphische drag and drop Oberfläche erstellen, in der ich die verschiedenen Filtertypen graphisch miteinander verbinden kann. (A la Pspice, ist ein Elektronicworkbench). Jedoch die Verbindungen sind wirklich nur graphisch und müssen nichts tun. Jedoch will ich nun über die graphische Oberfläche die Werte der einzelnen Widerstände und Kondensatoren verändern können (Jeden Widerstand und Kondensator des Filters muss man ändern können!)

Die Widerstände und Kondensatoren will kann ich ja als Image auf die graphische Oberfläche zeichnen. Wenn ich das Bild doppelklicke sollte in Textfeld erscheinen, indem ich den Wert der Komponente ändern kann.

Mögliche Lösungsansätze:Vielleicht über ein Canvas die einzelnen Componenten erstellen?

Oder wie soll man das ganze angehen? Ist das zu schwierig?

MFG Marius Meier
 
Das kommt ganz drauf an wie gut du Java kannst.

Musst du mal schauen ob ein Canvas oder direkt ein Button besser für dich geeignet ist. Wenn du klicken willst könnte der Button besser geeignet sein.

Drag and Drop ist auf jeden Fall nicht ganz ohne...
 
Also eigentlich muss ich ja im Prinzip "nur" die einzelnen Komponenten (Kondensator und Widerstand) definieren, welche ich dann einfach in die Zeichnungsumgebung (JPanel) zeichnen kann..... jedoch wie setzte ich auf die einzelnen selbsterstellten Komponenten einen Eventhandler, der dann ein Textfeld aufruft?

MFG Marius Meier
 
Hallo,

wenn es echte Komponenten sind (mind. Ableitungen von awt.Component) aber
ohne weitere Funktion (Button oder JButton) ist es Dir möglich einen MouseListener
zu verwenden um Mausklicks zu registrieren.

Gruß JAdix
 
Also ich habe noch nicht ganz durchblickt wie ich das ganze realisiere, aber sollte ich jetzt mit Canvas oder JComponent arbeiten um selbstdefinierte Komponenten zu erstellen? Gibt es dazu Beispiele wie ich solche erstelle?
 
Hallo,

die einen sagen so, die andern so ...

Ich würde in deinem Fall von JComponent ableiten, die Komponenete wie gehabt
in der paintComponent(g) Methode zeichnen und das mit
den Mausklicks über den MouseListener erledigen !

Gruß JAdix
 
Hallo nochmals

Mh ich versuche nun folgendes ohne Erfolg: Ich will jetzt eine Komponente Widerstand erstellen die dann als Komponente in einem JPanel gezeichnet werden kann. Natürlich wenn es dann dem JPanel hinzugefügt wird sieht man ein Bild das den Widerstand representiert. Nun könnte ich ja einen Listener auf die Komponente anmelden um die Events abzufangen....

Nur wie baue ich genau so eine Komponente Widerstand Gibt es irgendwo eine Anleitung um eigene Komponenten zu erstellen (JComponent). Ich habe in meinen Büchern keinen Ansatz gefunden....

MFG Marius Meier
 
Wie ich sehe suchst du nach einer Bestätigung wie du am besten vorzugehen hast. Ich schließe mich der Meinung von TheJadix voll und ganz an. Hätte er es nicht vorgeschlagen, würde ich es nun tun.

Eine kleine Starthilfe:
Code:
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JComponent;

public class Paint extends JComponent {
	private static final long serialVersionUID = 1L;

	public void paintComponent(Graphics g) {
		Graphics2D g2d = (Graphics2D) g;
		
		// deine zeichnungen!
		
	}
	
	class MausListener implements MouseListener{

		@Override
		public void mouseClicked(MouseEvent arg0) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void mouseEntered(MouseEvent arg0) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void mouseExited(MouseEvent arg0) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void mousePressed(MouseEvent arg0) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void mouseReleased(MouseEvent arg0) {
			// TODO Auto-generated method stub
			
		}
	}
}

Solltest du dein Projekt umsetzen, dann berichte uns doch davon und wir werden dir garantiert weitere Ratschläge geben.
 
Also ich habe mal folgenden Code zusammengetragen:
Code:
import javax.swing.*;
import javax.swing.JComponent;
import java.awt.*;
import javax.imageio.*;
import java.awt.Event;
import java.io.*;
import java.awt.Image;
import java.awt.Dimension;
import java.awt.Toolkit;

public class TestFrame extends JFrame {
	
	public JButton panelButton;
	public Image bild = null;
	public double R=10.056;
	
	class Widerstand extends JComponent {
		
		public void paintComponent(Graphics g) {
			super.paintComponent(g);
			Image bild2 = getToolkit().getImage("D:/Work_Java/Projekt2/src/widerstand.jpg");
			g.drawImage(bild2, 100, 100, this);
		}
		
	
	}
	
	private class Leinwand extends JPanel {
		public void paint(Graphics g) {
			
			setLayout(null);
			
			g.drawString("Widerstandswert: " + R, 100, 200);
			add(new Widerstand());
			
		}
	}
	
	public TestFrame(String title) {
		super(title);
		Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
		setSize(d);
		getContentPane().add(new Leinwand());
	}
	
	public static void main(String[] args) {
		TestFrame tframe = new TestFrame("Bildschirm wird automatisch angepasst");
		
		tframe.setVisible(true);
	}

}

Bis jetzt macht es nur das Fenster auf und zeichnet den Widerstandswert ins Fenster. Jedoch sehe ich mein Bild nicht.... was mache ich noch falsch?

Ja es ist ein offizielles Schulprojekt. Funktion hab ich oben beschrieben. Ich werde bei weiteren Fragen hier posten. Danke!

MFG Marius Meier
 
Hallo,

ein Schulprojekt ? Super dann wollen wir mal sehen das es auch gelingt !

Verbesserungsvorschlag zur innere Klasse Widerstand :

Code:
class Widerstand extends JComponent {

	Image resistor = null;
        int value = 0;

        public Widerstand(int value) {

            this.value = value;
            resistor = getToolkit().getImage("D:/Work_Java/Projekt2/src/widerstand.jpg");
            this.setBounds(100,100,123,123); // 123,123 min. auf Bildgröße ändern 

        }

        public void paintComponent(Graphics g) {
	
             super.paintComponent(g);
	     g.drawImage(resistor, 0, 0, this);
	}
 		
}

Das mit dem Widerstandswert als Parameter des Konstruktors ist nur so ne Idee !

Gruß JAdix
 
Zuletzt bearbeitet:
Zurück