2015-10-12 4 views
0

Я пытаюсь нарисовать линию от (0,0) до центра панели. Никакая строка не нарисована, потому что getWidth() и getHeight() в конструкторе DrawingPanel возвращают 0. Я предполагаю, что это связано с тем, что кадр еще не отображается. Как я могу получить размер панели тогда?Получить размер JPanel

import java.awt.*; 
import javax.swing.*; 


public class DrawingApplication extends JFrame { 
    static int CenterX; 
    static int CenterY; 

    public DrawingApplication(){ 
     setTitle("Drawing Application"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setExtendedState(JFrame.MAXIMIZED_BOTH); 
     DrawingPanel pnlDraw = new DrawingPanel(); 
     add(pnlDraw); 
    } 

    public static void main(String[] args) { 
     DrawingApplication drawingApp = new DrawingApplication(); 
     drawingApp.setVisible(true); 
    } 
} 


class DrawingPanel extends JPanel { 
    int CenterX, CenterY; 

    public DrawingPanel(){ 
     CenterX = getWidth()/2; 
     CenterY = getHeight()/2; 
    } 

    public void paintComponent(Graphics g){ 
     Graphics2D g2 = (Graphics2D) g; 
     super.paintComponent(g); 
     g2.drawLine(0, 0, CenterX, CenterY); 
    } 
} 

ответ

2

Существует несколько подходов. Простейший бы эти:

  1. Обновление размера с помощью ComponentListener и обновление размера, когда componentShown или componentResized срабатывает.
  2. Просто получите размер каждый раз, когда вы рисуете JPanel.
Смежные вопросы