似乎每当我尝试创建一个程序时,我总是会使用setLayout(null);
Java中的命令来结束程序,因为我想绝对定位放置在我的swing组件上的任何东西。据我了解,每个人都在说要使用布局管理器来简化编码过程,但是它如何简化呢?平台系统之间的绝对定位会出现什么问题?
当使用layout时,调用pack()
“导致Window
其大小适合其子组件的首选大小和布局。” 如果不这样做,则必须尝试自己计算范围。如果(当)您弄错了,如下面有些人为的示例所示,用户会责怪您-并非没有道理。此处显示了有关不可调整大小的容器的相关示例。
import java.awt.EventQueue;
import java.awt.FontMetrics;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
/**
* @see https://stackoverflow.com/a/37801762/230513
* @see https://stackoverflow.com/a/12532237/230513
*/
public class Evil {
private static final String S = "Tomorrow's winning lottery numbers: 42, ";
private final JLabel label = new JLabel(S + "3, 1, 4, 1, 5, 9");
private void display() {
JFrame f = new JFrame("Evil");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLayout(null);
FontMetrics fm = label.getFontMetrics(label.getFont());
int w = SwingUtilities.computeStringWidth(fm, S) + 8;
int h = fm.getHeight();
label.setBounds(0, 0, w, h);
f.add(label);
f.setSize(w, h * 3);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new Evil().display();
}
});
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句