java - 将 JPanel 添加到 JFrame 中?

标签 java swing

下面代码中的 while 循环未在 GUI 框架中显示 JPanel。这样做的正确方法是什么?我很感激你的帮助。不要太担心代码的作用。

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

import javax.swing.*;

public class Green {        

public static int[] values = new int[100];  
public final int COLOR_RANGE = 150;
public static int count;

JFrame window = new JFrame("Green Values");
static JPanel main_panel = new JPanel();
static JPanel green_panel;

public Green() {

    window.setSize(600, 600);
    window.setVisible(true);
    main_panel.setVisible(true);
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    window.pack(); 
}

public static void main (String[] args) throws FileNotFoundException {

Green g = new Green();  

Scanner sc = new Scanner(new File("green.txt"));  

int i = 0;
while(sc.hasNextInt()) {
    values[i++] = sc.nextInt();          
    count++;    
    JPanel green_panel = new JPanel();     // help
    main_panel.add(green_panel);           // help - is this correct?

sc.close();

    int max = values[0];
    int min = values[0];
    for (i = 0; i < count; i++) {   
        if (max < values[i]) {
            max = values[i];
        }
        if (min > values[i]) { 
            min = values[i];
        }
    }

    int temp;
    int val = 0;

    for (i = 0; i < count; i++) {   
        values[i] = val;
        System.out.println("Array value: " + val + " | " + "Green value: " +     g.greenValue(val, max, min));  
        temp = values[i+1];
        val = temp;
        }
}
}   

public int greenValue(int val, int max, int min) {  

    int colorValue;
    int arrayRange = (max - min);
    colorValue = (((val-min) * COLOR_RANGE) / arrayRange) + 100;  

    return colorValue;
}

}

...................................................... ...................................................... ...................................................... ...

最佳答案

What is the correct way to do this?

  1. 避免静态,从长远来看这对您没有帮助
  2. main_panel 添加到框架

也许更像是......

import java.awt.EventQueue;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Green {

    public static int[] values = new int[100];
    public final int COLOR_RANGE = 150;
    public static int count;

    JFrame window = new JFrame("Green Values");
    JPanel main_panel = new JPanel();
    JPanel green_panel;

    public Green() {

        window.setSize(600, 600);
        window.add(main_panel);
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.pack();
        window.setVisible(true);

    }

    public void add(JComponent comp) {
        main_panel.add(comp);
        main_panel.revalidate();
        main_panel.repaint();
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                Green g = new Green();

                try {
                    Scanner sc = new Scanner(new File("green.txt"));

                    int i = 0;
                    while (sc.hasNextInt()) {
                        values[i++] = sc.nextInt();
                        count++;
                        JPanel green_panel = new JPanel();     // help
                        g.add(green_panel);           // help - is this correct?

                        sc.close();

                        int max = values[0];
                        int min = values[0];
                        for (i = 0; i < count; i++) {
                            if (max < values[i]) {
                                max = values[i];
                            }
                            if (min > values[i]) {
                                min = values[i];
                            }
                        }

                        int temp;
                        int val = 0;

                        for (i = 0; i < count; i++) {
                            values[i] = val;
                            System.out.println("Array value: " + val + " | " + "Green value: " + g.greenValue(val, max, min));
                            temp = values[i + 1];
                            val = temp;
                        }
                    }
                } catch (FileNotFoundException exp) {
                    exp.printStackTrace();
                }
            }
        });

    }

    public int greenValue(int val, int max, int min) {

        int colorValue;
        int arrayRange = (max - min);
        colorValue = (((val - min) * COLOR_RANGE) / arrayRange) + 100;

        return colorValue;
    }

}

关于java - 将 JPanel 添加到 JFrame 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29551836/

相关文章:

java - 使用安全连接时的 Jetty 9 WebSocket 客户端问题

java - SearchContextMissingException 无法执行提取阶段 [search/phase/fetch/id]

java - 使用java在JTable中导入excel文件

java - 如何模拟 swing 弹出对话框中的按钮单击?

java - JTable 选择监听器

Java NIO2 AIO - TCP 聊天服务器

java - 将数据加载到 java.util.Properties 对象时出现 NullPointerException

java - Swift 快速排序算法

java - 匿名类和外部私有(private)字段

java - 绘制线条后访问线条