为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

jeck猫 2022-10-26 17:05:15
我正在尝试在我的框架中添加一个小的龙卷风图形(倒金字塔)。我可以通过在 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);    }}
查看完整描述

1 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

您必须设置 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};

瞧:

//img1.sycdn.imooc.com//6358f86d0001b31803840293.jpg

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

如果你想稍后改变龙卷风的位置,你只需要回忆一下就可以tornado.repaint();了。


查看完整回答
反对 回复 2022-10-26
  • 1 回答
  • 0 关注
  • 110 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信