是否可以创建自定义GUI这样在Java中?

问题描述 投票:11回答:10

我在Photoshop做这个,我打算用它为我的文件共享应用程序:

Screenshot

我想知道是否有可能创建我的应用程序的GUI,是要去有这个外表和感觉。

如果我不能只使用Eclipse或NetBeans中生成它,是否有任何其他工具,可以帮助我?

java user-interface
10个回答
18
投票

不仅是可能的,但很容易,你不必全力以赴创建自定义外观的方式。

这是我在20分钟内所做的:

20mins

有很多关于如何自定义组件在网络上的信息,而无需创建一个全新的L&F。

了解Swing Architecture有很大帮助。

万一你没有看过的Swing Tutorial在这里。

最后,你需要的文档:Java doc


0
投票

我同意你的意见!其实你可以使用NetBeans创建这样一个GUI。这是一件容易的事,你有很多的选择与合作!我个人使用的是:

1)创建一个具有绘画软件的图形,并将其设置为图标的组件。我使用的设计过程Inkscape的,但任何软件应该做的伎俩。你必须要在这个过程中preatty小心,becouse你不能在NetBeans调整图像(当然,我从来没有尝试过)。

2)延伸的UI类(例如:公共类CustomButtonUI延伸BasicButtonUI),和覆盖的方法漆,然后使用函数setUI(componentName.setUI(新CustomButtonUI);)

这是一个例子的代码:

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import javax.swing.AbstractButton;
import javax.swing.JComponent;
import javax.swing.plaf.basic.BasicButtonUI;

/**
 *
 * @author Ionut Cicio
 */
public class CustomButton extends BasicButtonUI{

    int borderThickness, edgeRoundness;

    @Override
    public void paint(Graphics g, JComponent c) {
        Graphics2D g2 = (Graphics2D)g;
        g2.setColor(c.getBackground());

        borderThickness = 2;
        edgeRoundness = 20;

        g2.setColor(c.getForeground());
        g2.fillRoundRect(0, 0, c.getWidth(), c.getHeight(), edgeRoundness+5, edgeRoundness+5);
        g2.drawRoundRect(0, 0, c.getWidth(), c.getHeight(), edgeRoundness+5, edgeRoundness+5);
        //g2.fillRect(0, 0, c.getWidth(), c.getHeight());
        //g2.drawRect(0, 0, c.getWidth(), c.getHeight());

        g2.setColor(c.getBackground());
        g2.fillRoundRect(borderThickness, borderThickness, c.getWidth()-(int)(borderThickness*2.5), c.getHeight()-(int)(borderThickness*2.5), edgeRoundness, edgeRoundness);
        g2.drawRoundRect(borderThickness, borderThickness, c.getWidth()-(int)(borderThickness*2.5), c.getHeight()-(int)(borderThickness*2.5), edgeRoundness, edgeRoundness);

        super.paint(g, c);
    }

    @Override
    protected void paintFocus(Graphics g, AbstractButton b, Rectangle viewRect, Rectangle textRect, Rectangle iconRect) {

    }
}

它总是发生在使用这两种方法一起,和它给你一个非常大的好处的动画工作磨片!

对于某些类型的UI的作为BasicTextFieldUI的,理解绘画的工作原理是preatty棘手,但还是可以理解的。


33
投票

哦,亲爱的,不,不,不!如果你希望你的用户的眼部流血,然后去了。否则,应遵循什么UI准则适用于您的平台。

要回答你的问题:这是任何现代视窗系统肯定是可行的。

下面是当程序员设计的用户界面是什么一般情况:

wGetGUI (来源:jensroesner.de

Bulk Rename Utility(来源:bulkrenameutility.co.uk


9
投票

你可以甚至可以动态改变它 - 见Look-n-Feel feature挥杆


7
投票

这是可能的。但对于大多数Java开发人员,这需要抑制咽反射在这样一个丑陋的界面。

这里有一个Java interface我使用不超过六其它工具写道。我没有设计它,我只是把艺术家设计,握着我的鼻子,并付诸实施。

至于细节,我建议做尽可能多的样子,并通过可插拔的外观感觉和摇摆的感觉。此外,使用布局管理,而不是让事情在不断的位置不变的尺寸,这样的事情可以增大和缩小到不同的屏幕分辨率,也因此,如果您翻译的东西,你就不会最终不得不调整所有的文字标签,然后一切洗牌其他各地。


3
投票

创建新的LaF实在是太多了。由于所有的Jbutton将是不同的,只是使用JButton.setIcon()JButton.setPressedIcon()和使用您的图像。剩下的就是加载背景和使用奇怪的字体。使用Font.createFont()加载自定义字体。你可能得自己绘制的JProgressBar。覆盖JProgressBar.paintComponent(Graphics g)并得出自己的形象。


2
投票

那么这就是非常可能的,虽然很多了Java Swing开发者可能无法与图像中的UI同意。也许这是正确的。

虽然使它很有可能试图寻找JWindowJTableImageIconDimensionJProgressBar。您还需要足够的理解为Java布局和事件,如MouseEventsActionEvents

希望帮助。


1
投票

你必须创建大量的定制JComponents的。除此之外,可能的。


1
投票

我会建议

MiG Layout

对于布局组件,它很容易掌握,也比标准的布局管理方式更强大(和它有一个很好的调试模式,也是如此)。


1
投票

它使用Swing是很有可能的。

退房NetBeans GUI Builder

© www.soinside.com 2019 - 2024. All rights reserved.