gpt4 book ai didi

swing - Scala Swing 所有按钮宽度相同

转载 作者:行者123 更新时间:2023-12-01 11:29:18 28 4
gpt4 key购买 nike

我的 scala swing 应用程序中有一个 BoxPanel 按钮,这对我来说很难看,因为按钮的大小各不相同。我已将其更改为 GridPanel,但随后它们也垂直填充了面板,我发现这更难看。我怎样才能让所有按钮都填满 BoxPanel 的宽度但保持它们的理想高度?

我尝试了一种变通方法,如下所示,面板将所有内容设置为最大宽度,但没有效果。

val buttons = new BoxPanel(Orientation.Vertical) {
contents += new Button("Normal Button")
contents += new Button("small")
contents += new Button("Significantly larger button than the rest")

val maxWidth = contents map {
(button: Component) => button.preferredSize
} maxBy { _.width }

contents foreach {
(button: Component) => button.preferredSize = maxWidth
}
}

有没有办法使上述变通办法奏效或不是变通办法?

最佳答案

Box Layout Features 中讨论,“如果所有组件都具有相同的 X 对齐方式,则所有组件都将与其容器一样宽。”覆盖按钮的 getMaximumSize() 实现,如下所示,以返回任意宽度和按钮的首选高度。更改 setHorizo​​ntalAlignment() 和/或调整框架大小以查看效果。

@Override
public Dimension getMaximumSize() {
return new Dimension(
Short.MAX_VALUE, getPreferredSize().height);
}

image

代码如图:

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

/** @see http://stackoverflow.com/a/34443937/230513 */
public class ButtonBoxTest {

private void display() {
JFrame f = new JFrame("Test");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new JPanel() { //arbitrary filler

@Override
public Dimension getPreferredSize() {
return new Dimension(320, 240);
}
});
f.add(createButtonPanel(), BorderLayout.EAST);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}

private JPanel createButtonPanel() {
JPanel btnPanel = new JPanel();
btnPanel.setLayout(new BoxLayout(btnPanel, BoxLayout.Y_AXIS));
btnPanel.add(createButton("Button 1"));
btnPanel.add(createButton("Button 2"));
btnPanel.add(createButton("Long Button 3"));
btnPanel.add(createButton("Button 4"));
btnPanel.add(createButton("Button 5"));
return btnPanel;
}

private JButton createButton(String name) {
final JButton b = new JButton(name) {

@Override
public Dimension getMaximumSize() {
return new Dimension(
Short.MAX_VALUE, getPreferredSize().height);
}
};
b.setAlignmentX(0.5f);
b.setHorizontalAlignment(JButton.RIGHT);
return b;
}

public static void main(String[] args) {
EventQueue.invokeLater(new ButtonBoxTest()::display);
}
}

关于swing - Scala Swing 所有按钮宽度相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34442938/

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