在java中自动调整组件大小

时间:2014-09-11 16:49:23

标签: java swing user-interface netbeans

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

enter image description here

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

enter image description here

有没有办法在某种布局等方面这样做,或者我必须手动获取屏幕分辨率然后重新绘制每个组件?

我不是真正手动编写每个组件的代码,因为我只是拖放NetBeans。

2 个答案:

答案 0 :(得分:4)

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

  

我不是真正手动编写每个组件的代码,因为我只是拖放NetBeans。

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

答案 1 :(得分:2)

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