我这听起来真的很傻,但是我的for循环遇到了麻烦。
以下是我遇到问题的代码的一部分。
Scanner input = new Scanner( System.in);
int number;
for(int i = 0;i < 5;i++) {
System.out.print("Enter 5 integers:");
number = input.nextInt();
}
当我运行它时,打印输出循环次数超过5次。
public class BarGraph extends JPanel
{
public void paintComponent( Graphics g )
{
Scanner input = new Scanner( System.in);
// super.paintComponent(g);
int number;
for(int i = 0;i < 5;i++)
{
System.out.print("Enter 5 integers:");
number = input.nextInt();
// g.drawRect(10 * i, 10 * i, 100 * number, 10);
}
}
}
运行BarGraphTest
public class BarGraphTest
{
public static void main( String[] args)
{
BarGraph panel = new BarGraph();
JFrame application = new JFrame();
application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
application.add( panel );
application.setSize( 300, 300);
application.setVisible( true );
}
}
基本上我要做的是读取5个整数,然后在JPanel线上显示它们吧。
答案 0 :(得分:4)
您已将状态更改与图形混合在一起。 paintComponent
由swing "when it needs to be"调用,在这种情况下,Swing确定无论出于何种原因需要重新绘制。
如果您的程序是以关注paintComponent
被调用的时间或频率的方式编写的,那么您可能会遇到问题。您应该只让paintComponent
询问某个对象的当前状态并进行相应的绘制。
取决于您的具体情况,应以下列方式之一提供5个号码
绝对不应该向paintComponent
内的用户请求它们,这意味着每次重绘时(例如移动,重新调整大小,改变焦点,被其他帧隐藏等)数字将从用户那里重新请求。
您也可能希望使用paintComponent
开始super.paintComponent(g)
方法但will again be situation dependant