繁体   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