GUI mit Mouse Touch

babuschka

Top Contributor
Hallo Freunde,

Ist es möglich, so etwas in Java zu programmieren?

Also ein Quadrat, mit vielen kleinen Quadraten.
Und wenn man mit der Maus auf ein Quadrat kommt,
färbt sich das Quadrat in eine Farbe. Wenn man dann
drauf klickt, sollte igrnedwas passieren, wie Ausgabe von Musik.

Mir geht es eher drum, wie ich das erste programmieren könnte, dass sich das Quadrat färbt

Irgendwelche Ideen? ???:L ???:L

Vielen Dank im voraus :toll:
 

pro2

Bekanntes Mitglied
Mausposition einlesen

..mit Position und Größe des Rechtecks vergleichen
..wenn die Maus im Bereich des Rechtecks liegt,
muss dieser Fall zutreffen:

wenn Mausx>=Rechtx und Mausx<=Rechtx+Breite
und Mausy >=Rechty und Mausy <= Rechty+Hoehe

Ich denke so müsste es klar sein ;)

Die Funktion
Code:
contains()
der Klasse Rectangle dürfte es auch tun. :)
 

pro2

Bekanntes Mitglied
Schon mal so was in der Art angesehen? Wenn du das alles gelesen hast (oder zumindest die Kapitel), dürfte es dir eig. nicht mehr schwer fallen!
Ist jetzt vielleicht nicht das beste Tutorial, war jetzt nur so schnell aufgegriffen. Aber sieh dich mal bei Google nach Java2D Tutorials um, da wirst du einiges finden.
 

X5-599

Top Contributor
Hast du vllt ein Bsp?:oops:

Zwar keine Rectangle, aber hier mal ein Beispiel mit JPanels.

Java:
public class WindowFrame extends JFrame implements MouseListener {
	
	private static final long serialVersionUID = 1L;

	public WindowFrame() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		init();
		setSize(800,600);
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new WindowFrame().setVisible(true);
	}

	private void init() {
		int nRows = 5;
		int nCols = 5;
		setLayout(new GridLayout(nRows, nCols));
		
		for(int i = 0; i < nRows; i++) {
			for(int j = 0; j < nCols; j++) {
				JPanel panel = new JPanel();
				panel.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
				panel.setForeground(Color.WHITE);
				panel.setOpaque(true);
				panel.setName("x="+j+", y="+i);
				panel.add(new JLabel(panel.getName()));
				panel.setSize(50, 50);
				panel.addMouseListener(this);
				add(panel);
			}
		}
	}
	
	
	@Override
	public void mouseClicked(MouseEvent e) {
		System.out.println("mouseClicked()");
		((JPanel)e.getSource()).setBackground(Color.BLUE);
	}

	@Override
	public void mousePressed(MouseEvent e) {
		System.out.println("mousePressed()");
		((JPanel)e.getSource()).setBackground(Color.ORANGE);
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		System.out.println("mouseReleased()");
		((JPanel)e.getSource()).setBackground(Color.LIGHT_GRAY);
	}

	@Override
	public void mouseEntered(MouseEvent e) {
		System.out.println("mouseEntered()");
		((JPanel)e.getSource()).setBackground(Color.CYAN);
	}

	@Override
	public void mouseExited(MouseEvent e) {
		System.out.println("mouseExited()");
		((JPanel)e.getSource()).setBackground(Color.GREEN);
	}

}
 

babuschka

Top Contributor
Danke :toll: Genau sowas meinte ich,

nur mein Problem ist jetzt nur, dass es verallgemeinert ist, das MousePressed

wie ich kann ich die einzelnen Panels färben, wenn er mit der Mouse rüber geht bzw. drückt ???:L
 

Volvagia

Top Contributor
Der Beispielcode benutzt doch #getSource vom Event und färbt sie einzeln.
Alternativ könntest du den Listener auch von vorneherein mit einen Komponenten bekannt machen. Erspaart Casten/Typecheck, sorgt aber für doppelte Vernetzung und du brauchst jeweils ein eigenes Objekt.
 

