2011-08-23 4 views
2

J'ai un JPanel avec du contenu et je voudrais l'entourer de flèches de sorte que lorsque vous cliquez sur un, le jpanel change (à un autre). J'ai été habitué à ce schéma d'interface utilisateur/idiome je suppose en flash mais je ne le trouve plus. Un simple clic sur les flèches a également pour effet de cliquer sur la flèche qui clignote lorsqu'elle est sélectionnée.Comment ajouter des flèches de transition flashy?

Questions: 1. Un exemple pour faire référence à ce dont je parle même en flash? 2. Connaissez-vous une bibliothèque qui fait cela en Java? Peut-être avec JavaFX? 3. Exemple d'application/code?

Sketch of the arrows surrounding a content area/photo to change

+0

sorte de l'idée de flèche pour afficher plus de contenu: http://cfg.cit.cornell.edu/design/figs/fig.03.06.gif – simpatico

Répondre

2

Cela peut être fait avec swing ordinaire.

Suggestion:

  1. Utilisez CardLayout pour conteneur facile commutation
  2. Utilisez BasicArrowButton pour les boutons directionnels

Je vais vous donner un peu SSCCE. En attendant, voir aussi:


est ici tout à fait un long SSCCE:

public final class SwingTransitionDemo { 
    public static void main(String[] args){ 
     SwingUtilities.invokeLater(new Runnable(){ 
      @Override 
      public void run() { 
       createAndShowGUI();    
      } 
     }); 
    } 

    private static void createAndShowGUI(){ 
     final JFrame frame = new JFrame("Swing Transition Demo"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(JMainPane.newInstance()); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    private static final class JMainPane extends JPanel{ 
     private static final int PAD = 5; 

     private JMainPane(){ 
      super(new GridBagLayout()); 
      setBackground(Color.PINK); 
      GridBagConstraints c = new GridBagConstraints(); 

      // Create north button 
      c.gridx = 1; 
      c.gridy = 0; 
      c.insets = new Insets(PAD, 0, PAD, 0); 
      c.fill = GridBagConstraints.HORIZONTAL; 
      final BasicArrowButton north = new BasicArrowButton(BasicArrowButton.NORTH); 
      north.addActionListener(BasicArrowButtonActionListener.getInstance()); 
      add(north, c); 

      // Create west button 
      c.gridx = 0; 
      c.gridy = 1; 
      c.insets = new Insets(0, PAD, 0, PAD); 
      c.fill = GridBagConstraints.VERTICAL; 
      final BasicArrowButton west = new BasicArrowButton(BasicArrowButton.WEST); 
      west.addActionListener(BasicArrowButtonActionListener.getInstance()); 
      add(west, c); 

      c.gridx = 1; 
      c.gridy = 1; 
      c.fill = GridBagConstraints.VERTICAL; 
      add(JCardPane.getInstance(), c); 

      // Create east button 
      c.gridx = 2; 
      c.gridy = 1; 
      c.insets = new Insets(0, PAD, 0, PAD); 
      c.fill = GridBagConstraints.VERTICAL; 
      final BasicArrowButton east = new BasicArrowButton(BasicArrowButton.EAST); 
      east.addActionListener(BasicArrowButtonActionListener.getInstance()); 
      add(east, c); 

      // Create south button 
      c.gridx = 1; 
      c.gridy = 2; 
      c.insets = new Insets(PAD, 0, PAD, 0); 
      c.fill = GridBagConstraints.HORIZONTAL; 
      final BasicArrowButton south = new BasicArrowButton(BasicArrowButton.SOUTH); 
      south.addActionListener(BasicArrowButtonActionListener.getInstance()); 
      add(south, c); 
     } 

     public static final JMainPane newInstance(){ 
      return new JMainPane(); 
     } 

     private static final class JCardPane extends JPanel{ 
      private static JCardPane INSTANCE; 

      private JCardPane(){ 
       super(new CardLayout()); 
       setBorder(BorderFactory.createLineBorder(Color.BLACK)); 
       add(Box.createRigidArea(new Dimension(200, 200)), ""); 
       add(Card.newInstance(Color.RED, "North"), String.valueOf(BasicArrowButton.NORTH)); 
       add(Card.newInstance(Color.ORANGE, "WEST"), String.valueOf(BasicArrowButton.WEST)); 
       add(Card.newInstance(Color.CYAN, "SOUTH"), String.valueOf(BasicArrowButton.SOUTH)); 
       add(Card.newInstance(Color.GREEN, "EAST"), String.valueOf(BasicArrowButton.EAST)); 
      } 

      public static final JCardPane getInstance(){ 
       if(INSTANCE == null){ 
        INSTANCE = new JCardPane(); 
       } 

       return INSTANCE; 
      } 

      @Override 
      public Dimension getPreferredSize(){ 
       return new Dimension(200, 200); // for demonstration purposes only 
      } 

      private static final class Card extends JPanel{ 
       private Card(final Color c, final String s){ 
        super(); 
        setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); 
        setBackground(c); 

        // Create components 
        add(Box.createVerticalGlue()); 
        final JLabel label = new JLabel(s); 
        label.setAlignmentX(CENTER_ALIGNMENT); 
        add(label); 
        add(Box.createVerticalGlue()); 
       } 

       public static final Card newInstance(final Color c, final String s){ 
        return new Card(c, s); 
       } 
      } 
     } 

     private static final class BasicArrowButtonActionListener implements ActionListener{ 
      private static BasicArrowButtonActionListener INSTANCE; 

      private BasicArrowButtonActionListener(){} // prevent external instantiation 

      public static final BasicArrowButtonActionListener getInstance(){ 
       if(INSTANCE == null){ 
        INSTANCE = new BasicArrowButtonActionListener(); 
       } 

       return INSTANCE; 
      } 

      @Override 
      public void actionPerformed(ActionEvent e) {     
       CardLayout cl = (CardLayout)JCardPane.getInstance().getLayout(); 
       cl.show(JCardPane.getInstance(), String.valueOf((((BasicArrowButton)e.getSource()).getDirection()))); 
      } 
     } 
    } 
} 

Affichage initial

enter image description here

Et si vous cliquez sur, disons, la flèche directionnelle "sud" ...

enter image description here

Il utilise diverses dispositions, comprenant GridBagLayout, BoxLayout et CardLayout. Gardez à l'esprit que la majorité de ce code est juste remplissage. Jouez avec et laissez-moi savoir si c'est dans le stade!

Voir aussi:

Questions connexes