Java 如何在不覆盖JFrame的情况下将JPanel图形添加到JFrame

Java 如何在不覆盖JFrame的情况下将JPanel图形添加到JFrame,java,graphics,jframe,jpanel,Java,Graphics,Jframe,Jpanel,我正在尝试在我的框架中添加一个小的龙卷风图形(倒置的金字塔)。我可以通过在main方法中将龙卷风添加到框架中来获得它,但是当我这样做时,我看到的只是龙卷风图形,而不是它下面的GUI 所以,我现在尝试在createComponents方法中创建Tornado图形时将其添加到帧中,但它现在根本不显示。取而代之的是,我所能看到的只是框架中的GUI 我可能错过了一些简单的东西,但我似乎无法找到答案。我不确定我需要什么才能让GUI和tornado图形都显示出来 public class EFSca

我正在尝试在我的框架中添加一个小的龙卷风图形(倒置的金字塔)。我可以通过在main方法中将龙卷风添加到框架中来获得它,但是当我这样做时,我看到的只是龙卷风图形,而不是它下面的GUI

所以,我现在尝试在createComponents方法中创建Tornado图形时将其添加到帧中,但它现在根本不显示。取而代之的是,我所能看到的只是框架中的GUI

我可能错过了一些简单的东西,但我似乎无法找到答案。我不确定我需要什么才能让GUI和tornado图形都显示出来

    public class EFScaleViewer {

        public static void main(String[] args) {
            // TODO Auto-generated method stub
            TornadoFrame frame = new TornadoFrame();

            frame.setTitle("EF Scale");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);  
        }
}
这里是我创建框架并尝试添加龙卷风的地方:

public class TornadoFrame extends JFrame{

    private JButton submit;
    private JLabel label;
    static JLabel errorLabel;
    static JTextField textBox;   
    JPanel tornado = new TornadoComponent();

    private static final int FRAME_WIDTH = 400;
    private static final int FRAME_HEIGHT = 300;

    //Constructor for the frame 
    public TornadoFrame() {
        super();
        setSize(FRAME_WIDTH, FRAME_HEIGHT);
        createComponents();
    }

    private void createComponents()
       {
          textBox = new JTextField("    "); 
          submit = new JButton("Submit");
          label = new JLabel("Please enter a windspeed:");
          errorLabel = new JLabel("Error Message " );

          JPanel panel = new JPanel();
          panel.add(label);
          panel.add(textBox);
          panel.add(submit);

         panel.add(errorLabel);   
         panel.add(tornado);
         add(panel);
       }    
}
public class TornadoComponent extends JPanel {
    public void paintComponent(Graphics g) {
        int[] xPoints = {100,200,0};
        int[] yPoints = {0,200,200};
        int nPoints = 3;

        g.drawPolygon(xPoints, yPoints, nPoints);

    }
}
我知道这是可行的,但我可能遗漏了一些东西,所以这里是我制造龙卷风的地方:

public class TornadoFrame extends JFrame{

    private JButton submit;
    private JLabel label;
    static JLabel errorLabel;
    static JTextField textBox;   
    JPanel tornado = new TornadoComponent();

    private static final int FRAME_WIDTH = 400;
    private static final int FRAME_HEIGHT = 300;

    //Constructor for the frame 
    public TornadoFrame() {
        super();
        setSize(FRAME_WIDTH, FRAME_HEIGHT);
        createComponents();
    }

    private void createComponents()
       {
          textBox = new JTextField("    "); 
          submit = new JButton("Submit");
          label = new JLabel("Please enter a windspeed:");
          errorLabel = new JLabel("Error Message " );

          JPanel panel = new JPanel();
          panel.add(label);
          panel.add(textBox);
          panel.add(submit);

         panel.add(errorLabel);   
         panel.add(tornado);
         add(panel);
       }    
}
public class TornadoComponent extends JPanel {
    public void paintComponent(Graphics g) {
        int[] xPoints = {100,200,0};
        int[] yPoints = {0,200,200};
        int nPoints = 3;

        g.drawPolygon(xPoints, yPoints, nPoints);

    }
}

您必须设置JPanels大小,使其能够显示图形

静态类组件扩展了JPanel{
公共组件(){
setPreferredSize(新尺寸(500500));
}
@凌驾
公共组件(图形g){
//随便
}
}
为了触发
paintComponent(Graphics g)
您必须添加
tornado.repaint()
createComponents()函数的末尾

private void createComponents() {
    //All your components
    panel.add(tornado);
    add(panel);
    tornado.repaint();
}
现在显示多边形,但不在正确的位置(稍微偏离图像)

因此,我们必须稍微安排您的JPanel:

private void createComponents(){
textBox=新的JTextField(“”);
提交=新按钮(“提交”);
标签=新的JLabel(“请输入风速:”);
errorLabel=新的JLabel(“错误消息”);
JPanel upper=新的JPanel();
upper.setLayout(新的BoxLayout(upper,BoxLayout.X_轴));
添加(标签);
添加(文本框);
添加(提交);
添加(错误标签);
JPanel lower=新的JPanel();
下部.setLayout(新的BoxLayout(下部,BoxLayout.X_轴));
降低。添加(龙卷风);
JPanel over=新的JPanel();
over.setLayout(新的BoxLayout(over,BoxLayout.Y_轴));
加上(上);
加上(下);
增加(超过);
龙卷风。重新油漆();
}
基本上我做了一些盒子

Over
    Upper
        ... your stuff with text
    Lower
        Our tornado
现在我们的龙卷风绕错方向了

int[] xPoints = {100,200,150};
int[] yPoints = {0,0,150};

我们刚刚创造了一个非常基本的龙卷风,它不是针对任何东西:)


如果以后要更改龙卷风的位置,只需调用
tornado.repaint()已设置完毕。

必须设置JPanels大小,才能显示图形

静态类组件扩展了JPanel{
公共组件(){
setPreferredSize(新尺寸(500500));
}
@凌驾
公共组件(图形g){
//随便
}
}
为了触发
paintComponent(Graphics g)
您必须添加
tornado.repaint()
createComponents()函数的末尾

private void createComponents() {
    //All your components
    panel.add(tornado);
    add(panel);
    tornado.repaint();
}
现在显示多边形,但不在正确的位置(稍微偏离图像)

因此,我们必须稍微安排您的JPanel:

private void createComponents(){
textBox=新的JTextField(“”);
提交=新按钮(“提交”);
标签=新的JLabel(“请输入风速:”);
errorLabel=新的JLabel(“错误消息”);
JPanel upper=新的JPanel();
upper.setLayout(新的BoxLayout(upper,BoxLayout.X_轴));
添加(标签);
添加(文本框);
添加(提交);
添加(错误标签);
JPanel lower=新的JPanel();
下部.setLayout(新的BoxLayout(下部,BoxLayout.X_轴));
降低。添加(龙卷风);
JPanel over=新的JPanel();
over.setLayout(新的BoxLayout(over,BoxLayout.Y_轴));
加上(上);
加上(下);
增加(超过);
龙卷风。重新油漆();
}
基本上我做了一些盒子

Over
    Upper
        ... your stuff with text
    Lower
        Our tornado
现在我们的龙卷风绕错方向了

int[] xPoints = {100,200,150};
int[] yPoints = {0,0,150};

我们刚刚创造了一个非常基本的龙卷风,它不是针对任何东西:)

如果以后要更改龙卷风的位置,只需调用
tornado.repaint()和您都设置好了