我正在为我正在学习的Java课程做这个作业。我被指派这样做:
编写一个显示数字的程序,如下所示。当窗口调整大小时,显示中的行数会改变以适合窗口。
这是GUI中显示的内容(行之间没有大空格):
1
12
123
1234
12345
123456
1234567
随着我扩展GUI窗口,数字越大,行数越来越多。
这是我现在拥有的代码:
import javax.swing.*;
import java.awt.*;
public class ResizingGUI extends JPanel{
public int width = 600;
public int height = 200;
public int x_coord = 10;
public int y_coord = 40;
public static final int point_size = 12;
public Font fontObject = new Font("SansSerif", Font.PLAIN, point_size);
public int maxLines = 16;
public ResizingGUI (){
super();
setSize(width, height);
}
public void paint(Graphics g){
super.paint(g);
g.setFont(fontObject);
x_coord = 10;
y_coord = 40;
int lineCount = 0;
int line = 1;
maxLines = (this.getHeight()-40)/10;
while(lineCount < maxLines){
while(line < maxLines){
String s = String.valueOf(line);
g.drawString(s, x_coord, y_coord);
line++;
x_coord = x_coord + 10;
if(line > 10){
x_coord = x_coord + 5;
}
line = 0;
lineCount++;
y_coord = y_coord + 10;
}
}
}
public static void main(String[]args){
JFrame frame = new JFrame();
frame.setTitle("Resizeable GUI");
frame.setSize (600,200);
frame.getContentPane().add (new ResizingGUI());
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
我认为这可能是解决方案,但嵌套循环会让我陷入循环(哈哈) 如果有人可以请求修复嵌套循环的方法或(更有可能)如何实现我的目标,我将非常感激。
答案 0 :(得分:0)
你的循环有点令人困惑,基本上,你想循环的行数和数字列的循环(这是当前的行号)......
int line = 0;
while (line < maxLines) {
int col = 0;
while (col < line) {
//...
col++;
}
line++;
}
您也没有将x_coord
重置回原来的位置,这意味着每一条新行都会从最后一行的末尾开始......就在它的正下方。
您还应该:
paintComponent
而不是paint
。有关详细信息,请查看Performing Custom Painting getPreferredSize
而非使用setSize
。它将更好地与布局管理器一起使用FontMetrics
来确定每个行/列需要调整的像素数。有关详细信息,请查看Measuring Text