Ссылка на координаты JPanel в JFrame

Привет, у меня проблемы с указанием происхождения JPanel в моем JFrame. Моя JPanel была настроена примерно так, в конструкторе я хочу добавить линию, которая находится на левом краю моей JPanel.

table = new JPanel();                    
table.setBackground(Color.green);                   
table.setBounds(10,10, 600, 600);
table.setSize(width.getValue(), height.getValue());
add(table);                                     

Тогда метод краски...

public void paint(Graphics g){
    super.paint(g);
    Graphics2D g2d = (Graphics2D)g;
    g2d.drawLine(table.getX(), table.getY(), table.getX(), (table.getY() + table.getHeight()));
    g2d.drawLine(100, 100, (int)Math.round(cueBall.getPositionX()), (int)Math.round(cueBall.getPositionY()));   
}

Последняя команда в методе рисования не связана с моей проблемой... Код, кажется, получает источник как (10, 10), но применяет его к JFrame в целом, а не к contentPane. Я не совсем понимаю contentPane, но я подумал, что add() добавляет к панели контента, и с тех пор вы ссылаетесь на координаты только из contentPane... Я просто не понимаю, почему setBounds() добавил JPanel, где я хотел, чтобы это было (10,10) по отношению только к contentPane, но когда я рисую (), он, кажется, получает координаты относительно contentPane, но рисует эти координаты со ссылкой на JFrame. Я понимаю, что могу просто добавить значение, чтобы переместить строку вниз, но я подозреваю, что это плохое решение.

Нужно ли добавлять contentPane с его собственным методом paint() или что-то в этом роде?

1 ответ

Решение

Вы должны переопределить и сделать свою живопись в JPanel.paintComponent(), Оформить заказ Живопись в AWT и Swing.

Не уверен, что является причиной использования setbounds()Вы пытаетесь перейти с абсолютного позиционирования ваших компонентов? Я бы порекомендовал ознакомиться с макетами Java, вот хорошее начало - Визуальное руководство для менеджеров макетов.

Другие вопросы по тегам