Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中自动调整组件大小_Java_Swing_User Interface_Netbeans - Fatal编程技术网

在java中自动调整组件大小

在java中自动调整组件大小,java,swing,user-interface,netbeans,Java,Swing,User Interface,Netbeans,我有JFrame,它有不同的组件,比如按钮和标签。我希望我的标签在屏幕分辨率更改时自动调整其高度。我主要使用NetBeans GUI组件(拖放) 当高度分辨率增加时,每个组件的高度都会像这样增加 是否有任何方法可以通过某种布局等来实现,或者我必须手动获得屏幕分辨率,然后重新绘制每个组件 我不是一个真正的为每个组件手动编码的人,因为我主要只是在NetBeans中拖放。左侧应该是一个JPanel,它使用一个GridLayout(0,1),然后保存4个JLabel。可以使用JPanel或BoxLa

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

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

是否有任何方法可以通过某种布局等来实现,或者我必须手动获得屏幕分辨率,然后重新绘制每个组件


我不是一个真正的为每个组件手动编码的人,因为我主要只是在NetBeans中拖放。

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

我并不是一个真正的为每个组件手工编码的人,因为我主要只是拖放NetBeans


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

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

你怎么能那么快?我当时正在写一篇关于GridBagLayout的评论,当它出现时,我对使用布局有一些想法,但对此不确定。让我检查一下,然后接受你的答案,如果这个方法有效的话。@Of theels和关于swing tough的知识,我仍然在努力与你这样的大师竞争,MadProgrammer,peeskillet,等等。虽然我还是个新手,但我从你们身上学到了很多C:@AbdulJabbarWebBestow:注意,首选的JLabel大小可以根据它们显示的文本字体或图像的大小而改变。@HoverCraftFullOfels这不会随着分辨率的改变而改变