我有JFrame和不同的组件,如按钮和标签。我希望我的标签在屏幕分辨率变化时自动调整其高度。我主要使用NetBeans GUI组件(拖放)。
当高度分辨率增加时,每个组件高度都会增加
有没有办法在某种布局等方面这样做,或者我必须手动获取屏幕分辨率然后重新绘制每个组件?
我不是真正手动编写每个组件的代码,因为我只是拖放NetBeans。
答案 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);
}
}