[英]How to create a professional customized Java Swing Gui?
最近,我承担了彻底修改我公司的软件Gui外观的任务。 到目前为止,我只进行了基本的外观更改。 大多数情况下,通过一些GridBagConstraints处理,可将Gui从默认的Metal L&F升级到System L&F。 但是此任务有所不同:
我们有一位平面设计师绘制了所需的设计:
我知道如何创建这种功能 。 我可能会使用一个双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
,每个并带有其对应的文本,并添加处理,通过更改其颜色或在其周围添加边框并使它的对应面板位于最前面,隐藏所有其他面板,使其看起来处于选中状态。
另外,您可以创建一个自定义的外观 ,但这很难做,并且不能像JLabels
和ImageIcons
一样给您带来自由。
您还可以使用JavaFX (丰富的GUI平台),该平台旨在替代Swing,但是就Swing而言,以上代码是您最好的Swing应用程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.