2015-08-05 2 views
0

Utilisation d'une application de mixage avec plusieurs curseurs. Je veux créer plusieurs instances du même curseur côte à côte pour autant de canaux que je détermine (1-16). Cela va très bien, je veux juste créer de nouvelles instances côte à côte de VolumeControl de gauche à droite. Pour l'instant, ils peuvent tous travailler à partir des mêmes entrées, écouteurs, etc. Je travaille juste à les faire afficher. Voici ce que j'ai pour créer une seule instance de JSlider (principalement tirée d'une démo). NOTE: Je viens du développement d'Android, donc je pourrais aller dans le mauvais sens, de manière compliquée!Ajout de plusieurs instances de composant de curseur à Jpanel

public class VolumeControl extends JPanel implements ChangeListener { 

    ... 

    public static void main(String[] args) { 
     javax.swing.SwingUtilities.invokeLater(VolumeControl::createAndShowGUI); 
    } 

    public VolumeControl() { 

     super(new BorderLayout()); 

     ... 

     JSlider volumeControl = new JSlider(JSlider.VERTICAL, 
       VOLUME_MIN, VOLUME_MAX, currentVolume); 

     volumeControl.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 10)); 
     add(volumeControl, BorderLayout.LINE_START); 
     setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); 
    } 

    private static void createAndShowGUI() { 

     JFrame frame = new JFrame("Volume Control"); 
     VolumeControl animator = new VolumeControl(); 
     frame.add(animator, BorderLayout.CENTER); 

     frame.pack(); 
     frame.setVisible(true); 
    } 

} 
+0

Créer une sorte de méthode d'usine qui peut générer et configurer le curseur à votre goût – MadProgrammer

+0

vous donnez un exemple? –

Répondre

2

Il suffit de créer une ou plusieurs méthodes usine que vous pouvez utiliser pour créer et configurer les curseurs comme vous le souhaitez ...

Sliders

import java.awt.EventQueue; 
import java.awt.GridBagLayout; 
import javax.swing.BorderFactory; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JSlider; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class Test { 

    public static void main(String[] args) { 
     new Test(); 
    } 

    public Test() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new VolmeControlPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public static class VolmeControlPane extends JPanel { 

     protected static final int VOLUME_MIN = 0; 
     protected static final int VOLUME_MAX = 100; 
     protected static final String SLIDER_CONTROL_KEY = "Slider.controlKey"; 

     public VolmeControlPane() { 
      setLayout(new GridBagLayout()); 
      JSlider[] sliders = makeSliders(16); 
      for (JSlider slider : sliders) { 
       add(slider); 
      } 
     } 

     public JSlider[] makeSliders(int count) { 

      JSlider[] sliders = new JSlider[count]; 
      for (int index = 0; index < count; index++) { 
       sliders[index] = makeSlider(VOLUME_MIN, VOLUME_MAX, VOLUME_MIN + (VOLUME_MAX/2)); 
       sliders[index].putClientProperty(SLIDER_CONTROL_KEY, index); 
      } 

      return sliders; 

     } 

     public JSlider makeSlider(int min, int max, int value) { 
      JSlider volumeControl = new JSlider(JSlider.VERTICAL, 
          min, max, value); 

      volumeControl.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 10)); 

      return volumeControl; 
     } 

    } 

} 

Un petit truc que j'ajouté utilisait putClientProperty pour fournir une clé permettant d'identifier le curseur, vous pouvez également utiliser setName. L'idée ici est quand vous attachez un écouteur, vous pouvez interférer le curseur pour la clé et identifier le canal qu'il représente, comme une idée

+0

MadProgrammer vous êtes incroyablement génial !!!! –