Java 如何在JFrame上显示Graphics2D对象

Java 如何在JFrame上显示Graphics2D对象,java,user-interface,netbeans,graphics2d,graphing,Java,User Interface,Netbeans,Graphics2d,Graphing,这是我第一次尝试构建GUI,我陷入了一个似乎无法找到解决方案的僵局。目前,我已经设置了部分GUI,但我想插入一个在另一个类上创建的图形,但是,我不确定如何将它与我当前的JFrame链接。我可以让它作为一个单独的实体工作,但不能一起工作 主显示类: public static void main(String args[]) { /* Set the Nimbus look and feel */ //<editor-fold defaultstate="collapsed"

这是我第一次尝试构建GUI,我陷入了一个似乎无法找到解决方案的僵局。目前,我已经设置了部分GUI,但我想插入一个在另一个类上创建的图形,但是,我不确定如何将它与我当前的JFrame链接。我可以让它作为一个单独的实体工作,但不能一起工作

主显示类:

public static void main(String args[]) {
    /* Set the Nimbus look and feel */
    //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
    /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
     * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */
    try {
        for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
            if ("Nimbus".equals(info.getName())) {
                javax.swing.UIManager.setLookAndFeel(info.getClassName());
                break;
            }
        }
    } catch (ClassNotFoundException ex) {
        java.util.logging.Logger.getLogger(MainDisplay.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
        java.util.logging.Logger.getLogger(MainDisplay.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
        java.util.logging.Logger.getLogger(MainDisplay.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (javax.swing.UnsupportedLookAndFeelException ex) {
        java.util.logging.Logger.getLogger(MainDisplay.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }
    //</editor-fold>
    //</editor-fold>

    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new MainDisplay().setVisible(true);
        }

    });
     float LvBTC;
    float LvLTC;
    float LvETH;

    float[] HBTC;
    float[] HLTC;
    float[] HETH;

    float CurETH;
    float CurBTC;
    float CurLTC;

    WebScraper WS1 = new WebScraper();
    LvBTC = WS1.LvScrapeBTC();
    LvLTC = WS1.LvScrapeLTC();
    LvETH = WS1.LvScrapeETH();

    HBTC = WS1.HScrapeBTC();
    HLTC = WS1.HScrapeLTC();
    HETH = WS1.HScrapeETH(); 

    System.out.println("Bitcoin's Current Price is: $"+LvBTC);
    System.out.println("Litecoin's Current Price is: $"+LvLTC);
    System.out.println("Ethereum's Current Price is: $"+LvETH);
    Graph G1 = new Graph();
    G1.CurrentValues(HBTC);

    for (int i = 0; 5 > i;) {
        System.out.println("Day " + (i + 1) + ": $" + G1.CurValues[i]);
        i++;
    }

   System.out.println("Index of largest value: " + G1.IndexLarge(G1.CurValues));
    System.out.println("Index of smallest value: " + G1.IndexSmall(G1.CurValues));

    Graph Graphing = new Graph();



}

因此,我眼前的问题是,您正在从
JFrame
进行扩展,这不是一个好方法,因为这将UI锁定在单个用例中(不容易重用)

我的第二个问题是,您已经在
JFrame
中创建了一个名为
paintComponent
的方法,但是由于
JFrame
不使用这种绘画风格,因此从未调用它

因此,我要做的第一件事是更改
Graph
,使其从
JPanel
扩展而来

public class Graph extends JPanel {
    //...
然后,我会更新您的
paintComponent
,使其正确支持绘制过程

@Overrride
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D) g;
    //...
现在,下一个问题是,您需要提供一些大小调整提示,以便您添加组件的容器的布局管理器了解如何最好地布局组件

@Override
public Dimension getPreferredSize() {
    // I've not been through your code in detail
    // so I've not calculated what the actual
    // preferred size might be and this is just an
    // example you'll have to update
    return new Dimension(200, 200);
}

现在,您可以创建
Graph
的一个实例,并将其添加到您想要的任何容器中

IDE不允许我插入覆盖,并出现错误:方法不覆盖或实现来自超类型的方法。还有超级油漆组件(g);有一个错误,说找不到变量“super”。您是否遵循了
公共类图形扩展JPanel{
step;)-这也会将
import javax.swing.JFrame;
更改为
import javax.swing.JPanel;
好的,所以我忘记了导入JPanel,但现在我仍然不确定如何让图形显示在我的JFrame上更改
图形
以支持
JPanel
的要点是,现在您可以随意显示它。您可以将它添加到新的
JFrame
或添加到现有的
JFrame
中。我是否必须设置任何可见的内容,因为到目前为止它还没有出现
@Overrride
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D) g;
    //...
@Override
public Dimension getPreferredSize() {
    // I've not been through your code in detail
    // so I've not calculated what the actual
    // preferred size might be and this is just an
    // example you'll have to update
    return new Dimension(200, 200);
}