Java GUI 未显示

标签 java swing jframe jpanel jtextfield

import java.util.Scanner;

import javax.swing.*;
@SuppressWarnings("serial")
public class Synthetic_Division extends JFrame{
public void init(){
    JTextField JTF = new JTextField();
    JLabel label = new JLabel();
    JPanel panel = new JPanel();
    panel.add(label);
    panel.add(JTF);
    this.add(panel);
}
public Synthetic_Division(){
    super("Synthetic Division");
    this.init();
    this.setSize(600, 400);
    this.setVisible(true);

}
public static void main(String[] args) {
    int sol01 = 0, sol12 = 0, sol23 = 0, sol34 = 0, sol45 = 0, cross12 = 0, cross23 = 0, cross34 = 0, cross45 = 0, cross56 = 0, Remainder = 0, Divisor = 0, Number1 = 0, Number2 = 0, Number3 = 0, Number4 = 0, Number5 = 0, Number6 = 0, NumberOfNumbers = 0;
    System.out.println("Please input the following values accordingly.");
    System.out.println("1. Numbers in equation (: 4-6 :)");
    System.out.println("2. Divisor (: After the sign has been flipped :)");
    System.out.println("3. First Number");
    System.out.println("4. Second Number");
    System.out.println("5. Third Number");
    System.out.println("6. Fourth Number");
    System.out.println("7. Fifth Number (: If Needed :)");
    System.out.println("8. Sixth Number (: If Needed :)");
    Scanner in = new Scanner(System.in);
    NumberOfNumbers = in.nextInt();
    Divisor = in.nextInt();
    Number1 = in.nextInt();
    Number2 = in.nextInt();
    Number3 = in.nextInt();
    Number4 = in.nextInt();
    if (NumberOfNumbers == 5 || NumberOfNumbers == 6) {
        Number5 = in.nextInt();
    }
    if (NumberOfNumbers == 6) {
        Number6 = in.nextInt();
    }
    if (NumberOfNumbers == 4) {
        sol01 = Number1;
        cross12 = sol01 * Divisor;
        sol12 = Number2 + cross12;
        cross23 = sol12 * Divisor;
        sol23 = Number3 + cross23;
        cross34 = sol23 * Divisor;
        Remainder = Number4 + cross34;
        if (Remainder == 0) {
            System.out.println(sol01 + " + " + sol12 + " + " + sol23
                    + " with no remainder! ");
        } else {
            System.out.println(sol01 + " + " + sol12 + " + " + sol23
                    + " with a remainder of: " + Remainder);
        }

    } else if (NumberOfNumbers == 5) {
        sol01 = Number1;
        cross12 = sol01 * Divisor;
        sol12 = Number2 + cross12;
        cross23 = sol12 * Divisor;
        sol23 = Number3 + cross23;
        cross34 = sol23 * Divisor;
        sol34 = Number4 + cross34;
        cross45 = sol34 * Divisor;
        Remainder = Number5 + cross45;
        if (Remainder == 0) {
            System.out.println(sol01 + " + " + sol12 + " + " + sol23 + " + "
                    + sol34 + " with no remainder! ");
        } else {
            System.out.println(sol01 + " + " + sol12 + " + " + sol23
                    + " + " + sol34 + " with a remainder of: " + Remainder);
        }
    } else if (NumberOfNumbers == 6) {
        sol01 = Number1;
        cross12 = sol01 * Divisor;
        sol12 = Number2 + cross12;
        cross23 = sol12 * Divisor;
        sol23 = Number3 + cross23;
        cross34 = sol23 * Divisor;
        sol34 = Number4 + cross34;
        cross45 = sol34 * Divisor;
        sol45 = Number5 + cross45;
        cross56 = sol45 * Divisor;
        Remainder = Number6 + cross56;
        if (Remainder == 0) {
            System.out.println(sol01 + " + " + sol12 + " + " + sol23 + " + "
                    + sol34 + " + " + sol45 + " with no remainder! ");
        } else {
            System.out.println(sol01 + " + " + sol12 + " + " + sol23
                    + " + " + sol34 + " + " + sol45
                    + " with a remainder of: " + Remainder);
        }
    } else {
        System.out.println("Please input correct number of numbers");
    }

}
}

出于某种原因,当我运行此代码时,没有 GUI 显示,但有一个程序开始运行,我可以随时停止。正如您可能从代码中看出的那样,我对 Java 非常陌生。我刚刚添加了其余的代码,希望能帮助排除故障,尽管我还没有在主类中实现 GUI,因为我想看看 GUI 是否是我想要的第一个样子。

最佳答案

您错过了程序的“入口”。在 java 中,这是我已添加到您提供的代码中的 main() 方法。您只需要实际创建您编写的类的对象即可。另外,如果您打算进行 Swing 开发,您可能需要查看 Swing 的 EDT(事件调度线程)。找到它here .

import javax.swing.*;

@SuppressWarnings("serial")
public class Synthetic_Division extends JFrame {
    void init() {
        JTextField JTF = new JTextField();
        JLabel label = new JLabel();
        JPanel panel = new JPanel();
        panel.add(label);
        panel.add(JTF);
        this.add(panel);
    }

    public Synthetic_Division() {
        super("Synthetic Division");
        this.init();
        this.setSize(600, 400);
        this.setVisible(true);
    }

    //Here is the part you were missing. Everything else is fine.
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            public void run() {
                new Synthetic_Division();
            }
        });
    }
}

编辑

看到您的编辑后,我可以看到主要问题是您从未创建类的实例。您缺少的主要内容是new Synthetic_Division();。其他一些提示: 尽量不要将命令行 (System.out.println()) 和 GUI 代码合并到一个程序中。对于您和用户来说,这很快就会变得令人困惑。另外,请尝试遵守标准 Java 命名约定。类以大写字母开头,后面的每个单词也是大写 SyntheticDivision,而变量以小写字母开头,后面的每个单词也是大写 myVariableToWorkWith

关于Java GUI 未显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21199595/

相关文章:

java - 如何从复选框中获取多个选中的值并防止输出显示两次

java - 尝试更新 jtable 时出现 Sqlite 错误(缺少数据库)

java - 通过匿名操作监听器类将 JPanel 添加到 JFrame

Java Swing JTextArea 镜像

java - 如何获取 JComponent 的副本?

java - 在 JFRAME 中制作数基转换器

java - 运行时 exec 在执行过程中暂停

java - Java 中的分层单例可能吗?

java - 斯卡恩的骰子游戏 :the comp_overall_score is not getting updated

java - 在 Java 中绘制二维数组