我在Photoshop中制作了这个,我打算将它用于我的文件共享应用程序:
我想知道是否有可能为我的应用程序创建具有这种外观和感觉的GUI。
如果我不能仅使用eclipse或NetBeans构建它,还有其他工具可以帮助我吗?
答案 0 :(得分:33)
回答你的问题:这在任何现代的窗口系统中都是可行的。
以下是程序员设计UI时通常会发生的事情:
(来源:jensroesner.de)
答案 1 :(得分:18)
不仅可行而且非常简单,您无需一直创建自定义外观。
这是我在20分钟内所做的:
网上有很多关于如何定制组件的信息,而无需创建一个全新的L& F.
了解Swing Architecture有很大帮助。
如果您还没有阅读,Swing Tutorial就在这里。
最后,您需要文档:Java doc
答案 2 :(得分:9)
您甚至可以动态更改它 - 请参阅摆放的Look-n-Feel feature
答案 3 :(得分:7)
这是可能的。但对于大多数Java开发人员来说,需要在如此丑陋的界面上抑制呕吐反射。
这是我用vi以外的工具编写的Java interface。我没有设计它,我只是采取了艺术家的设计,抓住了我的鼻子,并实施了它。
至于具体细节,我建议通过Swing中的可插拔外观来完成外观和感觉。此外,使用LayoutManagers而不是在恒定的位置使事物大小不变,这样事情就可以增长和缩小到不同的屏幕分辨率,并且如果你翻译的话,你最终不必调整所有文本标签的大小,然后改变一切别的。
答案 4 :(得分:3)
创建新的LaF太多了。由于您的所有JButton都不同,只需使用JButton.setIcon()
和JButton.setPressedIcon()
并使用您的图片即可。其余的是加载背景和使用奇怪的字体。使用Font.createFont()
加载自定义字体。您可能需要绘制自己的JProgressbar。覆盖JProgressBar.paintComponent(Graphics g)
并绘制自己的图像。
答案 5 :(得分:2)
这很有可能,尽管很多Java Swing开发人员可能不同意图像中的UI。也许是这样。
尽管可以尝试查看JWindow
,JTable
,ImageIcon
,Dimension
,JProgressBar
。
您还需要充分了解Java布局和事件,例如MouseEvents
,ActionEvents
。
希望有所帮助。
答案 6 :(得分:1)
您必须创建许多自定义JComponents。除此之外,可能。
答案 7 :(得分:1)
很有可能使用Swing。
答案 8 :(得分:1)
答案 9 :(得分:0)
我必须不同意您! 实际上,您可以使用 NetBeans 创建这样的 GUI 。 也很容易,您有很多选择可以使用!我个人使用的是:
1) 使用绘画软件创建图形,并将其设置为组件的 Icon 。我用于设计过程 InkScape ,但是任何软件都可以解决问题。在此过程中,您必须格外小心,因为在NetBeans中无法调整图像大小(嗯,我从未尝试过)。
2) 扩展 UI 类(例如:公共类CustomButtonUI扩展BasicButtonUI),并覆盖方法 paint ,然后使用函数setUI(componentName.setUI(new 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) {
}
}
总是碰巧同时使用两种方法 ,并且为 动画 给您带来了很大的好处。 strong>!
对于某些 UI (如 BasicTextFieldUI ),了解绘画的工作原理很棘手,但仍然可以理解。