Ссылка на координаты 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() или что-то в этом роде?


person Yoshi    schedule 18.04.2012    source источник


Ответы (1)


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

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

person tenorsax    schedule 18.04.2012
comment
Хорошо, это имеет смысл ... и да, именно поэтому я использовал установленные границы. У меня были проблемы с макетами, и я не хотел пока увязнуть в них, потому что это для школьного проекта, но я планирую разобраться с ними как только я заставлю его работать - person Yoshi; 19.04.2012
comment
Я планирую разобраться с ними, как только заработаю Ваши графические интерфейсы не будут работать, пока вы это не сделаете. - person Andrew Thompson; 19.04.2012
comment
@AndrewThompson Вчера вечером я обнаружил это на собственном горьком опыте :) похоже, я буду изучать менеджеров макетов раньше, чем планировал - person Yoshi; 19.04.2012