我一直试图让这个程序工作多年,每次我尝试添加一个循环,增加进度计数器并刷新主框架,它只是不会显示或它将只保持0和每一个我输入的输入不会影响程序。
public class Progress2
{
private JPanel mainPanel = new JPanel();
int progress = 0;
int prog = 100;
int count;
Scanner input = new Scanner(System.in);
String command = "";
public Progress2()
{
JPanel labelPanel = new JPanel(new GridLayout(0, 11)); // holds the JLabels in a grid
Label label1 = new Label("0%");
Label label2 = new Label("10%");
Label label3 = new Label("20%");
Label label4 = new Label("30%");
Label label5 = new Label("40%");
Label label6 = new Label("50%");
Label label7 = new Label("60%");
Label label8 = new Label("70%");
Label label9 = new Label("80%");
Label label10 = new Label("90%");
Label label11 = new Label("100%");
Label label12 = new Label(prog +"%");
labelPanel.add(label1);
labelPanel.add(label2);
labelPanel.add(label3);
labelPanel.add(label4);
labelPanel.add(label5);
labelPanel.add(label6);
labelPanel.add(label7);
labelPanel.add(label8);
labelPanel.add(label9);
labelPanel.add(label10);
labelPanel.add(label11);
labelPanel.add(label12);
label1.setForeground(Color.green);
label2.setForeground(Color.red);
label3.setForeground(Color.red);
label4.setForeground(Color.red);
label5.setForeground(Color.red);
label6.setForeground(Color.red);
label7.setForeground(Color.red);
label8.setForeground(Color.red);
label9.setForeground(Color.red);
label10.setForeground(Color.red);
label11.setForeground(Color.red);
mainPanel.add(labelPanel, BorderLayout.LINE_START);
if(progress>=1){
label2.setForeground(Color.green);
}
if(progress>=2){
label3.setForeground(Color.green);
prog=-10;
}
if(progress>=3){
label4.setForeground(Color.green);
prog=-10;
}
if(progress>=4){
label5.setForeground(Color.green);
prog=-10;
}
if(progress>=5){
label6.setForeground(Color.green);
prog=-10;
}
if(progress>=6){
label7.setForeground(Color.green);
prog=-10;
}
if(progress>=7){
label8.setForeground(Color.green);
prog=-10;
}
if(progress>=8){
label9.setForeground(Color.green);
prog=-10;
}
if(progress>=9){
label10.setForeground(Color.green);
prog=-10;
}
if(progress>=10){
label10.setForeground(Color.green);
prog=-10;
}
if(progress>=11){
label11.setForeground(Color.green);
prog=-10;
}
while(true){
for(count =0; count<11; count++){
Scanner scanner = new Scanner(System.in);
System.out.println("Do you want to increment?");
String scan = scanner.nextLine();
progress++;
}
}
}
public JComponent getComponent()
{
return mainPanel;
}
private static void createAndShowUI()
{
JFrame frame = new JFrame("Progress");
frame.getContentPane().add(new Progress2().getComponent());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args)
{
java.awt.EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowUI();
}
});
}
}
答案 0 :(得分:0)
我相信你的印象是,每次更新进度变量时,都会测试所有if语句,并相应地更新GUI。不是这种情况。重写循环如下,您将看到预期的结果:
for(count = 0; count < 11; count++) {
Scanner scanner = new Scanner(System.in);
System.out.print("Do you want to increment? ");
String scan = scanner.nextLine();
progress++;
if(progress>=1){
label2.setForeground(Color.green);
}
if(progress>=2){
label3.setForeground(Color.green);
prog=-10;
}
if(progress>=3){
label4.setForeground(Color.green);
prog=-10;
}
if(progress>=4){
label5.setForeground(Color.green);
prog=-10;
}
if(progress>=5){
label6.setForeground(Color.green);
prog=-10;
}
if(progress>=6){
label7.setForeground(Color.green);
prog=-10;
}
if(progress>=7){
label8.setForeground(Color.green);
prog=-10;
}
if(progress>=8){
label9.setForeground(Color.green);
prog=-10;
}
if(progress>=9){
label10.setForeground(Color.green);
prog=-10;
}
if(progress>=10){
label10.setForeground(Color.green);
prog=-10;
}
if(progress>=11){
label11.setForeground(Color.green);
prog=-10;
}
}
答案 1 :(得分:0)
遵循以下流程:
Progress2()
类初始化面板和标签,并在constructor
中添加组件。直到mainPanel.add(labelPanel, BorderLayout.LINE_START);
创建一个函数updateUI()
函数void updateUI()
{
\获取面板
\从面板获取标签
在上面的blahfunk中提到的那个函数中的``for`循环。
}
此处的学习点:如何从该面板获取面板和标签。为了更容易检查是否可以将面板和标签声明为Progress2()
类的类属性,然后可以定义类方法以返回这些值(getter)
updateUI()
函数中createAndShowUI();
之后调用main()
函数。为什么在我按11次输入之前GUI不会出现?
这是调用更新代码的地方。 frame.getContentPane().add(new Progress2().getComponent());
内的new Progress2()
这是类Progress2()
的构造函数
frame.setVisible(true);
负责显示在上述语句之后调用的UI。
要查看您的代码,请按照上述工作流程查找应该执行的代码。