有可能在Java中构建这样的自定义GUI吗?

有可能在Java中构建这样的自定义GUI吗?,java,user-interface,Java,User Interface,这是我在Photoshop中制作的,我计划将其用于我的文件共享应用程序: 我想知道是否有可能为我的应用程序创建具有这种外观的GUI 如果我不能仅使用eclipse或NetBeans构建它,还有其他工具可以帮助我吗?这是可能的。但是对于大多数Java开发人员来说,在这样一个丑陋的界面上,这需要抑制gag反射 这是一个我用vi以外的工具写的。我没有设计它,我只是拿了艺术家的设计,捏着鼻子,然后实现了它 至于细节,我建议通过Swing中的可插拔外观来完成尽可能多的外观。另外,使用LayoutMana

这是我在Photoshop中制作的,我计划将其用于我的文件共享应用程序:

我想知道是否有可能为我的应用程序创建具有这种外观的GUI


如果我不能仅使用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) {

    }
}