2014-09-07 3 views
1

On m'a récemment confié la tâche de réviser complètement l'apparence Gui du logiciel de mon entreprise. Jusqu'à présent, je ne faisais que des changements de look-n-feel. Principalement la mise à niveau du Gui par rapport au paramètre par défaut Metal L & F vers le système L & F avec quelques manipulations de GridBagConstraints. Mais cette tâche est quelque chose de différent:Comment créer un Java Swing Gui professionnel personnalisé?

Nous avons un graphiste qui a dessiné la conception souhaitée: enter image description here

Je sais comment créer ce type de fonctionnalité . Je pourrais utiliser un double JTabbedPanes ou juste ajouter Jpanels tout autour.

Mon problème est de savoir comment incorporer les graphiques avec des objets gui. Que dois-je demander au concepteur de me donner afin de faire une application Java Swing qui ressemble à ceci - avec les onglets arrondis et la fusion des couleurs du panneau à onglets? Comment puis-je faire JPanels ou un JTabbedPanes porter ce costume de fantaisie quand tout ce que je suis donné en ce moment est ce dessin ci-dessus?

+0

Peut-être utiliser javaFX pour cela? – keuleJ

+2

Jetez un coup d'oeil autour pour d'autres regard et sensations qui pourraient répondre à vos besoins. Pensez également à regarder l'aspect synthétique et la sensation qui vous permet d'habiller les éléments sans avoir besoin de réécrire complètement l'apparence ... – MadProgrammer

+0

Finalement, j'ai divisé hors ligne l'ensemble de l'écran en un réseau de différents rectangles. J'ai remis cette charte graphique au graphiste et elle m'a fourni toutes les pièces de l'écran que j'ai placées sur JPanels et attachées ensemble à l'aide de GridBagLayout. J'ai alors substitué l'écouteur de souris pour le JPanel spécifique qui a eu besoin d'actions et l'écran était aussi bon que prêt. – uzil24

Répondre

2

Le plus personnalisé Les interfaces graphiques de Swing sont fabriquées à l'aide de JLabels avec ImageIcons et du code de traitement personnalisé. Par exemple:

public class CustomGUI extends JFrame { 

private JLabel frame, border, grip, exit, minimize; 
private Point initialClick; 

public CustomGUI() { 
    initComponents(); 
} 

private void initComponents() { 
    setTitle("CustomGUI"); 
    setMinimumSize(new Dimension(640, 480)); 
    setLocationRelativeTo(null); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    setUndecorated(true); 
    setBackground(new Color(0, 0, 0, 0)); 
    setLayout(null); 
    pack(); 

    frame = new JLabel(); 
    frame.setBounds(0, 0, 640, 480); 
    frame.setIcon(new ImageIcon(getClass().getResource("frame.png")); 

    border = new JLabel(); 
    border.setBounds(0, 0, 640, 480); 
    border.setIcon(new ImageIcon(getClass().getResource("border.png")); 

    grip = new JLabel(); 
    grip.setBounds(215, 0, 376, 25); 
    grip.setIcon(new ImageIcon(getClass().getResource("grip.png")); 
    grip.addMouseListener(new MouseAdapter() { 
     @Override 
     public void mousePressed(MouseEvent evt) { 
      initialClick = evt.getPoint(); 
     } 
    }); 
    grip.addMouseMotionListener(new MouseMotionAdapter() { 
     @Override 
     public void mouseDragged(MouseEvent evt) { 
      int thisX = getLocation().x; 
      int thisY = getLocation().y; 
      int xMoved = (thisX + evt.getX()) - (thisX + initialClick.x); 
      int yMoved = (thisY + evt.getY()) - (thisY + initialClick.y); 
      int posX = thisX + xMoved; 
      int posY = thisY + yMoved; 
      setLocation(posX, posY); 
     } 
    }); 

    exit = new JLabel(); 
    exit.setBounds(620, 4, 32, 16); 
    exit.setIcon(new ImageIcon(getClass().getResource("exit.png")); 
    exit.addMouseListener(new MouseAdapter() { 
     @Override 
     public void mouseClicked(MouseEvent evt) { 
      dispatchEvent(new WindowEvent(new UI(), WindowEvent.WINDOW_CLOSING)); 
     } 
     @Override 
     public void mouseEntered(MouseEvent evt) { 
      exit.setIcon(new ImageIcon(getClass().getResource("exitGlow.png")); 
     } 
     @Override 
     public void mouseExited(MouseEvent evt) { 
      exit.setIcon(new ImageIcon(getClass().getResource("exit.png")); 
     } 
    }); 

    minimize = new JLabel(); 
    minimize.setBounds(600, 4, 16, 16); 
    minmize.setIcon(new ImageIcon(getClass().getResource("minimize.png")); 
    minimize.addMouseListener(new MouseAdapter() { 
     @Override 
     public void mouseClicked(MouseEvent evt) { 
      setState(Frame.ICONIFIED); 
     } 
     @Override 
     public void mouseEntered(MouseEvent evt) { 
      minimize.setIcon(new ImageIcon(getClass().getResource("minimizeGlow.png")); 
     } 
     @Override 
     public void mouseExited(MouseEvent evt) { 
      minimize.setIcon(new ImageIcon(getClass().getResource("minimize.png")); 
     } 
    }); 

    add(minimize); 
    add(exit); 
    add(grip); 
    add(border); 
    add(frame); 
} 

public static void main(String[] args) { 
    EventQueue.invokeLater(() -> { 
     new CustomGUI().setVisible(true); 
    }); 
} 
} 

Ce code crée une interface graphique personnalisée avec un cadre personnalisé, la bordure et une poignée pour faire glisser la fenêtre, y compris la sortie et réduisent au minimum les boutons qui brillent lorsque votre souris les pénètre, ce qui les rend regarder proffesional. (Les images de chaque composant doivent être à la racine du projet pour que cela fonctionne.) Si vous voulez créer des volets à onglets personnalisés, créez JLabels avec ImageIcons qui ressemblent à des onglets arrondis ou à quoi vous voulez qu'ils ressemblent, chacun avec son texte correspondant sur celui-ci, et ajouter une manipulation qui lui donnera l'air d'être sélectionné en changeant sa couleur ou en ajoutant une bordure autour de lui et amener son panneau correspondant à l'avant, cachant tous les autres panneaux.

Alternativement, vous pouvez create a custom Look and Feel, mais cela est plus difficile à faire et ne vous donne pas la liberté que l'utilisation de JLabels avec ImageIcons.

Vous pouvez également utiliser JavaFX, une plate-forme graphique riche qui a été conçue pour remplacer Swing, mais en ce qui concerne Swing, le code ci-dessus est votre meilleur choix pour une application Swing.

+0

Merci pour votre réponse élaborée. J'ai finalement utilisé JLabels sur JPanels avec des écouteurs de souris comme vous l'avez suggéré. – uzil24