簡體   English   中英

在 Java 中使用圖形繪圖

[英]Drawing using Graphics in Java

我有一個圖形問題。 我正在嘗試在框架中繪制圖像,但遇到了一些問題。 我想知道成功完成我想做的事情的最佳方法是什么。 我將展示我的 3 個班級。 Main 類創建菜單。 一旦匹配按鈕被按下,它會創建 Board 對象並調用 Main.draw 來繪制它的所有組件(現在僅是 Board)。 圖片只是偶爾出現,所以它讓我意識到我的代碼可能沒有以正確的方式設置。 謝謝!!!

主班

                import java.awt.Graphics;
                public class Main 
            {
                public static Board theBoard;

                public static void main(String[] args) 
                {
                    new Menu("Main Menu").setVisible(true); 
                }

                public static void draw(Graphics painter)
                {
                    theBoard.draw(painter);
                }
            }

菜單類

    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;

    public class Menu extends JFrame implements ActionListener
    {
        //Jpanel
        JPanel pnlButton = new JPanel();
        //Buttons
        JButton btnMatchmaking = new JButton("Matchmaking");
        JButton btnExit = new JButton("Exit");
        JButton btnProfile = new JButton("Profile");
        JButton btnOption = new JButton("Options");

        public Menu(String s) 
        {        
            super("Bu$ted: " + s);  
            btnExit.addActionListener(this);
            btnMatchmaking.addActionListener(this);
            //JPanel setting
            pnlButton.add(btnMatchmaking);
            pnlButton.add(btnProfile);
            pnlButton.add(btnOption);
            pnlButton.add(btnExit);
            pnlButton.setVisible(true);

            //The winddow options
            super.setLocation(0,0); //A remplacer par des dimension variables
            super.setSize(600, 500);    //A remplacer par des dimension variables
            super.setResizable(false);
            super.setVisible(true);
            super.add(pnlButton);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }

        //Handle action events.
        //@param evt
        @Override
        public void actionPerformed(ActionEvent evt) 
        { 
            if(evt.getSource() == btnMatchmaking)
            {
                super.remove(pnlButton);   
                Main.theBoard = new Board("TestBoard");
                super.add(Main.theBoard);
                super.setSize(Main.theBoard.boardSize);      
                Main.draw(super.getGraphics()); 


            }
            if(evt.getSource() == btnExit)
            {
                System.exit(0);
            }
        }
    }

董事會課程

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JPanel;


public class Board extends JPanel
{
    BufferedImage boardImage;
    int width;
    int height;
    Dimension boardSize;

    public Board (String boardName)
    {
        boardImage = loadBoard(boardName);
        width=boardImage.getWidth();
        height=boardImage.getHeight();
        boardSize = new Dimension(width,height);
        this.setVisible(true);
        System.out.println("The board is setup.");
    }

    private BufferedImage loadBoard (String boardName)
    {
        BufferedImage img = null;
        try 
        {
            img = ImageIO.read(new File("Components/"+boardName+".png"));
        } 
        catch (IOException e) 
        {
            System.out.println("The board image couldn't be loaded.");
        }
        return img;
    }

    public void draw(Graphics painter)
    {
        painter.drawImage(boardImage, 0, 0, null);
        System.out.println("The board image was painted.");
    }
}

推薦的方法是覆蓋Board類的paintComponent並讓繪制系統處理它......

有關更多詳細信息,請參閱AWT 和 Swing 中的繪畫以及執行自定義繪畫

暫無
暫無

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

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