2014-10-24 4 views
0

Класс один:Невозможно получить этот взорванный прямоугольник! (Java Swing)

public class Bar extends JComponent { 

    // instance variables - replace the example below with your own 
    private static boolean litUp = false; 
    private static boolean vertical = true; 
    private static int positionX; 
    private static int positionY; 
    private static int sizeX; 
    private static int sizeY; 
    private static Color color; 

    public void paintComponent(Graphics g) { 

     System.out.println("I am being called"); 
     positionX = 50; 
     positionY = 30; 
     vertical = true; 

     if(vertical == true) { 
      sizeX = 10; 
      sizeY = 30; 
      if(litUp == true) 
      { 
       color = Color.red; 
      } 
      else 
      { 
       color = Color.black; 
      } 
     } else{ 

      sizeX = 30; 
      sizeY = 10; 
      if(litUp == true) 
      { 
       color = Color.red; 
      } 
      else 
      { 
       color = Color.black; 
      } 
     } 
     g.fillRect(positionX, positionY, sizeX, sizeY); 
     g.setColor(color); 
     super.paintComponent(g); 
    } 
} 

Класса:

public class TestingBar { 

    public static void main(String[] args) { 

     final int FRAME_WIDTH = 317; 
     final int FRAME_HEIGHT = 415; 

     //created frame and panel. Panel layout is taken away from the flow layout. 
     final JFrame myFrame = new JFrame(); 
     myFrame.setTitle("Tester Window (v2)"); 
     myFrame.setSize(FRAME_WIDTH,FRAME_HEIGHT); 
     final JPanel myPanel = new JPanel(); 
     myPanel.setLayout(null); 

     final Bar testBar = new Bar(); 

     //myPanel.add(testBar); 
     myFrame.getContentPane().add(testBar); 
     myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     myFrame.setVisible(true); 

     myPanel.add(testBar); 
    } 
} 

Это просто дает мне пустой JFrame. И заявление печати никогда не используется в методе paintComponent. Я серьезно в тупике.

PS: Они не позволят мне опубликовать это, не набрав больше, поэтому я расскажу о черепахах. Я не понимаю, как они выживают в дикой природе. Они не могут бежать, их раковины действительно не так уж трудны, они могут атаковать только спереди, и если они перевернуты, они будут искалечены на неопределенное время. Вы считаете, что естественный отбор вырвал бы их из бассейна.

Возможно, они выжили, будучи настолько проклятыми. Я имею в виду, просто смотри видеоролики о детской черепахе, пытаясь съесть помидор черри. Это воплощение симпатичного.

ответ

1

Я думаю, вы должны назвать super.paintComponent (g); при начале функции. Вероятно, это красит ваш прямоугольник.

1

Вы добавляете testBar к своему кадру, а затем снова к своему myPanel, который удаляет его из фрейма (компонент может иметь только один родительский элемент). Но так как myPanel ничего не добавлено, он никогда не будет вызван.

Комментировать эту строку исправить, но вы, вероятно, намерены сделать что-то значимое с вашим myPanel, поэтому проверьте свой дизайн.

//myPanel.add(testBar); 
1

Я повернул свой класс Bar в JPanel и ovrrode метода краски вместо и она работала, но другие комментарии являются правильными, вы не добавляете панель к каркасу, только бар объект:

//created frame and panel. Panel layout is taken away from the flow layout. 
    final JFrame myFrame = new JFrame(); 
    myFrame.setTitle("Tester Window (v2)"); 
    myFrame.setSize(FRAME_WIDTH,FRAME_HEIGHT); 

    final Bar testBar = new Bar(); 

    myFrame.getContentPane().add(testBar); 
    myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    myFrame.setVisible(true); 

и в баре:

public class Bar extends JPanel 
{ 
//.... 

    public void paint(Graphics g) 
    { 
      g.setColor(Color.black); 
      g.fillRect(20,20,20,20); 
    } 
} 
1

Вызов super.paintComponents первая вещь. Вероятно, вы захотите также наложить g на объект Graphics2D.

public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    Graphics2D g2 = (Graphics2D)g; 

Неправильный порядок - установить цвет, затем нарисуйте прямоугольник (используя g2):

g2.setColor(color); 
g2.fillRect(positionX, positionY, sizeX, sizeY); 
+0

Почему оператор печати не появляется? – llamaCaraDara

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