X5-599

Top Contributor
Jedes unserer JPanels hat den selben Listener. Somit kann man bei einem ausgelösten Event zentral feststellen welches JPanel dieses Event ausgelöst hat (mit getSource). Da unserem Listener nur JPanels bekannt sind, können wir ohne Bedenken die Rückgabe von getSource() auf JPanel casten.

Dieses JPanel ist eine Referenz auf das JPanel, welches das Event ausgelöst hat. Wenn du z.B. deinen JPanels beim Erstellen einen Namen gibst z.B. panel.setName("Panel A"), kannst du in den Listener-Methoden diesen wieder auslesen:

Java:
@Override
public void mouseEntered(MouseEvent e) {
    System.out.println("mouseEntered()");
    JPanel sourcePanel = (JPanel)e.getSource(); //Das Panel holen, welches das Event ausgelöst hat
    
    if(sourcePanel.getName().equals("Panel A")) {
        System.out.println("Panel A hat ausgelöst");
        sourcePanel.setBackground(Color.CYAN);    //So wird nur das "Panel A" eingefärbt
    }
    
}

Ich hoffe das war jetzt nicht allzu unverständlich. Bin halt kein Lehrer... :D Ansonsten erkläre nochmal genau welche Funktionalität dir fehlt.
 

Michael...

Top Contributor
Wenn wir aber nach dem Code gehen, erstellen wir ja die Panels in einer For Schleife

das heisst, dass ich gar nicht abfragen kann ???:L
Wo soll was abgefragt werden? Innerhalb der Listener Methoden hast Du ja über das Event Zugriff auf das auslösende Panel.
Wenn Du ausserhalb was "abfragen" willst, dann musst Dir natürlich auf Referenzen die Panel halten. z.B. in einem Array, List... Ob die Panels in einer for Schleife oder sonstwie erstellt werden spielt keine Rolle.
 

babuschka

Top Contributor
die Abfrage wegen dem Panel

ich will ja jedes einzelne Panel eine eig Farbe verpassen

und wenn ich die Panels in der For Schleife mache
ist es verallgemeinert oder seh ich das falsch?

die Idee if(sourcePanel.getName().equals("Panel A"))
funktioniert ja in diesem Sinne gar nicht
 

X5-599

Top Contributor
die Abfrage wegen dem Panel

ich will ja jedes einzelne Panel eine eig Farbe verpassen

und wenn ich die Panels in der For Schleife mache
ist es verallgemeinert oder seh ich das falsch?

die Idee if(sourcePanel.getName().equals("Panel A"))
funktioniert ja in diesem Sinne gar nicht

Doch, das funktioniert. In dem MouseEvent steckt das Objekt, welches dieses Event ausgelöst hat immer mit drin (getSource()). Das ist hier jeweils eine Referenz auf das selbe JPanel was in der for-Schleife erzeugt wurde. Wenn du wie in meinem Beispiel allen JPanels einen Namen gegeben hast, wirst du den hier mit getName() wieder auslesen können.
 

babuschka

Top Contributor
Das hat super geklappt. Im Eclipse ohne Probleme auszuführen.

Wie kann ich diesen Panel einem anderen Panel zuordnen?
Versuche gerade eine Oberfläche im NetBeans zu machen

Hab ein Fenster erzeugt und würde auch gerne diesen Panel meinem Fenster hinzufügen,
aber irgendwie erzeugt er nur den ersten Panel ???:L???:L

Code:

public void init(){
int nRows = 3;
int nCols = 3;
setLayout(new GridLayout(nRows, nCols));

for(int i = 0; i < nRows; i++) {
for(int j = 0; j < nCols; j++) {
panel = new JPanel();
panel.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
panel.setForeground(Color.WHITE);
panel.setOpaque(true);
panel.setName("x="+j+", y="+i);
panel.add(new JLabel(panel.getName()));
panel.setSize(50, 50);
// panel.addMouseListener(this);
jPanel1.add(panel);
}
}

}

