有可能在Java中构建这样的自定义GUI吗?
这是我在Photoshop中制作的,我计划将其用于我的文件共享应用程序: 我想知道是否有可能为我的应用程序创建具有这种外观的GUI有可能在Java中构建这样的自定义GUI吗?,java,user-interface,Java,User Interface,这是我在Photoshop中制作的,我计划将其用于我的文件共享应用程序: 我想知道是否有可能为我的应用程序创建具有这种外观的GUI 如果我不能仅使用eclipse或NetBeans构建它,还有其他工具可以帮助我吗?这是可能的。但是对于大多数Java开发人员来说,在这样一个丑陋的界面上,这需要抑制gag反射 这是一个我用vi以外的工具写的。我没有设计它,我只是拿了艺术家的设计,捏着鼻子,然后实现了它 至于细节,我建议通过Swing中的可插拔外观来完成尽可能多的外观。另外,使用LayoutMana
如果我不能仅使用eclipse或NetBeans构建它,还有其他工具可以帮助我吗?这是可能的。但是对于大多数Java开发人员来说,在这样一个丑陋的界面上,这需要抑制gag反射 这是一个我用vi以外的工具写的。我没有设计它,我只是拿了艺术家的设计,捏着鼻子,然后实现了它
至于细节,我建议通过Swing中的可插拔外观来完成尽可能多的外观。另外,使用LayoutManager,而不是在固定的位置使事物保持恒定的大小,这样事物可以增长和收缩到不同的屏幕分辨率,并且如果你翻译事物,你不必调整所有文本标签的大小,然后再将其他所有内容混洗。哦,天哪,不!如果你想让用户的眼睛流血,那就去做吧。否则,请遵循适用于您的平台的任何UI准则 回答您的问题:这在任何现代窗口系统中都是可行的 以下是程序员设计UI时通常发生的情况:
(来源:)
(来源:)您可以,甚至可以动态更改它-请参阅swing的部分,您必须创建许多自定义JComponent。除此之外,这是可能的。使用
查看这是很有可能的,尽管很多Java Swing开发人员可能不同意图中的UI。也许这是正确的 尽管为了使其成为可能,请尝试查看
JWindow
,JTable
,ImageIcon
,维度
,JProgressBar
。
您还需要充分了解Java布局和事件,如MouseEvents
,ActionEvents
希望这能有所帮助。创建新的LaF太难了。由于所有JButton都不同,只需使用
JButton.setIcon()
和JButton.setPressedIcon()
并使用图像即可。剩下的就是加载背景和使用奇怪的字体。用于加载自定义字体。您可能需要绘制自己的JProgressbar。覆盖JProgressBar.paintComponent(图形g)
并绘制您自己的图像。我建议
对于布局组件,它非常容易掌握,而且比标准布局管理器功能更强大(而且它还有一个很好的调试模式)。不仅可行,而且非常简单,您不必费尽心机创建自定义外观 这是我在20分钟内制作的: 网上有很多关于如何定制组件的信息,而不必创建一个全新的L&F 了解这个问题会有很大帮助 以防万一,你还没读过它,它就在这里 最后你需要医生:我不同意你的观点实际上,您可以使用NetBeans来创建这样一个GUI。 这也很简单,你有很多选择!我个人使用的是: 1)使用绘图软件创建图形,并将其设置为组件的图标。我在设计过程中使用InkScape,但任何软件都应该做到这一点。在这个过程中你必须格外小心,因为你不能在NetBeans中调整图像的大小(嗯,我从未尝试过) 2)扩展UI类(例如:公共类CustomButtonUI扩展BasicButtonUI),并重写方法paint,然后使用函数setUI(componentName.setUI(new CustomButtonUI);) 这是一个示例代码: 它总是碰巧同时使用这两种方法,而且在制作动画时给您带来了很大的好处
对于某些类型的UI,如基本的ExtFieldUI,理解绘画的工作原理是一件棘手的事,但仍然可以理解。+1好的,很好。现在我的键盘上到处都是健怡可乐。握手如果你想问一个特定的问题,问一个特定的问题。否则,不要抱怨我回答了你的“可能吗”问题。好吧,让我说得准确一点。我应该使用哪些程序或工具来制作我的自定义GUI?那一个看起来相当复杂。谢谢你的例子。我建议的唯一程序或工具是一个好的编辑器和一个用于查找资料的web浏览器。这就是我用过的所有东西。它看起来像普通的GUI,带有通用的GUI组件。我想要一些东西来创建自定义组件,例如我添加的图片中的组件。有什么软件可以做这种事情吗?我明白你们想说的。程序员不是设计师。这是一个普遍的事实:)这实际上比我在这里看到的大多数UI都好。我不是在开玩笑。我在那里很显眼地看到一个“简单”的标签。我打赌它的可调整选项更少。它可能是第一次使用时默认打开的选项卡,但除此之外……在我看来还不错。太棒了!:我知道如何使用Swing,只是不知道所有的选项。谢谢你帮了我的忙。我介绍了有关GUI的所有基础知识,但这仍然是我力不从心的事情。您可能应该先在常规的外观中进行操作,然后再考虑时髦的外观。JButton.setBorder(BorderFactory.createEmptyBorder());和JButton.set不透明(true);是你的朋友吗“下岗”??壁橱里有没有“床铺”。。。也许是“布置组件”?
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) {
}
}