我有这个奇怪的问题,它似乎不是发生在Mac系统上,而是在Windows上。我正在处理这个GUI,并试图使所有的按钮都保持相同的长度(最长按钮的长度),但由于某种原因,在Windows上,其中一个按钮将不会显示整个字符串并将其截断为省略号(.)。
下面是我用来检查和设置最长按钮标签的方法:
//Temp button to hold the longest button for resizing
JButton longestButton = new JButton();
//Find size of the largest of the 6 buttons
for(int i = 0; i < 6; i++){
if (buttons[i].getText().length() > longestButton.getText().length()){
longestButton = buttons[i];
}
}
//Match size of 6 hex buttons to the size of the longest one
for(int i = 0; i < 6; i++){
buttons[i].setPreferredSize(longestButton.getPreferredSize());
}
有人对此有所了解吗?
发布于 2013-11-19 17:09:53
当您真正想要覆盖setPreferredSize()
时,不要使用getPreferredSize()
。BoxLayout
对此很有效:“对于自上而下的盒子布局,容器的首选宽度是子容器的最大首选宽度。”在下面的示例中,BorderLayout.LINE_END
采用容器的首选宽度。每个按钮覆盖getMaximumSize()
,以有效地消除按钮宽度的上限。其结果在不同平台上运行良好。
import java.awt.*;
import javax.swing.*;
/**
* @see https://stackoverflow.com/a/20085489/230513
*/
public class TestViewer {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new ButtonPanel(), BorderLayout.LINE_END);
frame.pack();
frame.setSize(500, 300);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
private static class ButtonPanel extends Box {
public ButtonPanel() {
super(BoxLayout.Y_AXIS);
this.add(createButton("Button 1"));
this.add(createButton("Button 2"));
this.add(createButton("Long Button 3"));
this.add(createButton("Button 4"));
this.add(createButton("Button 5"));
}
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);
return b;
}
}
}
发布于 2013-11-19 14:19:34
与其使用最大的.getText().length()查找按钮,不如使用最宽的preferredSize()找到按钮。
for(int i = 0; i < 6; i++){
if (buttons[i].getPreferredSize().getWidth() > longestButton.getPreferredSize().getWidth()){
longestButton = buttons[i];
}
}
这解决了评论中提到的破坏他人财产的问题。
https://stackoverflow.com/questions/20082907
复制相似问题