PaintComponent некорректно работает - Java

Узнай цену своей работы

Формулировка задачи:

Добрый день, пытаюсь продолжить свою игру. Отрисовываю элементы paintComponent, два элемента отрисовывает, а один элемент нет, т.е ракетку не рисует.
    
    @Override
    protected void paintComponent (Graphics g) {

        Graphics2D g2d = (Graphics2D)g; 
        int image_index=0, count=0;
        for (int i=0; i<4; i++){
            for(int j=0; j<8; j++){ 
            if (bw.getVisibleArray(i, j)==true){
            g2d.drawImage(bw.getImage(j),bw.getPosition(count).x,bw.getPosition(count).y,null);}
            
            image_index=image_index+1;
            count++;
            
            }
            image_index=0;
            }
        g2d.drawImage(b.getImage(),b.getPosition().x,b.getPosition().y,null);
        g2d.drawImage(s.getImageSchlaeger(),s.getPositionSchlaeger().x,s.getPositionSchlaeger().y,null);
        
        }
Не рисует последнию строку, это ракетка внизу окна. Плюс вопрос, как сделать что бы было видно фон JFrame
        cp.setOpaque(false);
прописала в конструкторе который создает JFrame окно, перед добавлением на Фрейм
JLabel background=new JLabel(new ImageIcon("background.jpg"));
        add(background);
        cp.setOpaque(false);                
        setContentPane(cp);
        cp.add(new PaintComponentsBreakout());
Загрузила проект в архиве, что бы удобнее было. Помогите пожалуйста найти баги... Может надо отрисовку делать каждого элемента отдельно в соответствующем классе и JPanel создавать не общий, а для каждого элемента? Спасибо.

Решение задачи: «PaintComponent некорректно работает»

textual
Листинг программы
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
 
import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
 
public class Breakout extends JFrame implements ActionListener{
 
    private static final long serialVersionUID = 1L;
 
    
    private JMenuBar menuBar = new JMenuBar();
    private JPanel cp = new JPanel(new BorderLayout());
        
    private Schlaeger schlaeger= new Schlaeger();
    PaintComponentsBreakout gamePanel= new PaintComponentsBreakout(schlaeger);
        public Breakout() {
 
        gamePanel.addKeyListener(new TAdapter()); 
        JMenu infoMenu = new JMenu("Info");
        menuBar.add(infoMenu);
 
        JMenuItem rules = new JMenuItem("Spielregeln");
        rules.addActionListener(this);
        rules.setActionCommand("rules");
        infoMenu.add(rules);
 
        JMenuItem keyboardAssignment = new JMenuItem("Tastaturbelegung");
        keyboardAssignment.addActionListener(this);
        keyboardAssignment.setActionCommand("keyboardAssignment");
        infoMenu.add(keyboardAssignment);
 
        JMenu gameMenu = new JMenu("Spiel");
        menuBar.add(gameMenu);
 
        JMenuItem newGame = new JMenuItem("neues Spiel");
        newGame.addActionListener(this);
        newGame.setActionCommand("newGame");
        gameMenu.add(newGame);
 
        JMenuItem endGame = new JMenuItem("Spiel beenden");
        endGame.addActionListener(this);
        endGame.setActionCommand("endGame");
        gameMenu.add(endGame);
 
        this.setJMenuBar(menuBar);
        setLayout(new BorderLayout());
        
        JLabel background=new JLabel(new ImageIcon("background.jpg"));
        add(background);
        cp.setOpaque(false);  
//               
        cp.add(gamePanel);       
        setContentPane(cp);
        gamePanel.setFocusable(true);
        
        
   
    
        
        setVisible(true);
        setSize(600, 800);
        setTitle("Breakout");
        setLocationRelativeTo(null);
        setResizable(false);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        
        
    }
    
 
    public void actionPerformed(ActionEvent ae) {
 
        String menu = ae.getActionCommand();
 
        switch (menu) {
 
        case "rules":
            showRules();
            break;
 
        case "keyboardAssignment":
            showKeyboardAssignment();
            break;
 
        case "newGame":
            break;
 
        case "endGame":
            System.exit(0);
            break;
 
        }
 
    }
 
    private void showKeyboardAssignment() {
 
        JDialog assignmentDialog = new JDialog();
        assignmentDialog.setTitle("Tastaturbelegung");
        assignmentDialog.setSize(400, 400);
        assignmentDialog.setLocationRelativeTo(null);
 
        JLabel rules = new JLabel(
                "<html><center>linke Pfeiltaste: bewegt SchlпїЅger nach links <br>rechte Pfeiltaste: bewegt SchlпїЅger nach rechts.<center></html>");
        assignmentDialog.add(rules);
 
        assignmentDialog.setVisible(true);
 
    }
 
    private void showRules() {
 
        JDialog rulesDialog = new JDialog();
        rulesDialog.setTitle("Spielregeln");
        rulesDialog.setSize(400, 400);
        rulesDialog.setLocationRelativeTo(null);
 
        JLabel rules = new JLabel(
                "<html><center>Der Ball muss mit dem SchlпїЅger so gelenkt werden, dass er Mauersteine trifft. So werden diese zum Verschwinden gebracht.Erst wenn alle Mauersteine getroffen wurden, ist das Spiel gewonnen.Wenn der Ball runterfпїЅllt, ist das Spiel verloren.<center></html>");
        rulesDialog.add(rules);
 
        rulesDialog.setVisible(true);
 
    }
    private class TAdapter extends KeyAdapter {
        public void keyReleased(KeyEvent e) { schlaeger.keyReleased(e); run(); }
        public void keyPressed(KeyEvent e) { schlaeger.keyPressed(e); run(); }
        }
    public void run() {
        schlaeger.move(); repaint();
    }
 
    public static void main(String[] args) {
 
        new Breakout();
 
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5