gpt4 book ai didi

java - JFrame 问题。这使得打印的窗口数量是我需要的两倍

转载 作者:行者123 更新时间:2023-12-02 03:20:55 24 4
gpt4 key购买 nike

我还有两个这个主类正在使用的类,但我认为没有这些类就可以回答它,因为我认为这是一个逻辑问题。

我正在尝试创建一个打印绘图的JFrame。 API 的设置方式是,我希望 public Viewer 创建框架并设置标题,然后 main 实例化查看器。但我的设置方式使打印的帧数是我需要的两倍。另外,当我尝试连接时

v.setTitle(v.getTitle() + String.format(" pi = %.4f", pi));

这不起作用。它只是打印一个新的 JFrame ,其中包含

String.format(" pi = %.4f", pi));

并且原始的JFrame打印它的名称(两个单独的框架)。所以我知道这一定是某个地方的逻辑问题,但我无法弄清楚。

import java.util.Scanner;
import javax.swing.JFrame;


public class Viewer extends JFrame{
private ControlPanel cp;

public Viewer(String name, int in){
JFrame frame = new JFrame();
frame.setSize(550, 550);
frame.setTitle("Name: " + name);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
cp = new ControlPanel(in);
frame.add(cp);
frame.setVisible(true);
}


/**
* @param args
*/
public static void main(String[] args) {
int n = (int) 1e4;
System.out.println("Enter the number of runs to make <1 to 4>:");
@SuppressWarnings("resource")
Scanner in = new Scanner(System.in);
int runs = in.nextInt();
if (runs > 4){
runs = 4;
}
if (runs < 1){
runs = 4;
}
for (int i = 1; i <= runs; i ++){
n = n * runs;
Viewer v = new Viewer("Trey Wilson", n);
int hits = v.cp.getHits();
double pi = 4.0 * hits / n;
v.setTitle(v.getTitle() + String.format(" pi = %.4f", pi));
v.pack();
v.setVisible(true);
v.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

}

最佳答案

您的代码有多个错误:

  1. 它扩展了JFrame并创建了一个JFrame对象(只需从类中删除extends JFrame,建议这样做)

  2. 这就是你的问题:

    Viewer v = new Viewer("Trey Wilson", n);

    这会调用Viewer的类构造函数,但构造函数本身设置它自己的标题、大小等,然后您要修改这些属性并再次调用setVisible(true ) 这使得最后一帧再次可见,因此删除其中一个。

  3. 您没有将程序放在 EDT 上,请参阅 SwingUtilities.invokeLater() why is it needed?

  4. 参见The use of multiple JFrames, Good / Bad Practice? (不好)您应该尝试使用单个 JFrame 和多个 JPanel 使用 Card Layout 切换它们。或使用JDialogs向用户显示信息/从用户检索信息

  5. 根据您上面的评论:

    I'm completely new to Jframe (along with java) and was given an API to follow along with. What does extends mean? I'll give it a google, but didn't know if you had an answer on how to fix it.

    我建议您在学习 Java Swing 之前首先学习 OOP 基础知识、Java 概念,这将使您的学习更加困难,因为它会增加更多的复杂性,并使您更难维护或制作高质量的软件。

关于java - JFrame 问题。这使得打印的窗口数量是我需要的两倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39627984/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com