gpt4 book ai didi

java - 如何根据容器的宽度动态设置组件扩展属性

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:04:47 26 4
gpt4 key购买 nike

我需要构建一个包含 2 个内部面板的面板,从左到右排列,高度固定,宽度可变。宽度扩展,或者换句话说 - x 填充宽度,取决于父容器的宽度。场景是父容器达到一定宽度时,我只希望右侧面板填充它所需的水平空间,从该宽度到更大的宽度,仅左侧面板展开,依此类推。

我尝试了 2 种方法 - 切换 2 个子面板的 GridBagConstraints,或者使用 BorderLayout 并类似地移除子面板并使用相应的 重新添加它们BorderLayout.CENTER 用于展开的组件,或 BorderLayout.EAST(或 west)。通过使用 ComponentResized 调用将 ComponentAdapter 添加到父容器,这种切换将基于结果宽度间隔的计算。问题是调整大小事件不是顺序的 - 例如我收到宽度事件:317、322、330,不一定是中间的所有数字,它仅在调整组件大小和绘制后触发。
当我们看到面板扩展到不应有的宽度时,这会导致非常烦人的闪烁。

在此先感谢您的帮助。

最佳答案

您可以使用 JSplitPane 。检查这段代码:

import java.awt.EventQueue;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JSplitPane;

public class test extends JFrame {

/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
test frame = new test();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

/**
* Create the frame.
*/
public test() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);

JSplitPane splitPane = new JSplitPane();
setContentPane(splitPane);
splitPane.setBorder(null);

}

}

关于java - 如何根据容器的宽度动态设置组件扩展属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23633657/

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