簡體   English   中英

Java-單擊按鈕后用鼠標拖動圖形

[英]Java - Drawing shape with mouse and drag after clicking button

我想在不使用JComponent的情況下執行此操作。 想法是每個形狀都有多個按鈕,通過單擊一個按鈕,然后可以為該按鈕繪制形狀。 不幸的是,我什至無法繪制形狀。

public static void main(String[] args) {
    JFrame frame = new JFrame();
    JButton rect = new JButton("Rectangle");
    ActionListener rListener = new RectangleNode();
    rect.addActionListener(rListener);
    MouseListener rMListener = new RectangleNode();
    rect.addMouseListener(rMListener);
    MouseMotionListener rMMListener = new RectangleNode();
    rect.addMouseMotionListener(rMMListener);
    JButton ellipse = new JButton("Ellipse");
    JPanel panel = new JPanel();
    panel.add(rect);
    panel.add(ellipse);
    frame.add(panel);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(600, 600);
    frame.setTitle("Graph Draw");
    frame.setVisible(true);
}

RectangleNode類

public class RectangleNode implements ActionListener,MouseListener,MouseMotionListener {
    private Point p1;
    private Rectangle r;
    private boolean rdraw;

    @Override
    public void actionPerformed(ActionEvent e) {
        rdraw = true;   
    }

    @Override
    public void mousePressed(MouseEvent e) {
        if(rdraw = true){
            p1 = e.getPoint();
            r = new Rectangle(p1.x, p1.y, p1.x - p1.x, p1.y - p1.y);
        }
    }

    @Override
    public void mouseReleased(MouseEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public void mouseDragged(MouseEvent e) {
        if(rdraw = true){
            int x = Math.min(p1.x, e.getX());
            int y = Math.min(p1.y, e.getY());
            int width = Math.abs(p1.x - e.getX());
            int height = Math.abs(p1.y - e.getY());
            r.setBounds(x, y, width, height);
            repaint();
        }
    }

    @Override
    public void mouseMoved(MouseEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public void mouseClicked(MouseEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public void mouseEntered(MouseEvent e) {
        TODO Auto-generated method stub

    }

    @Override
    public void mouseExited(MouseEvent e) {
        // TODO Auto-generated method stub

    }
    public void paintComponent(Graphics g) {  
        Graphics2D g2 = (Graphics2D)g;
        g2.draw(r); ;
    }
}

在這種情況下,我不確定如何使用重繪和paintComponent方法。

查看“ 自定義繪畫方法”以獲取有關如何動態繪制矩形的示例。

在您的情況下,您希望能夠繪制矩形或橢圓形,因此需要進行一些更改:

  1. Java API支持Shape類。 形狀可以是矩形,橢圓形,多邊形等。因此,您需要將“ ColoredRectangle”類更改為“ ColoredShape”類。 這將允許您存儲矩形或橢圓形。

  2. 然后,在paintComponent()代碼中,您需要將drawRect(..)方法更改為draw(Shape),以便可以繪制矩形和橢圓形。

  3. 在mouseDragged()邏輯中,您需要修改邏輯以檢查是否要繪制Rectangle或Ellispse。 然后,您將創建合適的Shape並再次使用draw(Shape)方法而不是drawRect(...)方法。

  4. 然后,您需要向類添加一個屬性,以控制要繪制的Shape。 然后,當您單擊按鈕時,設置屬性。 或者,也可以不使用按鈕,而是為每個Shape設置單選按鈕。

無論如何,請使用原始代碼來了解其工作原理。 首先,將代碼轉換為僅對矩形使用ColoredShape類。 然后,一旦可行,您就可以添加對Ellipse的支持。

暫無
暫無

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

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