gpt4 book ai didi

java - 防止 GridBagLayout 调整列大小

转载 作者:行者123 更新时间:2023-12-02 00:21:59 25 4
gpt4 key购买 nike

Swing 的另一个问题。如果其中一个组件的大小发生变化,如何阻止 GridBagLayout 重新调整组件间距?例如,我有几列,其中一列有一个带有文本“text”的 JLabel。当我将其更改为“texttext”时,布局管理器会调整整个列的大小。我不希望它这样做。有什么办法可以预防吗?

示例:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;

public class ResizeIssue {

static int value = 99;

public static void main(String[] args) {

JFrame frame = new JFrame();
final JLabel valueLabel = new JLabel(String.valueOf(value));
JButton decButton = new JButton("-");
decButton.addActionListener(new java.awt.event.ActionListener() {

@Override
public void actionPerformed(ActionEvent ae) {
valueLabel.setText(String.valueOf(--value));
}
});

JButton incButton = new JButton("+");
incButton.addActionListener(new java.awt.event.ActionListener() {

@Override
public void actionPerformed(ActionEvent ae) {
valueLabel.setText(String.valueOf(++value));
}
});

JPanel panel = new JPanel();
panel.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.weightx = 1;
c.gridx = 0;
c.gridy = 0;
panel.add(decButton, c);
c.gridx = 1;
panel.add(valueLabel, c);
c.gridx = 2;
panel.add(incButton, c);

frame.add(panel);
frame.pack();
frame.setVisible(true);
}
}

当 9 -> 10 或文本改变宽度时,它是可见的。

最佳答案

GridBagLayout 忽略最大宽度/高度。没有简单的方法来设置 JLabel 的最大尺寸。

但是,我认为您真正想要的是当 JLabel 中的文本更改时布局不发生变化。

这可以通过使 JLabel 足够宽以容纳其需要显示的最大值来完成。例如:

    jLabel1.setFont(new Font("monospace", Font.PLAIN, 12));
FontMetrics fm = jLabel1.getFontMetrics(jLabel1.getFont());
int w = fm.stringWidth("0000");
int h = fm.getHeight();
Dimension size = new Dimension(w, h);
jLabel1.setMinimumSize(size);
jLabel1.setPreferredSize(size);

更新:

要将标签文本居中,只需添加:

    jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);

关于java - 防止 GridBagLayout 调整列大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10775764/

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