【问题标题】:Is it possible to build custom GUI like this in Java?是否可以在 Java 中构建这样的自定义 GUI?
【发布时间】:2010-01-12 12:54:25
【问题描述】:

我在 Photoshop 中制作了这个,我打算将它用于我的文件共享应用程序:

我想知道是否可以为我的应用程序创建具有这种外观和感觉的 GUI。

如果我不能仅使用 eclipse 或 NetBeans 构建它,还有其他工具可以帮助我吗?

【问题讨论】:

  • 您可能应该先在常规外观中进行操作,然后再考虑时髦的外观。

标签: java user-interface


【解决方案1】:

不仅可能而且非常简单,您不必一路创建自定义外观。

这是我在 20 分钟内完成的:

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

了解Swing Architecture 有很大帮助。

如果您还没有阅读,Swing Tutorial 就在这里。

最后你需要文档:Java doc

【讨论】:

  • JButton.setBorder(BorderFactory.createEmptyBorder());和 JButton.setOpaque(true);是你的朋友。
【解决方案2】:

创建新的 LaF 太多了。由于您的所有 JButton 都不同,因此只需使用 JButton.setIcon()JButton.setPressedIcon() 并使用您的图像。剩下的就是加载背景和使用奇怪的字体。使用Font.createFont() 加载自定义字体。您可能必须绘制自己的 JProgressbar。覆盖 JProgressBar.paintComponent(Graphics g) 并绘制您自己的图像。

【讨论】:

    【解决方案3】:

    这很有可能,尽管很多 Java Swing 开发人员可能不同意图像中的 UI。也许是对的。

    虽然为了让它成为可能,请尝试查看JWindowJTableImageIconDimensionJProgressBar。 您还需要充分了解 Java 布局和事件,例如 MouseEventsActionEvents

    希望对您有所帮助。

    【讨论】:

    • 它确实对我有帮助。我涵盖了有关 GUI 的所有基础知识,但这仍然超出我的范围。
    【解决方案4】:

    很可能使用Swing

    查看NetBeans GUI Builder

    【讨论】:

    • 我知道如何使用 Swing,只是不知道所有选项。谢谢
    【解决方案5】:

    我不同意你的观点!其实你可以使用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,理解绘画的工作原理非常棘手,但仍然可以理解。

    【讨论】:

      【解决方案6】:

      天哪,不不不!如果您希望用户的眼睛流血,那就去做吧。否则,请遵循适合您平台的任何 UI 指南。

      回答您的问题:这在任何现代窗口系统中都是可行的。

      程序员设计 UI 时通常会发生以下情况:


      (来源:jensroesner.de

      (来源:bulkrenameutility.co.uk

      【讨论】:

      • 这看起来像带有通用 GUI 组件的普通 GUI。我想要一些东西来创建自定义组件,例如我添加的图片中的那些。有没有这种软件?
      • 我明白你们都想说什么。程序员不是设计师。这是一个普遍的事实:)
      • 这实际上看起来比我在这里看到的大多数 UI 都好。我不是在开玩笑。
      • 我在那里非常显眼地看到了一个“简单”标签。我敢打赌,它的可调整选项更少。它可能应该是首次使用的默认打开选项卡,但除此之外……对我来说看起来不错。
      • 华丽! :D 如果不是那么悲伤,它就不会那么有趣了。
      【解决方案7】:

      你可以,甚至你可以动态地改变它——见摇摆的Look-n-Feel feature

      【讨论】:

        【解决方案8】:

        这是可能的。但是对于大多数 Java 开发人员来说,这需要在如此丑陋的界面上抑制作呕反射。

        这是一个Java interface,我使用 vi 以外的其他工具编写。我没有设计它,我只是拿了艺术家的设计,捏着鼻子,然后实现它。

        至于细节,我建议通过 Swing 中的可插入外观和感觉来做尽可能多的外观和感觉。此外,使用 LayoutManagers 而不是在恒定位置使事物大小不变,以便事物可以增长和缩小到不同的屏幕分辨率,并且如果您翻译内容,您最终不必调整所有文本标签的大小,然后将所有内容打乱其他地方。

        【讨论】:

        • +1 好的,很好。健怡可乐现在在我的键盘上。 握拳
        • 如果你想问一个具体的问题,问一个具体的问题。否则不要抱怨我回答了你的“有可能”的问题。
        • 好的,让我准确地说。我应该使用哪些程序或工具来制作我的自定义 GUI?
        • 那个看起来相当复杂。谢谢你的例子。
        • 我建议的唯一程序或工具是一个好的编辑器和一个用于查找内容的网络浏览器。这就是我用过的所有东西。
        【解决方案9】:

        您必须创建许多自定义 JComponent。除此之外,可能。

        【讨论】:

          【解决方案10】:

          我会推荐

          MiG Layout

          对于布局组件,它非常容易掌握,并且比标准布局管理器更强大(而且它还有一个很好的调试模式)。

          【讨论】:

          • "布局"??壁橱里有没有“布局”……也许,“布局组件”?
          猜你喜欢
          • 2016-11-23
          • 1970-01-01
          • 1970-01-01
          • 2019-07-30
          • 2012-05-04
          • 1970-01-01
          • 2012-04-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多