also mein code ist denke fast soweit richtig
aber die anordnung ist noch nicht so wie ich es mir vostelle!
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
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
}
}
}
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
Zuletzt bearbeitet: