Ссылка на координаты 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, вот хорошее начало - Визуальное руководство для менеджеров макетов.