簡體   English   中英

如何將參數傳遞給paintComponent以便在其他類中調用它?

[英]How can I pass an argument to paintComponent in order to call it in a different class?

在我的主類中,我有以下代碼從我的機器加載圖像並將其顯示在框架上以在其上繪制東西:

public class ShowMap extends JPanel {

    private static final int WIDTH = 1340;
    private static final int HEIGHT = 613;

    public void main(String args[]) {
        JFrame frame = new JFrame("MAP");
        frame.setPreferredSize(new Dimension(WIDTH, HEIGHT));
        frame.setMinimumSize(new Dimension(WIDTH, HEIGHT));
        frame.setMaximumSize(new Dimension(WIDTH, HEIGHT));
        frame.setResizable(false);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel = (JPanel)frame.getContentPane();
        JLabel label = new JLabel();
        label.setIcon(new ImageIcon("map.png"));
        panel.add(label);
    }
}

我正在加載的圖像是一張地圖,我想通過在正確的坐標中繪制點來指示某些對象的位置。 因此,在此處指示DrawPoint類(在下面)很重要,這是什么坐標應該得到該點。

另外,我將非常感謝您提供有關如何刪除已繪制點的解釋。

我的搜索使我int coordx, int coordy了以下內容,但是一旦我將int coordx, int coordy添加到方法的參數中,它就不再突出顯示,並且我不知道如何在ShowMap調用此方法,同時將坐標傳遞為論點。

public class DrawPoint extends JPanel {

    private int coordx;
    private int coordy;

    public void paintComponent(Graphics g, int coordx, int coordy){
        g.setColor(Color.BLACK);
        g.fillOval(coordx,coordy,8,8);
    }
}

這是MadProgrammer在他的評論中所寫內容的一個演示:“應該更改組件的狀態變量,然后調用repaint”:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.Timer;

public class SwingTest extends JFrame {

    private static final int SIZE = 300;
    private DrawPoint drawPoint;

    public SwingTest()  {

        setDefaultCloseOperation(EXIT_ON_CLOSE);
        drawPoint = new DrawPoint();
        drawPoint.setPreferredSize(new Dimension(SIZE, SIZE));
        add(drawPoint);
        pack();
        setVisible(true);
    }

    //demonstrate change in DrawPoint state
    private void reDraw() {

        Random rnd = new Random();
        Timer timer = new Timer(1000, e -> { //periodically change coordinates and repaint
            drawPoint.setCoordx(rnd.nextInt(SIZE));
            drawPoint.setCoordy(rnd.nextInt(SIZE));
            drawPoint.repaint();
        });
        timer.start();
    }

    public static void main(String[] args){
        SwingUtilities.invokeLater(() ->    new SwingTest().reDraw());
    }
}

class DrawPoint extends JPanel {

    private int coordx, coordy;

    @Override
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        g.setColor(Color.BLACK);
        g.fillOval(coordx,coordy,8,8);
    }

    //use setters to change the state 
    void setCoordy(int coordy) {    this.coordy = coordy; }
    void setCoordx(int coordx) {this.coordx = coordx;}
}

暫無
暫無

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

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