public Gui() {
initComponents();
init();
add(jPanel1,BorderLayout.CENTER);
}
 

Michael...

Top Contributor
Was ist jPanel1 und welches Layout benutzt die Komponente? Brauchst Du das überhaupt?
Warum fügst Du die in der Schleife erzeugten Panels nicht direkt dem ContentPane hinzu?
Du setzt als Layout des ContentPane ein GridLayout, das jPanel1 fügst Du aber mit
Code:
add(jPanel1,BorderLayout.CENTER)
hinzu :noe: das stimmt doch was nicht.
 

babuschka

Top Contributor
Vllt ist dieser Code besser, ich mach da irgendein Fehler, worauf ich leider nicht komme ;(;(

public void los(){
JFrame fenster = new JFrame();
fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fenster.setVisible(true);
fenster.setSize(900, 600);

int nRows = 3;
int nCols = 3;

panelOberfläche.setLayout(new GridLayout(nRows,nCols));

for(int i = 0; i < nRows; i++) {
for(int j = 0; j < nCols; j++) {
panel = new JPanel();
panel.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
panel.setForeground(Color.WHITE);
panel.setOpaque(true);
panel.setName("x="+j+", y="+i);
panel.add(new JLabel(panel.getName()));
panel.setSize(50, 50);
panel.addMouseListener(this);
panelOberfläche.add(panel);
}
}

JButton b1 = new JButton("PLAY");
fenster.add(b1, BorderLayout.SOUTH);
fenster.add(panelOberfläche,BorderLayout.CENTER);
}
 

babuschka

Top Contributor
Ich hab bisher ein super Code, falls jmd Interesse haben sollte, kann ich diese zusenden

über MouseOverview... danke an alle die mir hierbe geholfen haben :toll:
 
Zuletzt bearbeitet von einem Moderator:

babuschka

Top Contributor
Hallo,

Meine Idee ist es, einzelne Songs per Drag & Drop auf eins der Panel zu ziehen, und dann diese zu speichern.

Hat einer eine Idee, wie ich das mit dem Drag&Drop programmieren könnte?

Vielen Dank im voraus
 
G

Gast2

Gast
Hast du dir schon Drag&Drop Beispiele/Tutorials angeschaut?
Bestehen da konkrete Fragen die man beantworten kann?
 
G

Gast2

Gast
Stell konkrete Fragen, so kann man dir nicht helfen. außer dir den Hinweis zu geben ein Drag&Drop Tutorial anzuschauen.
 

babuschka

Top Contributor
Könnt ihr mir bitte sagen, wieso er jedes Mal bei der Zeile
List<File> listFile = (List<File>) meckert? Vorschläge?

meine Methode:
Java:
public boolean importData(TransferSupport info){   
    if(!canImport(info))
        return false;
    //Transferobjekt holen
    Transferable transfer = info.getTransferable();
    
    try{     
        List<File> listFile = (List<File>)
                transfer.getTransferData(DataFlavor.javaFileListFlavor);
        for (File file : listFile) {
            Track importedTrack = track.importTrack(file.getPath());
        }
    }catch(UnsupportedFlavorException e){
        e.printStackTrace();
    }catch(IOException e){
        e.printStackTrace();
    }
    return false;
}

Vielen Dank vorab :toll:
 

babuschka

Top Contributor
Hab das Problem gelöst.

Könnt ihr mir vllt mal die Logik erklären von Drag.

Also wenn ich auf das Panel ein Lied hineinziehe, soll es in eine Playlist gespeichert werden.

Wenn der Benutzer dann auf diesen Panel klickt, soll ´mein Player per Zufall ein Lied hinausziehen.

Ich hab meine MyTransferHandler Klasse mit der Methode importData.
Dann hab ich die Klasse MP3Player,Track und Playlist.

Vllt mal kurz erklären, wie ich vorfahren soll.

Vielen Dank:toll:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G mouse events AWT, Swing, JavaFX & SWT 6
N Mouse methods AWT, Swing, JavaFX & SWT 10
G Mouse Event in anderemm Event auslösen AWT, Swing, JavaFX & SWT 50
P kein Scrollen nach affinertransformation bei mouse dragged AWT, Swing, JavaFX & SWT 2
N Java Mouse Listiner macht alles zusammen AWT, Swing, JavaFX & SWT 4
M Java FX Mouse over AWT, Swing, JavaFX & SWT 4
M Mouse Click Event ohne ein JComponent Objekt AWT, Swing, JavaFX & SWT 3
U Mouse + Keylistener AWT, Swing, JavaFX & SWT 12
S Mouse Events in einer sortierten JTable unterscheiden AWT, Swing, JavaFX & SWT 18
A Mouse event und exit on close AWT, Swing, JavaFX & SWT 11
H Rechteck via Mouse bewegen AWT, Swing, JavaFX & SWT 2
H Java Robot mouse funktioniert nur auf Notebook nicht. AWT, Swing, JavaFX & SWT 4
E JFace ListSelectionDialog & Mouse-Events? AWT, Swing, JavaFX & SWT 2
lumo SWT Composite Mouse Track Lisetner AWT, Swing, JavaFX & SWT 2
K JButton nur dann aktivieren, wenn die Mouse 3 Sek. über dem Button bleibt AWT, Swing, JavaFX & SWT 2
M Mouse Wheel Listener reagiert mehrmals AWT, Swing, JavaFX & SWT 5
R JTable - eigener Editor - Mouse events AWT, Swing, JavaFX & SWT 2
H fwststellen, ob sich Mouse auf dem Rand befindet AWT, Swing, JavaFX & SWT 3
Dit_ Buttons Mouse-Over Effekt AWT, Swing, JavaFX & SWT 8
R Key und Mouse Events AWT, Swing, JavaFX & SWT 2
Iron Monkey JTable 2 Selektionsfarben Mouse-Event AWT, Swing, JavaFX & SWT 8
D Mouse Koordinaten AWT, Swing, JavaFX & SWT 2
P Mouse Listener beenden AWT, Swing, JavaFX & SWT 14
raptorrs JFrame nur anzeigen, solange die Mouse gedrückt ist AWT, Swing, JavaFX & SWT 3
G JButton Mouse Over Text AWT, Swing, JavaFX & SWT 2
T Mouse Popup AWT, Swing, JavaFX & SWT 2
M Bug; Swing-Worker, Progressbar und Mouse AWT, Swing, JavaFX & SWT 22
R Mouse Wheel funktioniert nicht im JDialog ! AWT, Swing, JavaFX & SWT 4
T mouse-event auf jcolorchooser AWT, Swing, JavaFX & SWT 2
M eine zeichnen beim mouse ziehen AWT, Swing, JavaFX & SWT 8
K Mouse Events der Scrollbar/pane AWT, Swing, JavaFX & SWT 2
V JPopupMenu Problem und Tipp zu mouse/key AWT, Swing, JavaFX & SWT 3
S Rechteck per Mouse aufziehen AWT, Swing, JavaFX & SWT 7
S Mouse-Event in JTable AWT, Swing, JavaFX & SWT 3
K Mouse Position nach Drag und Drop? AWT, Swing, JavaFX & SWT 4
M Grafikobjekte mit Mouse auswählen und verschieben AWT, Swing, JavaFX & SWT 2
D JLabel aus einem Mouse- bzw. KeyListener aendern AWT, Swing, JavaFX & SWT 2
A Touch-Display deaktivieren (Zeitabhängig) AWT, Swing, JavaFX & SWT 3
T Touch GUI umsetzung AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben