Java tutorial
/* Copyright (C) 2006 Christian Schneider * * This file is part of Nomad. * * Nomad is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * Nomad is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Nomad; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ package net.sf.nmedit.nordmodular; import java.awt.BorderLayout; import java.awt.Container; import java.awt.Dimension; import javax.swing.Box; import javax.swing.ButtonGroup; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JSpinner; import com.jgoodies.forms.layout.CellConstraints; import com.jgoodies.forms.layout.FormLayout; public class PatchSettingsFrm extends JPanel { /** * */ private static final long serialVersionUID = -2445985798566960520L; JSpinner spRequestedVoices = new JSpinner(); JButton btnGetCurrentNotes = new JButton(); JSpinner spVelRangeMax = new JSpinner(); JSpinner spVelRangeMin = new JSpinner(); JSpinner spKbRangeMin = new JSpinner(); JSpinner spKbRangeMax = new JSpinner(); JRadioButton rbPedalModeSustain = new JRadioButton(); ButtonGroup buttongroup1 = new ButtonGroup(); JRadioButton rbPedalModeOnOff = new JRadioButton(); JSpinner spBendRange = new JSpinner(); JRadioButton rbPortaNormal = new JRadioButton(); ButtonGroup buttongroup2 = new ButtonGroup(); JRadioButton rbPortaAuto = new JRadioButton(); JSpinner spPortaTime = new JSpinner(); JComboBox cbOctaveShift = new JComboBox(); JCheckBox cbVoiceRePoly = new JCheckBox(); JCheckBox cbVoiceReCommon = new JCheckBox(); JLabel lblCycles = new JLabel(); JLabel lblProgMem = new JLabel(); JLabel lblXmem = new JLabel(); JLabel lblYmem = new JLabel(); JLabel lblZeroPage = new JLabel(); JLabel lblDynMem = new JLabel(); /** * Default constructor */ public PatchSettingsFrm() { initializePanel(); } /** * Adds fill components to empty cells in the first row and first column of the grid. * This ensures that the grid spacing will be the same as shown in the designer. * @param cols an array of column indices in the first row where fill components should be added. * @param rows an array of row indices in the first column where fill components should be added. */ void addFillComponents(Container panel, int[] cols, int[] rows) { Dimension filler = new Dimension(10, 10); boolean filled_cell_11 = false; CellConstraints cc = new CellConstraints(); if (cols.length > 0 && rows.length > 0) { if (cols[0] == 1 && rows[0] == 1) { /** add a rigid area */ panel.add(Box.createRigidArea(filler), cc.xy(1, 1)); filled_cell_11 = true; } } for (int index = 0; index < cols.length; index++) { if (cols[index] == 1 && filled_cell_11) { continue; } panel.add(Box.createRigidArea(filler), cc.xy(cols[index], 1)); } for (int index = 0; index < rows.length; index++) { if (rows[index] == 1 && filled_cell_11) { continue; } panel.add(Box.createRigidArea(filler), cc.xy(1, rows[index])); } } /** * Helper method to load an image file from the CLASSPATH * @param imageName the package and name of the file to load relative to the CLASSPATH * @return an ImageIcon instance with the specified image file * @throws IllegalArgumentException if the image resource cannot be loaded. */ public ImageIcon loadImage(String imageName) { try { ClassLoader classloader = getClass().getClassLoader(); java.net.URL url = classloader.getResource(imageName); if (url != null) { ImageIcon icon = new ImageIcon(url); return icon; } } catch (Exception e) { e.printStackTrace(); } throw new IllegalArgumentException("Unable to load image: " + imageName); } public JPanel createPanel() { JPanel jpanel1 = new JPanel(); FormLayout formlayout1 = new FormLayout( "FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:NONE", "CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:NONE"); CellConstraints cc = new CellConstraints(); jpanel1.setLayout(formlayout1); JLabel jlabel1 = new JLabel(); jlabel1.setText("Voices"); jpanel1.add(jlabel1, cc.xywh(1, 1, 5, 1)); JLabel jlabel2 = new JLabel(); jlabel2.setText("Requested"); jpanel1.add(jlabel2, cc.xy(1, 2)); spRequestedVoices.setName("spRequestedVoices"); jpanel1.add(spRequestedVoices, cc.xy(3, 2)); JLabel jlabel3 = new JLabel(); jlabel3.setText("Notes"); jpanel1.add(jlabel3, cc.xywh(1, 4, 5, 1)); btnGetCurrentNotes.setActionCommand("Get current notes"); btnGetCurrentNotes.setName("btnGetCurrentNotes"); btnGetCurrentNotes.setText("Get current notes"); jpanel1.add(btnGetCurrentNotes, cc.xy(3, 5)); JLabel jlabel4 = new JLabel(); jlabel4.setText("Velocity range"); jpanel1.add(jlabel4, cc.xywh(1, 8, 5, 1)); JLabel jlabel5 = new JLabel(); jlabel5.setText("Max"); jpanel1.add(jlabel5, cc.xy(5, 9)); JLabel jlabel6 = new JLabel(); jlabel6.setText("Min"); jpanel1.add(jlabel6, cc.xy(5, 10)); spVelRangeMax.setName("spVelRangeMax"); jpanel1.add(spVelRangeMax, cc.xy(3, 9)); spVelRangeMin.setName("spVelRangeMin"); jpanel1.add(spVelRangeMin, cc.xy(3, 10)); JLabel jlabel7 = new JLabel(); jlabel7.setText("Keyboard range"); jpanel1.add(jlabel7, cc.xywh(1, 12, 5, 1)); spKbRangeMin.setName("spKbRangeMin"); jpanel1.add(spKbRangeMin, cc.xy(3, 14)); spKbRangeMax.setName("spKbRangeMax"); jpanel1.add(spKbRangeMax, cc.xy(3, 13)); JLabel jlabel8 = new JLabel(); jlabel8.setText("Min"); jpanel1.add(jlabel8, cc.xy(5, 14)); JLabel jlabel9 = new JLabel(); jlabel9.setText("Max"); jpanel1.add(jlabel9, cc.xy(5, 13)); JLabel jlabel10 = new JLabel(); jlabel10.setText("Pedal mode"); jpanel1.add(jlabel10, cc.xywh(1, 16, 5, 1)); rbPedalModeSustain.setActionCommand("Sustain"); rbPedalModeSustain.setName("rbPedalModeSustain"); rbPedalModeSustain.setText("Sustain"); buttongroup1.add(rbPedalModeSustain); jpanel1.add(rbPedalModeSustain, cc.xy(3, 17)); rbPedalModeOnOff.setActionCommand("On/Off"); rbPedalModeOnOff.setName("rbPedalModeOnOff"); rbPedalModeOnOff.setText("On/Off"); buttongroup1.add(rbPedalModeOnOff); jpanel1.add(rbPedalModeOnOff, cc.xy(3, 18)); JLabel jlabel11 = new JLabel(); jlabel11.setText("Bend Range"); jpanel1.add(jlabel11, cc.xywh(7, 1, 5, 1)); spBendRange.setName("spBendRange"); jpanel1.add(spBendRange, cc.xy(9, 2)); JLabel jlabel12 = new JLabel(); jlabel12.setText("Semitones"); jpanel1.add(jlabel12, cc.xy(11, 2)); JLabel jlabel13 = new JLabel(); jlabel13.setText("Portamento"); jpanel1.add(jlabel13, cc.xywh(7, 4, 5, 1)); rbPortaNormal.setActionCommand("Normal"); rbPortaNormal.setName("rbPortaNormal"); rbPortaNormal.setText("Normal"); buttongroup2.add(rbPortaNormal); jpanel1.add(rbPortaNormal, cc.xy(9, 5)); rbPortaAuto.setActionCommand("Auto"); rbPortaAuto.setName("rbPortaAuto"); rbPortaAuto.setText("Auto"); buttongroup2.add(rbPortaAuto); jpanel1.add(rbPortaAuto, cc.xy(9, 6)); spPortaTime.setName("spPortaTime"); jpanel1.add(spPortaTime, cc.xy(9, 9)); JLabel jlabel14 = new JLabel(); jlabel14.setText("Time"); jpanel1.add(jlabel14, cc.xy(11, 9)); JLabel jlabel15 = new JLabel(); jlabel15.setText("Octave shift"); jpanel1.add(jlabel15, cc.xywh(7, 12, 5, 1)); cbOctaveShift.setName("cbOctaveShift"); cbOctaveShift.addItem("+2"); cbOctaveShift.addItem("+1"); cbOctaveShift.addItem("0"); cbOctaveShift.addItem("-1"); cbOctaveShift.addItem("-2"); jpanel1.add(cbOctaveShift, cc.xy(9, 13)); JLabel jlabel16 = new JLabel(); jlabel16.setText("Voice retrigger"); jpanel1.add(jlabel16, cc.xywh(7, 16, 5, 1)); cbVoiceRePoly.setActionCommand("Poly"); cbVoiceRePoly.setName("cbVoiceRePoly"); cbVoiceRePoly.setText("Poly"); jpanel1.add(cbVoiceRePoly, cc.xy(9, 17)); cbVoiceReCommon.setActionCommand("Common"); cbVoiceReCommon.setName("cbVoiceReCommon"); cbVoiceReCommon.setText("Common"); jpanel1.add(cbVoiceReCommon, cc.xy(9, 18)); JLabel jlabel17 = new JLabel(); jlabel17.setText("Resources used (PVA / CVA in %)"); jpanel1.add(jlabel17, cc.xywh(1, 20, 8, 1)); JLabel jlabel18 = new JLabel(); jlabel18.setText("Cycles:"); jpanel1.add(jlabel18, cc.xy(1, 22)); JLabel jlabel19 = new JLabel(); jlabel19.setText("Prog. mem:"); jpanel1.add(jlabel19, cc.xy(1, 23)); JLabel jlabel20 = new JLabel(); jlabel20.setText("X mem:"); jpanel1.add(jlabel20, cc.xy(1, 24)); JLabel jlabel21 = new JLabel(); jlabel21.setText("Y mem:"); jpanel1.add(jlabel21, cc.xy(1, 25)); lblCycles.setName("lblCycles"); lblCycles.setText("JLabel"); jpanel1.add(lblCycles, cc.xy(3, 22)); lblProgMem.setName("lblProgMem"); lblProgMem.setText("JLabel"); jpanel1.add(lblProgMem, cc.xy(3, 23)); lblXmem.setName("lblXmem"); lblXmem.setText("JLabel"); jpanel1.add(lblXmem, cc.xy(3, 24)); lblYmem.setName("lblYmem"); lblYmem.setText("JLabel"); jpanel1.add(lblYmem, cc.xy(3, 25)); JLabel jlabel22 = new JLabel(); jlabel22.setText("Zero page:"); jpanel1.add(jlabel22, cc.xy(7, 22)); JLabel jlabel23 = new JLabel(); jlabel23.setText("Dyn mem:"); jpanel1.add(jlabel23, cc.xy(7, 23)); lblZeroPage.setName("lblZeroPage"); lblZeroPage.setText("JLabel"); jpanel1.add(lblZeroPage, cc.xy(9, 22)); lblDynMem.setName("lblDynMem"); lblDynMem.setText("JLabel"); jpanel1.add(lblDynMem, cc.xy(9, 23)); addFillComponents(jpanel1, new int[] { 2, 3, 4, 5, 6, 8, 9, 10, 11 }, new int[] { 3, 5, 6, 7, 9, 10, 11, 13, 14, 15, 17, 18, 19, 21 }); return jpanel1; } /** * Initializer */ protected void initializePanel() { setLayout(new BorderLayout()); add(createPanel(), BorderLayout.CENTER); } }