richtige anordnung mit SWT

tanzverfuehrung

Bekanntes Mitglied
also mein code ist denke fast soweit richtig
aber die anordnung ist noch nicht so wie ich es mir vostelle!

Java:
public class BeatBOXmitSWT {
	Display display;
	Shell shell;
	ArrayList<Button> checkBoxListe = new ArrayList<Button>();
	Canvas hauptPanel;
	Sequencer sequencer;
	Sequence sequence;
	Track track;
	String[] instrumentenNamen = { "Bassdrum", "Hi-Hat, geschlossen", "Hi-Hat, offen", "Snaredrum", "Crashbecken", "Händeklatscher", "Hohes Tom-Tom", "Hohes Bongo", "Maracas", "Trillpfeife", "Tiefe Conga", "Kuhglocke", "Vibraslap", "Tieferes Tom-Tom", "Hohes Agogo", "Hohe Conga, offen" };
	int[] instrumente = { 35, 42, 46, 38, 49, 39, 50, 60, 70, 72, 64, 56, 58, 47, 67, 63 };

	public static void main(String[] args) {
		BeatBOXmitSWT beatbox = new BeatBOXmitSWT();
		beatbox.guiErstellen();
	}

	private void guiErstellen() {
		display = new Display();
		shell = new Shell(display);
		shell.setText("BeatBox");
		shell.setLayout(new GridLayout(18,true));
//		Canvas hintergrund = new Canvas(shell, SWT.CENTER);
		
		checkBoxListe = new ArrayList<Button>();
		Composite buttonBox = new Composite(shell, SWT.RIGHT);
		RowLayout buttonBoxLayout = new RowLayout(1);
		buttonBoxLayout.type = SWT.VERTICAL;
		buttonBox.setLayout(buttonBoxLayout);

		Button start = new Button(buttonBox, SWT.PUSH);
		start.setText("Starten");
		start.addSelectionListener(new MeinStartListener());

Button löschen = new Button(buttonBox, SWT.PUSH);
		löschen.setText("Löschen");
		löschen.addSelectionListener(new LöschenListener());

		Button alle = new Button(buttonBox, SWT.PUSH);
		alle.setText("Alle Auswählen");
		alle.addSelectionListener(new AlleAuswählenListener());

		Composite namensBox = new Composite(shell, SWT.LEFT);
		RowLayout namenBoxLayout = new RowLayout(1);
		namensBox.setLayout(namenBoxLayout);
		for (int i = 0; i < 16; i++) {
			Label label = new Label(namensBox, SWT.LEFT);
			label.setText(instrumentenNamen[i]);
		}
		GridLayout raster = new GridLayout();
		raster.verticalSpacing = 1;
		raster.horizontalSpacing = 2;

		hauptPanel = new Canvas(shell, SWT.CENTER);
		hauptPanel.setLayout(raster);

		/**
		 * hier werden die kontrollKästchen(16*16=256) erzeugt, auf
		 * <code>false</code> gesetzt,damit keine Häkchen darin stehen
		 */
		for (int i = 0; i < 256; i++) {
//			Button checkBox = new Button(shell, SWT.CHECK);
			Button checkBox = new Button(shell, SWT.CHECK);
			checkBox.setSelection(false);
			checkBoxListe.add(checkBox);
//			 hauptPanel.add(checkBox);
		}
		midiEinrichten();

		shell.pack();
		shell.open();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}
	}

	public void midiEinrichten() {
		try {
			sequencer = MidiSystem.getSequencer();
			sequencer.open();
			sequence = new Sequence(Sequence.PPQ, 4);
			track = sequence.createTrack();
			sequencer.setTempoInBPM(120);
		}
		catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void trackErstellenUndStarten() {
		int[] trackListe = null;

		sequence.deleteTrack(track);
		track = sequence.createTrack();

		for (int i = 0; i < 16; i++) {
			trackListe = new int[16];

			int taste = instrumente[i];
			for (int j = 0; j < 16; j++) {
				Button jCheckBox = new Button(shell, SWT.CHECK);
				jCheckBox = checkBoxListe.get(j + (16 * i));
				boolean isSelected = jCheckBox.getSelection();
				if (isSelected == true)
					trackListe[j] = taste;
				else
					trackListe[j] = 0;
			}
			tracksErzeugen(trackListe);
		}
		track.add(eventErzeugen(192, 9, 1, 0, 16));

		try {
			sequencer.setSequence(sequence);
			sequencer.setLoopCount(LOOP_CONTINUOUSLY);
			sequencer.start();
			sequencer.setTempoInBPM(120);
		}
		catch (InvalidMidiDataException e) {
			e.printStackTrace();
		}
	}

	private MidiEvent eventErzeugen(int messageTyp, int kanal, int ton, int anschlagstärke, int augenblick) {
		MidiEvent event = null;
		ShortMessage a = new ShortMessage();
		try {
			a.setMessage(messageTyp, kanal, ton, anschlagstärke);
			event = new MidiEvent(a, augenblick);
		}
		catch (InvalidMidiDataException e) {
			e.printStackTrace();
		}
		return event;
	}

	private void tracksErzeugen(int[] trackListe) {
		for (int i = 0; i < 16; i++) {
			int taste = trackListe[i];

			if (taste != 0) {
				track.add(eventErzeugen(144, 9, taste, 100, i));
				track.add(eventErzeugen(128, 9, taste, 100, i + 1));
			}
		}
	}

	public class MeinStartListener implements SelectionListener {
		@Override
		public void widgetSelected(SelectionEvent e) {
			trackErstellenUndStarten();
		}

		@Override
		public void widgetDefaultSelected(SelectionEvent e) {
			// TODO Auto-generated method stub
		}
	}
public class LöschenListener implements SelectionListener {
		@Override
		public void widgetSelected(SelectionEvent e) {
			for (Button checkBox : checkBoxListe) {
				checkBox.setSelection(false);
			}
		}

		@Override
		public void widgetDefaultSelected(SelectionEvent e) {}
	}

	public class AlleAuswählenListener implements SelectionListener {
		@Override
		public void widgetSelected(SelectionEvent e) {
			for (Button checkBox : checkBoxListe) {
				checkBox.setSelection(true);
			}
		}

		@Override
		public void widgetDefaultSelected(SelectionEvent e) {
			// TODO Auto-generated method stub

		}
	}
}
ich gebe die Layouts an und sage eigentlich auch das das Canvas mit der namens-Box linksseitig sein soll im shell.dass das canvas mit der button box recht liegen soll im shell und das hauptPanel mit den ganzen checkboxes ,soll in der mitte liegen!aber irgendwie funktioniert das nicht so!!!


muss ich nochmal eine hintergrund Canvas erzeugen, wo ich dann die anderen Canvas rauf lege??????????oder wie soll das funktionieren?????????

ich habe zwei anhänge begefügt, so wie es immoment aussieht(swt.jpg)
und einmal so...wie es vom aufbau aussehen soll(ist aber mit swing gemacht)(swing.jpg)
:rtfm:


kann mir keiner HELFEN?
versuche es jetzt ertsmal mit einer tabelle!
aber würde es auch gern ohne tabelle lösen
 

Anhänge

  • swt.jpg
    swt.jpg
    37,5 KB · Aufrufe: 49
  • swing.png
    swing.png
    21,2 KB · Aufrufe: 48
Zuletzt bearbeitet:

tanzverfuehrung

Bekanntes Mitglied
habe mein Problem jetzt extra eingekürzt
komme einfach nicht mit den Layouts klar von SWT!!!;(

also ich habe mehrere Instrumente, die alle unter einander stehen,
zu jedem Instrument , habe ich 16 checkboxes, die genau hinter dem dazugehörigen Instrument stehen soll!
das verschiebt sich aber, wieso?

Java:
public class NewBEatBoxMitSWT {
	Display display;
	Shell shell;
	ArrayList<Button> checkBoxListe = new ArrayList<Button>();
	Canvas hauptPanel;
	Sequencer sequencer;
	Sequence sequence;
	Track track;
	String[] instrumentenNamen = { "Bassdrum", "Hi-Hat, geschlossen", "Hi-Hat, offen", "Snaredrum", "Crashbecken", "Händeklatscher", "Hohes Tom-Tom", "Hohes Bongo", "Maracas", "Trillpfeife", "Tiefe Conga", "Kuhglocke", "Vibraslap", "Tieferes Tom-Tom", "Hohes Agogo", "Hohe Conga, offen" };
	int[] instrumente = { 35, 42, 46, 38, 49, 39, 50, 60, 70, 72, 64, 56, 58, 47, 67, 63 };
	
	public static void main(String[] args) {
		NewBEatBoxMitSWT beatbox = new NewBEatBoxMitSWT();
		beatbox.guiErstellen();
	}

	private void guiErstellen() {
	display = new Display();
	shell = new Shell(display);
	shell.setText("BEatBOx mit SWT");
	shell.setLayout(new GridLayout(18, true));
	
	Composite namensBox = new Composite(shell, SWT.LEFT);
	RowLayout namenBoxLayout = new RowLayout(1);
	namensBox.setLayout(namenBoxLayout);
	for (int i = 0; i < 16; i++) {
		Label label = new Label(namensBox, SWT.LEFT);
		label.setText(instrumentenNamen[i]);
		}
	
	/**
	 * hier werden die kontrollKästchen(16*16=256) erzeugt, auf
	 * <code>false</code> gesetzt,damit keine Häkchen darin stehen
	 */
	for (int i = 0; i < 256; i++) {
		Button checkBox = new Button(shell, SWT.CHECK);
		checkBox.setSelection(false);
		checkBoxListe.add(checkBox);
	}
	
	shell.pack();
	shell.open();
	while (!shell.isDisposed()) {
		if (!display.readAndDispatch()) {
			display.sleep();
		}
	}
	}
}

habe so wie es jetzt aussieht, ein screen shot gemacht und mit angehangen!
hoffe mir kann jemand helfen!
 

Anhänge

  • new.jpg
    new.jpg
    39,3 KB · Aufrufe: 41
Zuletzt bearbeitet:

L-ectron-X

Gesperrter Benutzer
Nee, immer noch nicht. Ist das RowLayout im SWT? Ich kenne mich leider nur mit Swing aus.
Ich würde es mit einem GridBagLayout (AWT) hinbekommen.
 

bERt0r

Top Contributor
Du könntest ja ganz einfach pro Zeile ein Panel machen, da schmeisst du per RowLayout das Label und die Checkboxen rein.
Ansonsten gibts immer noch viele andere Layoutmanager, du solltest alle mal probieren. Ich z.B bin fast verrückt geworden mit GridBag, dafür gefällt mir das GroupLayout sehr. Mit den mächtigeren Layoutmanagern wie Gridbag-, Group-, Form- und Miglayout kann man prinzipiell alles anstellen.
 
Zuletzt bearbeitet:

Sonecc

Gesperrter Benutzer
Käse, nimm ein Gridlayout und gib dem 17 Spalten. Dann werden nacheinander das Label sowie die Checkbox dazu erzeugt und gut ist.
Das bedeutet, dass du nicht LABEL, LABEL, LABEL, CHECK, CHECK, CHECK machen musst, sondern die Reihenfolge einhalten musst, also: LABEL, CHECK, LABEL, CHECK, LABEL, CHECK usw.


Das ist übrigens in diesem Fall dein Hauptproblem, dass du erst alle Labels erzeugst. Diese ordnet er nun ein und erst dann machst du die Checkboxen. Dadurch hast du alle Labels nacheinander und am Ende die Checkboxen.

Bei SWT ist das Prinzip meist so, dass die Reihenfolge angibt wo welches Widget steht.
Und logischerweise steht das Label vor der entsprechenden Checkbox.
 
Zuletzt bearbeitet:

L-ectron-X

Gesperrter Benutzer
Ein GridLayout kommt hier nicht in Frage, weil es mehr als zwei Spalten sind.
Und da die Labels die größte Breite haben, würden die CheckBoxen auch in je einer Zelle mit der Breite der breitesten Zelle sitzen... Du hättest also riesige Abstände zwischen den CheckBoxen.
 
G

Gast2

Gast
Sag mal ist das das Beatbox Beispiel aus "Java von Kopf bis Fuß" ? Nur so aus Interesse ^^
 

Sonecc

Gesperrter Benutzer
Ein GridLayout kommt hier nicht in Frage, weil es mehr als zwei Spalten sind.
Und da die Labels die größte Breite haben, würden die CheckBoxen auch in je einer Zelle mit dieser Breite sitzen... Du hättest also riesige Abstände zwischen den CheckBoxen.

Das stimmt nicht. Man kann in SWT das Gridlayout so einstellen, dass es nicht die gleiche Größe für jede Spalte verwendet. Das bedeutet, dass die erste Spalte (Label) größer ist als die anderen (Checkboxen).
Was die Spaltenanzahl betrifft hab ich meinen vorherigen Beitrag verbessert, hatte nicht gelesen, dass 16 Boxen pro Label erstellt werden.
 

tanzverfuehrung

Bekanntes Mitglied
Käse, nimm ein Gridlayout und gib dem 17 Spalten. Dann werden nacheinander das Label sowie die Checkbox dazu erzeugt und gut ist.
Das bedeutet, dass du nicht LABEL, LABEL, LABEL, CHECK, CHECK, CHECK machen musst, sondern die Reihenfolge einhalten musst, also: LABEL, CHECK, LABEL, CHECK, LABEL, CHECK usw.


Das ist übrigens in diesem Fall dein Hauptproblem, dass du erst alle Labels erzeugst. Diese ordnet er nun ein und erst dann machst du die Checkboxen. Dadurch hast du alle Labels nacheinander und am Ende die Checkboxen.

Bei SWT ist das Prinzip meist so, dass die Reihenfolge angibt wo welches Widget steht.
Und logischerweise steht das Label vor der entsprechenden Checkbox.

dann kann ich es aber nicht in einer schleife durch laufen lassen(die labels)
sondern muss ich jedes label einzeln erzeugen?????!
das ist doch aber sau viel arbeit oder nicht?
 

tanzverfuehrung

Bekanntes Mitglied
danke euch für eure hilfe!
ich habe es endlich hin bekommen.muss freitag schon im wochenende gewesen sein:D

hier der code,falls jemanden interessiert
Java:
package musikBox;

import java.util.ArrayList;

import javax.sound.midi.Sequence;
import javax.sound.midi.Sequencer;
import javax.sound.midi.Track;

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;

public class Zusammengebaut {
	Display display;
	Shell shell;
	ArrayList<Button> checkBoxListe = new ArrayList<Button>();
	Canvas hauptPanel;
	Button checkBox;
	Sequencer sequencer;
	Sequence sequence;
	Track track;
	String[] instrumentenNamen = { "Bassdrum", "Hi-Hat, geschlossen", "Hi-Hat, offen", "Snaredrum", "Crashbecken", "Händeklatscher", "Hohes Tom-Tom", "Hohes Bongo", "Maracas", "Trillpfeife", "Tiefe Conga", "Kuhglocke", "Vibraslap", "Tieferes Tom-Tom", "Hohes Agogo", "Hohe Conga, offen" };
	int[] instrumente = { 35, 42, 46, 38, 49, 39, 50, 60, 70, 72, 64, 56, 58, 47, 67, 63 };

	public static void main(String[] args) {
		Zusammengebaut beatbox = new Zusammengebaut();
		beatbox.guiErstellen();
	}

	private void guiErstellen() {
		display = new Display();
		shell = new Shell(display);
		shell.setText("BeatBox");
		shell.setLayout(new GridLayout(17, false));
	
	for (String instrument : instrumentenNamen) {
				
		Label label = new Label(shell, SWT.LEFT);
		label.setText(instrument);
		GridData gridData = new GridData(1);
		gridData.grabExcessHorizontalSpace =true;
		label.setLayoutData(gridData);
	
		for (int j = 0; j < 16; j++) {
			GridData gridData1 = new GridData(1);
			gridData1.grabExcessHorizontalSpace =false;;
		 checkBox = new Button(shell, SWT.CHECK);
		 checkBox.setLayoutData(gridData1);
			checkBox.setSelection(false);
			checkBoxListe.add(checkBox);
			}
	}
		
	shell.pack();
	shell.open();
	while (!shell.isDisposed()) {
		if (!display.readAndDispatch()) {
			display.sleep();
		}
	}
}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B JavaFX das richtige ListView filtern AWT, Swing, JavaFX & SWT 2
S Swing SwingWorker - richtige Implementierung doInBackground() AWT, Swing, JavaFX & SWT 5
S Swing Tabellen - Listener & richtige Row AWT, Swing, JavaFX & SWT 3
S Elemente im Panel in richtige Ausgangsstellung bringen AWT, Swing, JavaFX & SWT 10
P LayoutManager welcher LM ist der richtige? AWT, Swing, JavaFX & SWT 3
A LookAndFeel Suche richtige Technologie für eine bestimme Desginvorlage AWT, Swing, JavaFX & SWT 5
D Richtige implimentierung eines CardLayout AWT, Swing, JavaFX & SWT 3
T SWT String mitten ins Textfeld einfügen + richtige Cursorposition AWT, Swing, JavaFX & SWT 3
P richtige "Architektur" mit GUIs AWT, Swing, JavaFX & SWT 2
F Der richtige Layoutmanager AWT, Swing, JavaFX & SWT 6
Lazybone der Richtige Layout Manager AWT, Swing, JavaFX & SWT 2
R Richtige Klasse ändern AWT, Swing, JavaFX & SWT 3
M GUI mit Swing erst nach Maximieren richtige Anzeige AWT, Swing, JavaFX & SWT 2
D [Swing] Anordnung von Komponenten mit GridLayout Manager AWT, Swing, JavaFX & SWT 13
J LayoutManager GridBagLayout, probleme mit Anordnung von Objekten AWT, Swing, JavaFX & SWT 6
D Swing Komponenten Anordnung eines Panels in Verbindung eines weiteren Panels AWT, Swing, JavaFX & SWT 9
N Anordnung der Label AWT, Swing, JavaFX & SWT 3
S GridLayout SWT: Anordnung Composites nebeneinander AWT, Swing, JavaFX & SWT 2
M Java FX Dreidimensionale Anordnung von Objekten AWT, Swing, JavaFX & SWT 4
I JPanel - Verwaltung/ Anordnung AWT, Swing, JavaFX & SWT 4
L GridBagLayout Anordnung AWT, Swing, JavaFX & SWT 3
Z Absolutes Layout / Kontrolle über Anordnung AWT, Swing, JavaFX & SWT 3
S BoxLayout: Anordnung der Komponenten links statt zentriert AWT, Swing, JavaFX & SWT 0
S Swing JLayeredPane Anordnung funktioniert nicht AWT, Swing, JavaFX & SWT 2
S Anordnung von GUI-Komponenten mit LayouManger (Problem beim anzeigen von JTextField) AWT, Swing, JavaFX & SWT 5
D Anordnung von Elementen in JFrame AWT, Swing, JavaFX & SWT 2
R Größe/Anordnung der Gui-Elemente automatisch? AWT, Swing, JavaFX & SWT 6
S LayoutManager Button-Anordnung nicht wie es sein sollte AWT, Swing, JavaFX & SWT 4
B LayoutManager Zeilenweise Anordnung von Panels AWT, Swing, JavaFX & SWT 19
P LayoutManager vertikale anordnung AWT, Swing, JavaFX & SWT 3
L SWT Anordnung der Steuereelemente in SWT AWT, Swing, JavaFX & SWT 3
G Anordnung MenuItems nachträglich ändern AWT, Swing, JavaFX & SWT 2
A Swing JPanel Anordnung AWT, Swing, JavaFX & SWT 16
A JFrame Anordnung AWT, Swing, JavaFX & SWT 22
B Grafische Anordnung der Elemente AWT, Swing, JavaFX & SWT 2
S Probleme mit Anordnung von Komponenten im JPanel AWT, Swing, JavaFX & SWT 3
I Anordnung der Komponenten im JFrame AWT, Swing, JavaFX & SWT 4
S Anordnung von Buttons verändern AWT, Swing, JavaFX & SWT 3
V Gridbaglayout und anordnung der elemente AWT, Swing, JavaFX & SWT 7
F Anordnung im BorderLayout AWT, Swing, JavaFX & SWT 6
K Anordnung eines GridBagLayouts :) AWT, Swing, JavaFX & SWT 3
G [JOptionPane.showMessageDialog] andere Anordnung mgl? AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben