【发布时间】:2010-01-12 12:54:25
【问题描述】:
我在 Photoshop 中制作了这个,我打算将它用于我的文件共享应用程序:
我想知道是否可以为我的应用程序创建具有这种外观和感觉的 GUI。
如果我不能仅使用 eclipse 或 NetBeans 构建它,还有其他工具可以帮助我吗?
【问题讨论】:
-
您可能应该先在常规外观中进行操作,然后再考虑时髦的外观。
标签: java user-interface
我在 Photoshop 中制作了这个,我打算将它用于我的文件共享应用程序:
我想知道是否可以为我的应用程序创建具有这种外观和感觉的 GUI。
如果我不能仅使用 eclipse 或 NetBeans 构建它,还有其他工具可以帮助我吗?
【问题讨论】:
标签: java user-interface
不仅可能而且非常简单,您不必一路创建自定义外观。
这是我在 20 分钟内完成的:
网络上有很多关于如何自定义组件而无需创建全新 L&F 的信息。
了解Swing Architecture 有很大帮助。
如果您还没有阅读,Swing Tutorial 就在这里。
最后你需要文档:Java doc
【讨论】:
创建新的 LaF 太多了。由于您的所有 JButton 都不同,因此只需使用 JButton.setIcon() 和 JButton.setPressedIcon() 并使用您的图像。剩下的就是加载背景和使用奇怪的字体。使用Font.createFont() 加载自定义字体。您可能必须绘制自己的 JProgressbar。覆盖 JProgressBar.paintComponent(Graphics g) 并绘制您自己的图像。
【讨论】:
这很有可能,尽管很多 Java Swing 开发人员可能不同意图像中的 UI。也许是对的。
虽然为了让它成为可能,请尝试查看JWindow、JTable、ImageIcon、Dimension、JProgressBar。
您还需要充分了解 Java 布局和事件,例如 MouseEvents、ActionEvents。
希望对您有所帮助。
【讨论】:
很可能使用Swing。
【讨论】:
我不同意你的观点!其实你可以使用NetBeans来创建这样一个图形用户界面。 这也简单,您有很多选择!我个人使用的是:
1)用绘图软件创建图形,并将其设置为图标到组件。我在设计过程中使用 InkScape,但 任何软件 都可以解决问题。在此过程中您必须非常小心,因为您在 NetBeans 中无法调整图像大小(好吧,我从未尝试过)。
2)扩展UI类(例如:public class CustomButtonUI extend 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) {
}
}
它总是碰巧同时使用这两种方法,并且在处理动画时会给您带来很大的好处强>!
对于某些类型的 UI,如 BasicTextFieldUI,理解绘画的工作原理非常棘手,但仍然可以理解。
【讨论】:
天哪,不不不!如果您希望用户的眼睛流血,那就去做吧。否则,请遵循适合您平台的任何 UI 指南。
回答您的问题:这在任何现代窗口系统中都是可行的。
程序员设计 UI 时通常会发生以下情况:
(来源:jensroesner.de)
【讨论】:
你可以,甚至你可以动态地改变它——见摇摆的Look-n-Feel feature
【讨论】:
这是可能的。但是对于大多数 Java 开发人员来说,这需要在如此丑陋的界面上抑制作呕反射。
这是一个Java interface,我使用 vi 以外的其他工具编写。我没有设计它,我只是拿了艺术家的设计,捏着鼻子,然后实现它。
至于细节,我建议通过 Swing 中的可插入外观和感觉来做尽可能多的外观和感觉。此外,使用 LayoutManagers 而不是在恒定位置使事物大小不变,以便事物可以增长和缩小到不同的屏幕分辨率,并且如果您翻译内容,您最终不必调整所有文本标签的大小,然后将所有内容打乱其他地方。
【讨论】:
您必须创建许多自定义 JComponent。除此之外,可能。
【讨论】:
【讨论】: