亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在不覆蓋 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};

瞧:

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

我們剛剛創建了一個非?;镜凝埦盹L,它不針對任何東西 :)

如果你想稍后改變龍卷風的位置,你只需要回憶一下就可以tornado.repaint();了。


查看完整回答
反對 回復 2022-10-26
  • 1 回答
  • 0 關注
  • 143 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號