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

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


因此,我现在尝试在 createComponents 方法中创建 Tornado 图形时将其添加到框架中,但它现在根本没有出现。相反,我只能在框架中看到它的 GUI。


我可能错过了一些简单的东西,但我似乎无法弄清楚。我不确定我需要做什么才能让 GUI 和龙卷风图形都出现。


    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);


    }

}


jeck猫
浏览 111回答 1
1回答

守着星空守着你

您必须设置 JPanel 大小才能显示图形。static class TornadoComponent extends JPanel {    public TornadoComponent() {        setPreferredSize(new Dimension(500, 500));    }    @Override    public void paintComponent(Graphics g) {        //Whatever    }}为了触发paintComponent(Graphics g),您必须在函数tornado.repaint();末尾添加。createComponents()private void createComponents() {    //All your components    panel.add(tornado);    add(panel);    tornado.repaint();}现在显示多边形但不在正确的位置(稍微偏离图像)因此,我们必须稍微安排一下您的 JPanel:    private void createComponents() {        textBox = new JTextField("    ");        submit = new JButton("Submit");        label = new JLabel("Please enter a windspeed:");        errorLabel = new JLabel("Error Message " );        JPanel upper = new JPanel();        upper.setLayout(new BoxLayout(upper,BoxLayout.X_AXIS));        upper.add(label);        upper.add(textBox);        upper.add(submit);        upper.add(errorLabel);        JPanel lower = new JPanel();        lower.setLayout(new BoxLayout(lower,BoxLayout.X_AXIS));        lower.add(tornado);        JPanel over = new JPanel();        over.setLayout(new BoxLayout(over,BoxLayout.Y_AXIS));        over.add(upper);        over.add(lower);        add(over);        tornado.repaint();    }基本上我会做一些盒子......Over    Upper        ... your stuff with text    Lower        Our tornado现在我们的龙卷风是错误的方式...int[] xPoints = {100,200,150};int[] yPoints = {0,0,150};瞧:我们刚刚创建了一个非常基本的龙卷风,它不针对任何东西 :)如果你想稍后改变龙卷风的位置,你只需要回忆一下就可以tornado.repaint();了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java