【问题标题】:Creating a GUI for screen recorder [closed]为屏幕录像机创建 GUI [关闭]
【发布时间】:2012-12-17 17:17:36
【问题描述】:

我在看 Randel Schofer 的屏幕录像机,我喜欢它的 GUI。我试图在不查看源代码的情况下自行设计一个。我知道这是最简单的方法,但我想自己解决问题。
我遇到了很多问题:

  • 我如何获得这样的背景? 我知道GradientPaint 可以做到这一点。我用它来填充矩形和圆形,但我如何将它用于JFrame
  • 如何添加该箭头?我知道如何为按钮添加图像,但这些图像是 24 x 24 且相当大,所以我不知道那是什么
  • 这是一个 JPopupMenu 吗?
  • 我知道如何创建它们并赋予它们功能,但我所有的弹出菜单都在 JFrame
  • **那是什么?当我点击时,它会打开“视频”文件夹问题说明了一切
  • 如何添加计时器? 我需要线程来维持时间吗?如果是,我该如何使用run() 方法?
  • 编辑:
    public class ScreenRecorder extends JFrame{
        protected class background extends JPanel{
            @Override
            public void paintComponent(Graphics g){
    
            }
        }
    }
    

    我仍然无法获得背景。请帮忙。

    【问题讨论】:

    • 确实,您可以通过覆盖paintComponent 然后使用GradientPaint 来获取该背景。箭头也很可能是图像,但也可能是纯文本;无论哪种方式,它最有可能在JLabel 上,并且标签可能有一个MouseListener 来处理从点击点创建可能的JPopupMenu。至于打开“视频”文件夹,这是一个简单的Runtime.getRuntime().exec(..) 类似explorer C:\somedir\somedir\Videos 的命令。
    • @Vulcan 请对最后一个多说一点。我知道“视频”文件夹在 Windows 中有一个预定义的位置。我怎么知道我的程序在哪个操作系统上运行?然后,根据操作系统,必须设置位置:)
    • 你的意思是,你想创建一个秒表?如果是这样,请使用摇摆计时器:docs.oracle.com/javase/tutorial/uiswing/misc/timer.html
    • Swing Timer 用于调度事件(例如每 30 毫秒捕获一次屏幕)。要确定经过的时间,请使用两个不同时间点的System.nanoTime() 之间的差异。 Timer可以用来追踪经过的时间,但没必要这么用。
    • 看@sdasdadas 的回答。但是......小心那个计时器!当您启动它时,您还应该在退出应用程序之前停止它。因此,如果单击 JFrame 上的关闭按钮,您应该创建一个窗口侦听器来停止它。您也可以通过在setDefaultCloseOperation() 方法中将JFrame.EXIT_ON_CLOSE 作为参数传递来暴力停止它..

    标签: java popup jframe


    【解决方案1】:
    1. 在 JFrame 中覆盖 JPanel 的paintComponent,并以与 Shape 相同的方式绘制渐变。

    2. 您必须在 Photoshop/GIMP 中创建该图像,然后将其添加到 JLabel 或 JButton(取决于交互性)。

    3. 是的 - 从技术上讲,它仍然位于 JFrame 内部(在 JFrame 内的 JLabel/JButton 上设置)。只是因为 JFrame 太小了,所以它在外面绘制。

    4. java: Open folder on button click

    5. 定时器可以这样实现:

      ActionListener listener = new ActionListener()  
              {  
                  public void actionPerformed(ActionEvent e)  
                  {  
                      // Update the display with the time.
                  }  
              }; 
      timer = new Timer(speed, listener);
      timer.setInitialDelay(pause);
      timer.start(); 
      

    【讨论】:

    • 我该如何添加那个计时器?
    • 下次您可能应该将这些问题分成不同的问题,因为您已经正确解构了 GUI。不过,我会用计时器编辑我的答案。
    • 好的,所以我扩展了JFrame,它说我不能覆盖paintComponent(),因为我必须覆盖一些超类方法。我知道JFrameJComponent
    • 对不起 - 我的意思是覆盖你的 JPanel /within/ 你的 JFrame。
    • 好的,我将代码添加到问题中。如果您仍然可以提供帮助
    猜你喜欢
    • 2013-05-01
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 2012-07-10
    • 2019-01-25
    • 1970-01-01
    • 2011-09-08
    • 2014-09-18
    相关资源
    最近更新 更多