Java - 每当 jframe 调整大小时调整组件大小
Java - resize component whenever jframe is resizing
我正在尝试制作游戏。我在多台计算机上进行测试,当我测试它时,我在另一台具有不同屏幕的计算机上看到 JFrame 中组件的所有大小都发生了变化。
如何在 JFrame 调整大小时调整组件大小?
注意:我看到了关于这个主题的多个线程,其中 none 个解决了我的问题。
编辑:让我们先放一些代码:
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
width = screenSize.getWidth();
height = screenSize.getHeight();
ImageIcon main_Icon = new ImageIcon(ICON);
setName("NAME");
setIconImage(main_Icon.getImage());
setResizable(false);
setUndecorated(true);
character_Label= new JLabel(new ImageIcon(ICON);
character_Panel= new JPanel();
character_Panel.add(character_Label);
character_Panel.setOpaque(false);
character_Panel.setSize(35, 35);
character_Panel.setLocation((int) width / 2, 0);
ImageIcon restart_Button_Icon = new ImageIcon(ICON);
ImageIcon menu_Button_Icon = new ImageIcon(ICON);
restart_Button = new JButton();
restart_Button.setIcon(restart_Button_Icon);
restart_Button.setSize(110, 45);
restart_Button.setLocation((int) width / 2 - (restart_Button.getWidth() / 2), (int) height / 2 - 100);
restart_Button.setVisible(false);
restart_Button.setContentAreaFilled(false);
restart_Button.setFocusPainted(false);
restart_Button.setOpaque(false);
menu_Button = new JButton();
menu_Button.setIcon(menu_Button_Icon);
menu_Button.setSize(110, 45);
menu_Button.setLocation((int) width / 2 - (menu_Button.getWidth() / 2), (int) (height / 2));
menu_Button.setVisible(false);
menu_Button.setContentAreaFilled(false);
menu_Button.setFocusPainted(false);
menu_Button.setOpaque(false);
Danger_1= new JLabel(new ImageIcon(MainActivity.class.getResource(ICON);
Danger_2= new JLabel(new ImageIcon(MainActivity.class.getResource(ICON);
Danger_3= new JLabel(new ImageIcon(MainActivity.class.getResource(ICON);
Danger_4= new JLabel(new ImageIcon(MainActivity.class.getResource(ICON);
Danger_5= new JLabel(new ImageIcon(MainActivity.class.getResource(ICON);
Danger_6= new JLabel(new ImageIcon(MainActivity.class.getResource(ICON);
Danger_1 = new JPanel();
Danger_1.add(line_Label_1);
Danger_1.setOpaque(false);
Danger_1.setSize(300, 30);
Danger_1.setLocation(0, 200);
Danger_2 = new JPanel();
Danger_2.add(line_Label_2);
Danger_2.setOpaque(false);
Danger_2.setSize(300, 30);
Danger_2.setLocation((int) width - Danger_2.getWidth(), 300);
Danger_3 = new JPanel();
Danger_3.add(line_Label_3);
Danger_3.setOpaque(false);
Danger_3.setSize(300, 30);
Danger_3.setLocation(0, 400);
Danger_4 = new JPanel();
Danger_4.add(line_Label_4);
Danger_4.setOpaque(false);
Danger_4.setSize(300, 30);
Danger_4.setLocation((int) width - Danger_4.getWidth(), 500);
Danger_5 = new JPanel();
Danger_5.add(line_Label_5);
Danger_5.setOpaque(false);
Danger_5.setSize(300, 30);
Danger_5.setLocation(0, 600);
Danger_6 = new JPanel();
Danger_6.add(line_Label_6);
Danger_6.setOpaque(false);
Danger_6.setSize(300, 30);
Danger_6.setLocation((int) width - Danger_6.getWidth(), 700);
getContentPane().setBackground(Color.GREEN);
setSize((int) width, (int) height);
setLocationRelativeTo(null);
setVisible(true);
setLayout(null);
setExtendedState(JFrame.MAXIMIZED_BOTH);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(restart_Button);
add(menu_Button);
add(character_Panel);
add(Danger_Panel_1);
add(Danger_Panel_2);
add(Danger_Panel_3);
add(Danger_Panel_4);
add(Danger_Panel_5);
add(Danger_Panel_6);
我现在稍微解释一下。
角色面板是移动的主角。
danger_1 , danger_2 等是地面上的尖刺。
在代码的开头,您使用屏幕的宽度和高度来设置 JFrame 的大小。
你应该做同样的事情,但按比例,当你设置字符的大小和 "dangers"。
例如如果字符的高度应始终为框架高度的 1/10,宽度应始终为框架宽度的 1/10,那么您应该执行类似 character.setSize(width/10, height/10);
.
的操作
我正在尝试制作游戏。我在多台计算机上进行测试,当我测试它时,我在另一台具有不同屏幕的计算机上看到 JFrame 中组件的所有大小都发生了变化。 如何在 JFrame 调整大小时调整组件大小?
注意:我看到了关于这个主题的多个线程,其中 none 个解决了我的问题。
编辑:让我们先放一些代码:
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
width = screenSize.getWidth();
height = screenSize.getHeight();
ImageIcon main_Icon = new ImageIcon(ICON);
setName("NAME");
setIconImage(main_Icon.getImage());
setResizable(false);
setUndecorated(true);
character_Label= new JLabel(new ImageIcon(ICON);
character_Panel= new JPanel();
character_Panel.add(character_Label);
character_Panel.setOpaque(false);
character_Panel.setSize(35, 35);
character_Panel.setLocation((int) width / 2, 0);
ImageIcon restart_Button_Icon = new ImageIcon(ICON);
ImageIcon menu_Button_Icon = new ImageIcon(ICON);
restart_Button = new JButton();
restart_Button.setIcon(restart_Button_Icon);
restart_Button.setSize(110, 45);
restart_Button.setLocation((int) width / 2 - (restart_Button.getWidth() / 2), (int) height / 2 - 100);
restart_Button.setVisible(false);
restart_Button.setContentAreaFilled(false);
restart_Button.setFocusPainted(false);
restart_Button.setOpaque(false);
menu_Button = new JButton();
menu_Button.setIcon(menu_Button_Icon);
menu_Button.setSize(110, 45);
menu_Button.setLocation((int) width / 2 - (menu_Button.getWidth() / 2), (int) (height / 2));
menu_Button.setVisible(false);
menu_Button.setContentAreaFilled(false);
menu_Button.setFocusPainted(false);
menu_Button.setOpaque(false);
Danger_1= new JLabel(new ImageIcon(MainActivity.class.getResource(ICON);
Danger_2= new JLabel(new ImageIcon(MainActivity.class.getResource(ICON);
Danger_3= new JLabel(new ImageIcon(MainActivity.class.getResource(ICON);
Danger_4= new JLabel(new ImageIcon(MainActivity.class.getResource(ICON);
Danger_5= new JLabel(new ImageIcon(MainActivity.class.getResource(ICON);
Danger_6= new JLabel(new ImageIcon(MainActivity.class.getResource(ICON);
Danger_1 = new JPanel();
Danger_1.add(line_Label_1);
Danger_1.setOpaque(false);
Danger_1.setSize(300, 30);
Danger_1.setLocation(0, 200);
Danger_2 = new JPanel();
Danger_2.add(line_Label_2);
Danger_2.setOpaque(false);
Danger_2.setSize(300, 30);
Danger_2.setLocation((int) width - Danger_2.getWidth(), 300);
Danger_3 = new JPanel();
Danger_3.add(line_Label_3);
Danger_3.setOpaque(false);
Danger_3.setSize(300, 30);
Danger_3.setLocation(0, 400);
Danger_4 = new JPanel();
Danger_4.add(line_Label_4);
Danger_4.setOpaque(false);
Danger_4.setSize(300, 30);
Danger_4.setLocation((int) width - Danger_4.getWidth(), 500);
Danger_5 = new JPanel();
Danger_5.add(line_Label_5);
Danger_5.setOpaque(false);
Danger_5.setSize(300, 30);
Danger_5.setLocation(0, 600);
Danger_6 = new JPanel();
Danger_6.add(line_Label_6);
Danger_6.setOpaque(false);
Danger_6.setSize(300, 30);
Danger_6.setLocation((int) width - Danger_6.getWidth(), 700);
getContentPane().setBackground(Color.GREEN);
setSize((int) width, (int) height);
setLocationRelativeTo(null);
setVisible(true);
setLayout(null);
setExtendedState(JFrame.MAXIMIZED_BOTH);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(restart_Button);
add(menu_Button);
add(character_Panel);
add(Danger_Panel_1);
add(Danger_Panel_2);
add(Danger_Panel_3);
add(Danger_Panel_4);
add(Danger_Panel_5);
add(Danger_Panel_6);
我现在稍微解释一下。
角色面板是移动的主角。 danger_1 , danger_2 等是地面上的尖刺。
在代码的开头,您使用屏幕的宽度和高度来设置 JFrame 的大小。
你应该做同样的事情,但按比例,当你设置字符的大小和 "dangers"。
例如如果字符的高度应始终为框架高度的 1/10,宽度应始终为框架宽度的 1/10,那么您应该执行类似 character.setSize(width/10, height/10);
.