2014-11-15 4 views
0

У меня есть вопрос с графикой. Я пытаюсь сделать изображение в рамке, и у меня возникла проблема. Я хочу знать, что лучше всего подходит для успешного выполнения того, что я хочу сделать. Я покажу свои 3 класса. Основной класс создает меню. Когда нажата кнопка Matchmaking, она создаст объект Board и вызовет Main.draw, чтобы нарисовать весь его компонент (только Board). Изображение только когда-нибудь появляется, поэтому я заставляю меня понять, что мой код, вероятно, не настроен правильно. БЛАГОДАРЯ!!!Рисование с использованием графики в Java

ГЛАВНЫЙ КЛАСС

   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); 
      } 
     } 
    } 

BOARD КЛАСС

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."); 
    } 
} 
+0

Вы ** не ** рисовать в любом месте, но 'краски()' (в основном, не делайте этого). Прочтите [Начало работы с Swing] (https://docs.oracle.com/javase/tutorial/uiswing/start/index.html). –

ответ

0

Рекомендуемый подход переопределить paintComponent вашего Board класса и пусть окрасочная система Handel его ...

См Painting in AWT and Swing и Perfoming Custom Painting для более подробной информации

+0

Итак, я не должен использовать свой метод Drawb (homebrew), но использовать paintCOmponent? Я знал, что есть что-то вроде этого lol, но не мог вспомнить (было пару лет, прежде чем я запрограммировал ха-ха) Спасибо за быстрый ответ bro! – P4ndaH3ro

+0

@ P4ndaH3ro: если ответ MadProgrammer ответил на ваш вопрос, тогда, пожалуйста, подумайте о его принятии. –

Смежные вопросы