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.
Peut-être utiliser javaFX pour cela? – keuleJ
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
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