2016-01-08 3 views
0

Я пытаюсь написать простую игру. Я в начале всего, и моя цель - создать коробку, которая слушает мою клавиатуру. При попытке просто нарисовать ящик в JPanel, JFrame запускается, а затем закрывается через 3 секунды. Кто-то может помочь? Я потерялся в этой ситуации Java Swing JFrame, JPanel.JavaSwing Game: JFrame не отображается

package abbygail; 

public class Abbygail { 
    public static void main(String[] args) { 
     GUI gui = new GUI(); 
    } 

} 

Different класс:

package abbygail; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 



public class GUI extends JFrame { 



    public GUI(){ 
     setSize(640, 480); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     Game_Board brd = new Game_Board(); 
     setContentPane(brd); 
     getContentPane().setLayout(null); 


    } 
} 

Different класс:

package abbygail; 

import javax.swing.JPanel; 


public class Game_Board extends JPanel{ 

    public Game_Board(){ 
     setSize(640, 480); 
     Blue_Box blbx = new Blue_Box(); 
     add(blbx); 
    } 
} 

Different класс:

package abbygail; 

import java.awt.BasicStroke; 
import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Point; 
import java.awt.RenderingHints; 
import java.awt.geom.Rectangle2D; 
import javax.swing.JPanel; 


public class Blue_Box extends JPanel{ 

    /** 
    * 
    * @param g 
    */ 
    private Point p1 = new Point(100, 100); 
    private Point p2 = new Point(540, 380); 

    public Blue_Box(){ 

    } 

    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     Graphics2D g2d = (Graphics2D) g; 
     g2d.setColor(Color.blue); 
     g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON); 
     g2d.setStroke(new BasicStroke(8,BasicStroke.CAP_ROUND,  BasicStroke.JOIN_BEVEL)); 
     g2d.draw(new Rectangle2D.Double(p1.x, p1.y, 40, 30)); 
    } 

} 
+2

Это будет трудно помочь, угадать, какие ошибки у вас есть без соответствующего кода. Пожалуйста, сначала помогите нам помочь вам, задав лучший вопрос, который показывает соответствующий код, желательно [mcve] (пожалуйста, прочитайте ссылку), и это показывает и описывает результаты ваших попыток отладки. –

+0

@ HovercraftFullOfEels конечно ... так немой! –

+1

Значит, этот код выше закрывается через 3 секунды? Вы видите какие-либо исключения или ошибки? Основная проблема, которую я вижу при быстром обращении, - это использование нулевых макетов, чего следует избегать, но это не остановит графический интерфейс. –

ответ

6

Вы никогда не называйте setVisible(true); на вашем экземпляре GUI.

Итак:

public class Abbygail { 
    public static void main(String[] args) { 
     GUI gui = new GUI(); 
     gui.setVisible(true); 
    } 
} 

Кроме того, небольшой второстепенный вопрос относительно использования нулевых макетов, а нулевые макеты и setBounds() может показаться Качели новичками, как самый простой и лучший способ для создания комплекса графического интерфейса, тем больше Качели GUI, вы создаете более серьезные трудности, с которыми вы столкнетесь при их использовании. Они не будут изменять размеры ваших компонентов при изменении размера графического интерфейса, они являются королевской ведьмой для улучшения или поддержки, они полностью не выполняются при размещении в scrollpanes, они выглядят ужасно ужасно при просмотре на всех платформах или разрешениях экрана, отличных от исходного ,

Что касается вашей синей коробки - ваш Blue_Box JPanel проклеивает 0, 0. Дайте ему метод GetPreferredSize и вернуть приличный размер:

public class Blue_Box extends JPanel { 

    private static final int PREF_W = 640; 
    private static final int PREF_H = 480; 
    private Point p1 = new Point(100, 100); 
    private Point p2 = new Point(540, 380); 

    public Blue_Box() { 

    } 

    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     Graphics2D g2d = (Graphics2D) g; 
     g2d.setColor(Color.blue); 
     g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
     g2d.setStroke(new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL)); 
     g2d.draw(new Rectangle2D.Double(p1.x, p1.y, 40, 30)); 
    } 

    @Override 
    public Dimension getPreferredSize() { 
     if (isPreferredSizeSet()) { 
      return super.getPreferredSize(); 
     } 
     return new Dimension(PREF_W, PREF_H); 
    } 

} 

и избавиться от пустых макетов

+0

Так глупо от меня !!! ... Но как насчет коробки? Это тоже не так? –

+0

@MertKarakas: см. Править –

+0

Wow не знал, что JPanel был в 0,0. Могу ли я также добавить keylistener? –

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