如何创建专业定制的Java Swing Gui?

我最近被赋予了完全修改我公司的一个软件Gui外观的任务。 到目前为止,我只做了基本的外观改变。 主要通过一些GridBagConstraints处理将Gui从默认的Metal L&F升级到System L&F。 但这项任务有所不同:

我们有一位平面设计师绘制了所需的设计: 在此处输入图像描述

我知道如何创建这种function 。 我可能会使用双JTabbedPanes或只是添加Jpanels。

我的问题是如何将图形与gui对象合并。 为了制作一个看起来像这样的Java Swing应用程序,我应该问设计师给我什么 – 使用圆角标签和标签面板颜色的合并? 当我现在给出的所有内容都是上面的这张图时,我怎样才能让JPanels或JTabbedPanes穿上这件华丽的服装呢?

大多数自定义Swing GUI都是使用带有ImageIcons的JLabel和自定义处理代码制作的。 例如:

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); }); } } 

此代码创建一个自定义GUI,其中包含自定义框架,边框和用于拖动窗口的夹点,包括退出和最小化按钮,当鼠标进入它们时会发光,使它们看起来很专业。 (每个组件的图像都需要位于项目的根目录中才能生效。)如果要创建自定义选项卡式窗格,请创建带有ImageIcons JLabels ,它们看起来像圆形标签或任何您希望它们看起来像的东西,每个在其上添加相应的文本,并添加处理,通过更改其颜色或在其周围添加边框使其看起来被选中,并将其相应的面板放在前面,隐藏所有其他面板。

或者,您可以创建自定义外观 ,但这很难做到,并且不会让您自由地使用JLabelsImageIcons使用。

您还可以使用JavaFX ,这是一个丰富的GUI平台,旨在取代Swing,但就Swing而言,上述代码是Swing应用程序的最佳选择。