繁体   English   中英

自动调整Java中的组件大小

[英]Auto adjust component size in java

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

在此处输入图片说明

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

在此处输入图片说明

是否可以通过某种布局等方式来执行此操作,否则我必须手动获取屏幕分辨率,然后重新粉刷每个组件?

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

左侧应该是使用GridLayout(0,1)并保留4个JLabel的JPanel。 可以使用JPanel或BoxLayout将整个内容放置到GridBagLayout中。

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

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

检测屏幕分辨率变化的一种方法是注册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);
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM