【问题标题】:Auto adjust component size in java在java中自动调整组件大小
【发布时间】:2014-11-05 17:28:34
【问题描述】:

我的 JFrame 具有不同的组件,例如按钮和标签。我希望我的标签在屏幕分辨率发生变化时自动调整其高度。我主要使用 NetBeans GUI 组件(拖放)。

当高度分辨率增加时,每个组件的高度都会像这样增加

有没有什么办法可以通过某种布局等实现,或者我必须手动获取屏幕分辨率,然后重新绘制每个组件?

我并不是每个组件的真正手动编码,因为大多数情况下我只是在 NetBeans 中拖放。

【问题讨论】:

    标签: java swing user-interface netbeans


    【解决方案1】:

    检测屏幕分辨率变化的一种方法是注册一个 AWTEventListener。

    当触发时,您可以根据最后一个已知值检查分辨率并相应地调整帧大小。这就是您选择的 LayoutManager 发挥作用的地方。

    import java.awt.*;
    import java.awt.event.*;
    
    import javax.swing.*;
    
    public class ResolutionChangedDemo implements Runnable
    {
      private Dimension lastScreenSize;
      private JFrame frame;
    
      public static void main(String[] args)
      {
        SwingUtilities.invokeLater(new ResolutionChangedDemo());
      }
    
      public void run()
      {
        lastScreenSize = Toolkit.getDefaultToolkit().getScreenSize();
    
        AWTEventListener listener = new AWTEventListener()
        {
          @Override
          public void eventDispatched(AWTEvent event)
          {
            Dimension actualScreenSize = Toolkit.getDefaultToolkit().getScreenSize();
    
            if (! lastScreenSize.equals(actualScreenSize))
            {
              System.out.println("resolution changed");
              lastScreenSize = actualScreenSize;
    
              // Here is where you would resize your frame appropriately
              // and the LayoutManager would do the rest
            }
          }
        };
    
        Toolkit.getDefaultToolkit().addAWTEventListener(listener, AWTEvent.PAINT_EVENT_MASK);
    
        frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 400);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
      }
    }
    

    【讨论】:

      【解决方案2】:

      左侧应该是一个 JPanel,它使用 GridLayout(0, 1),然后保存 4 个 JLabel。整个东西可以放在一个 GridBagLayout 中——使用 JPanel 或者一个 BoxLayout。

      我并不是每个组件的真正手动编码,因为大多数情况下我只是在 NetBeans 中拖放。

      不要这样做。如果您想要此功能,请继续阅读并使用布局管理器,而不是盲目地拖放。您知道您还可以使用 NetBeans 代码生成工具创建 JPanel,并告诉 JPanel 使用哪些特定布局。

      【讨论】:

      • 你怎么能这么快?当它出现时,我正在写关于 GridBagLayout 的评论 xD
      • 我对使用布局有一些想法,但对此不确定。让我检查一下,如果可行,请接受您的回答。
      • @HovercraftFullOfEels 和关于挥杆强硬的知识,我仍在努力与像你这样的大师竞争,MadProgrammer,peeskillet 等。虽然我还是个新手,但我从你们所有人那里学到了很多 C :
      • @AbdulJabbarWebBestow:请注意,JLabels 的首选大小可能会根据它们显示的文本字体或图像的大小而改变。
      • @HovercraftFullOfEels 这不会在分辨率改变时改变
      猜你喜欢
      • 2012-10-13
      • 2012-07-18
      • 2015-07-21
      • 2015-07-23
      • 2017-04-23
      • 1970-01-01
      • 1970-01-01
      • 2015-08-06
      • 1970-01-01
      相关资源
      最近更新 更多