gpt4 book ai didi

Java Swing 响应式绝对定位

转载 作者:行者123 更新时间:2023-12-01 19:49:05 32 4
gpt4 key购买 nike

我是 java swing gui 的新手,我无法解决这个问题假设我的 Jframe 大小为 100,100 我有 4 个按钮位置

        left top widht height
button1 0 0 10 10 // left up
button2 90 0 10 10 // right up
button3 45 45 10 10 // middle
button4 0 90 10 10 // left down
button5 90 90 10 10 // right down

所有左上角的宽度高度均从 100,100 开始缩放。

我需要使用绝对定位(因为我的实际情况不同,左,上,宽,高)但是响应能力我认为也许我可以使用因子来乘以左,右,宽,高值

例如,运行 gui 后,如果我将帧更改为 400,200,则新位置应该为

button1 0    0   40   20 // left up
button2 360 0 40 20 // right up
button3 180 90 40 20 // middle
button4 0 180 40 20 // left down
button5 360 180 40 20 // right down

x 因子 = 400/100=4,y 因子 = 200/100=2

我如何监听 Jframe 从 100,100 到 400,200 的变化并开发上述方法。任何信息表示赞赏。

编辑

我从不同的服务获得左上宽度高度,我的示例可能如下

        left top widht height
button1 01 04 11 14
button2 91 0 10 10
button3 44 45 9 14
button4 0 90 10 10
button5 90 90 1 1

最佳答案

I need using Absolute positioning

当你认为你需要“绝对定位”时,你其实不需要。说真的,我从来没有需要使用一个不能通过其他方式(现有布局或自定义布局)解决的布局。

布局管理 API 旨在完全满足您的要求,更好地利用它并节省您的麻烦。

这是一个使用 GridBagLayout 的非常简单的示例,是的,如果按钮具有不同的高度,它仍然可以应对

Small Big

import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Test {

public static void main(String[] args) {
new Test();
}

public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}

JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}

public class TestPane extends JPanel {

public TestPane() {
setLayout(new GridBagLayout());

GridBagConstraints gbc = new GridBagConstraints();
// Common properties...
gbc.weightx = 0.5;
gbc.weighty = 0.333;
// Top/left
gbc.gridx = 0;
gbc.gridy = 0;
gbc.anchor = GridBagConstraints.NORTHWEST;
add(new JButton("Top left is all mine"), gbc);
// Top/right
gbc.gridx = 2;
gbc.gridy = 0;
gbc.anchor = GridBagConstraints.NORTHEAST;
add(new JButton("Top right mine, keep out"), gbc);

// middle
gbc.gridx = 1;
gbc.gridy = 1;
gbc.anchor = GridBagConstraints.CENTER;
add(new JButton("My precious"), gbc);

// bottom/left
gbc.gridx = 0;
gbc.gridy = 2;
gbc.anchor = GridBagConstraints.SOUTHWEST;
add(new JButton("Got this space covered"), gbc);
// bottom/right
gbc.gridx = 2;
gbc.gridy = 2;
gbc.anchor = GridBagConstraints.SOUTHEAST;
add(new JButton("Why is every one so unfriendly?"), gbc);
}

}

}

有高按钮...

Big buttons

自动解决这个问题

关于Java Swing 响应式绝对定位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52111644/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com