簡體   English   中英

Java-圖形-在JPanel上添加其他形狀

[英]Java - Graphics - adding another shape on JPanel

我有一個制作JFrame並在上面添加面板的類
第二個擴展了JPanel並在其上繪畫

第一個(JFrame)

class MyWindow {

void qwe() {
    JFrame frame = new JFrame("qwe");
    frame.setVisible(true);
    frame.setLocationRelativeTo(null);
    frame.setSize(300, 200);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    MyPanel panel = new MyPanel();
    panel.setLayout(null);
    frame.add(panel);}}

第二個(JPanel)

class MyPanel extends JPanel {

public void paintComponent(Graphics g) {
    g.drawRect(50,50,90,70);
}

public void addShape() {
    Graphics g = this.getGraphics();

    Graphics2D gg = (Graphics2D) g;

    gg.drawString("qwe",20,20);}}

如何使用addShape()方法在JPanel上添加字符串?

不要使用組件的getGraphics()方法進行自定義繪制。 這種類型的繪畫只是臨時的,下次Swing確定需要繪畫的組件時將丟失。

自定義繪畫應始終在組件的paintComponent()方法中完成。

請參閱“ 自定義繪畫方法”,以了解兩個共同點是做您想做的事情。

作為@camickr觀點的具體示例,請注意MyPanel已經覆蓋了paintComponent() ,因此您可以將對Graphics上下文的引用傳遞給addShape() 另外,

  • 確保調用super.paintComponent(g)

  • 重寫getPreferredSize()以建立組件的首選大小。

  • 只能事件分發線程上構造和操作Swing GUI對象。

圖片

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class MyWindow {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new MyWindow().qwe();
            }
        });
    }

    void qwe() {
        JFrame frame = new JFrame("qwe");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        MyPanel panel = new MyPanel();
        panel.setLayout(null);
        frame.add(panel);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    private static class MyPanel extends JPanel {

        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawRect(50, 50, 90, 70);
            addShape(g);
        }

        public void addShape(Graphics g) {
            g.drawString("qwe", 20, 20);
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(300, 200);
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM