我写了一个程序,期望它通过使用getWidth()和getHeight()方法显示在屏幕中间,但相反,它出现在左上角。所以我的问题是getWidth()和getHeight()方法是不是应该得到整个屏幕的宽度和高度?
/*
* This program displays Pascal's Triangle for 8 rows.
*/
import acm.graphics.*;
import acm.program.*;
public class combination extends GraphicsProgram {
public void run() {
for(int i = 0; i < NROWS; i++) {
for (int n = 0; n <= i; n++) {
add(new GLabel(Combination(i,n), x(i,n), y(i))); //the coordination and the amount of labels are related to i;
}
}
}
//method that adds labels on the screen.//
private String Combination(int i, int n) { //this method returns a string which would be added to the screen.//
return (String.valueOf(i) +","+ String.valueOf(n));
}
//method that set the y coordination for the label//
private double y(int i) {
double Height = getHeight()/NROWS;
return i * Height + 9;
}
//method that set the x coordination for the label//
private double x(int i, int n) {
double Orgnx = getWidth() / 2;
double HalfBase = getHeight() / NROWS / Math.sqrt(3);
double Base = HalfBase * 2;
return Orgnx - i * HalfBase + n * Base;
}
/*The program displays 8 rows of pairs of number.*/
private static final int NROWS = 8;
答案 0 :(得分:2)
getWidth()/ getHeight()在Component中定义,因此它们返回您调用它们的组件的大小(在您的情况下,这将是窗口中的组件)。
查看Swing教程http://docs.oracle.com/javase/tutorial/uiswing/components/,了解如何组合组件以形成用户界面。
请注意“屏幕”不是Swing对象,而且“屏幕”的整个概念是一个过时的思维概念。我的桌子上有两个屏幕,我的公司几乎每个屏幕都有。您可能希望将您的心智模型适应(当前)现实。
在多个屏幕设置中居中窗口(在什么?上)是一项非常重要的任务。请参阅此问题How to center a Window in Java?及其答案。
答案 1 :(得分:0)
使用setLocationRelativeTo(null)
行。这将使组件从中间打开。