gpt4 book ai didi

java - 将 GridBagLayout 中的组件添加到框架后更改其约束

转载 作者:行者123 更新时间:2023-12-01 17:39:32 28 4
gpt4 key购买 nike

我在 stackoverflow 上看到了另外两篇关于此问题的文章,在这两篇文章中,解决方案都使用了 setConstraints(myComponent, anotherConstraint),它甚至没有作为当我尝试在java中使用它时可用的方法。

want to change an Inset in a gridbag layout dynamically

Change the component weight dynamically in GridBagLayout

按下按钮后如何更改组件的 weightx

实际问题是我在屏幕底部有两个组件,我需要将其中一个组件设置为按下按钮后屏幕的最大宽度。

enter image description here

最佳答案

I couldn't get setConstraints() to work..

看来代码是错误的。从红色面板的右侧与 Articuno 标签的左侧完全对齐的事实来看,我怀疑包含红色面板的网格袋单元不会跨越超过一列,并且当前完全填充该列。

可能还有其他原因,但缺少 minimal reproducible example我不会进一步推测。

enter image description here enter image description here

这是一个简单的示例,展示了如何执行此操作。请注意,必须调用 revalidate() 才能看到更改。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.awt.image.BufferedImage;

public class FullWidthToggle {

private JComponent ui = null;

FullWidthToggle() {
initUI();
}

public final void initUI() {
if (ui != null) {
return;
}

GridBagConstraints gbc = new GridBagConstraints();
GridBagLayout gbl = new GridBagLayout();
ui = new JPanel(gbl);
ui.setBorder(new EmptyBorder(4, 4, 4, 4));

BufferedImage image = new BufferedImage(
160, 20, BufferedImage.TYPE_INT_RGB);
gbc.insets = new Insets(5, 5, 5, 5);
ui.add(new JLabel(new ImageIcon(image)), gbc);

final JCheckBox checkBox = new JCheckBox("Full Width");
gbc.gridx = 1;
gbc.anchor = GridBagConstraints.LINE_START;
ui.add(checkBox, gbc);

final JLabel label = new JLabel("Am I full width?");
label.setBorder(new LineBorder(Color.RED, 2));
gbc.gridx = 0;
gbc.gridy = 1;
gbc.gridwidth = 2;
ui.add(label, gbc);

ActionListener actionListener = (ActionEvent e) -> {
if (checkBox.isSelected()) {
gbc.fill = GridBagConstraints.HORIZONTAL;
} else {
gbc.fill = GridBagConstraints.NONE;
}
gbl.setConstraints(label, gbc);
ui.revalidate(); // <- important!
};
checkBox.addActionListener(actionListener);
}

public JComponent getUI() {
return ui;
}

public static void main(String[] args) {
Runnable r = () -> {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception useDefault) {
}
FullWidthToggle o = new FullWidthToggle();

JFrame f = new JFrame(o.getClass().getSimpleName());
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setLocationByPlatform(true);

f.setContentPane(o.getUI());
f.pack();
f.setMinimumSize(f.getSize());

f.setVisible(true);
};
SwingUtilities.invokeLater(r);
}
}

关于java - 将 GridBagLayout 中的组件添加到框架后更改其约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60983191/

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