2013-04-26 8 views
0

Я использую eclipse с плагином Google WindowBuilder Pro для разработки приложения для качания. Я уже создал полностью функциональные JFrames, используя групповой макет с их компонентами. Теперь я пытаюсь добавить изображение в углы всех JFrames. Когда я пытаюсь перетащить/удалить из плагина WindowBuilder Pro, все компоненты и сам JFrame перемещаются и изменяются.Java Swing: Якорные изображения в углах JFrame

Есть ли способ разместить эти изображения, программно или перетащить/перетащить, в углах рамки и зафиксировать их там, чтобы при изменении размера изображения JFrame изображения в соответствующих углах?

Programattic код, который я пробовал:

BufferedImage image = ImageIO.read(getClass().getResource("image path")); 
JLabel label = new JLabel(new ImageIcon(image)); 
label.setBounds(0,0,100,100); 
add(label); 

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

Спасибо в продвинутом !!!

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

ответ

2

Не используйте нулевой макет и SetBounds() !!! Используйте правильный менеджер макетов.

Например, диспетчер компоновки по умолчанию для JFrame является BorderLayout. Таким образом, вы можете создать второй JPanel, который также использует BorderLayout. Затем вы можете добавлять изображения в WEST и EAST панели. Затем добавьте панель к СЕВЕРУ кадра.

Для получения дополнительной информации см. How to Use Border Layout. Собственно, прочитайте весь раздел о менеджерах макетов.

+0

я узнал что-то +1 – Azad

0

Координаты углов вы можете вычислить; основная концепция заключается в том, чтобы опираться на ширину/высоту компонента; например:

х, у - координаты

ш, ч - масштаб компонента угловой

позволяет вычислить координаты некоторых углов ...

лево- верхний угол: x = 0; у = 0; W = 100; ч = 100;

правый верхний угол: x = parentComponent.width-w; у = 0; W = 100; ч = 100;

правый нижний угол: x = parentComponent.width-w; y = parentComponent.height-h; W = 100; ч = 100;

... так что, как вы можете видеть, вы можете основывать свой альгейм на ширину/высоту родительского компонента, например; В вашем случае это код, как

label.getParent(); 

отчет, если это помогло

0

Если вы используете setBounds метод, вероятно, нужно знать, что место, которое вы дали этикетки является окончательным расположением и не может быть изменено, пока вы не добавите componentListener к раме и вызвать componentResized метод, каждый раз при измените размер рамки, вы должны установить новые места для метки (ов).

Однако это не лучший способ для этих вопросов, и я говорю вам, что не используйте этот способ, надеюсь, что кто-то еще (или эксперт) даст еще один лучший ответ.

, но в любом случае это не представляется возможным взглянуть на этот пример:

private JLabel lable ; 
    private Icon img; 
    // default constructor 
    public AnchoreImage(){ 

     setVisible(true); 
     setDefaultCloseOperation(3); 

     img = new ImageIcon(AnchoreImage.class.getClass().getResource("/path to image")); 
     lable = new JLabel("text",img, JLabel.LEADING); 
     lable.setBounds(getWidth()-img.getIconWidth(), 20, img.getIconWidth(),img.getIconWidth()); 
     add(lable); 
     addComponentListener(new ComponentAdapter() { 

      @Override 
      public void componentResized(ComponentEvent e) { 
       lable.setLocation(getWidth()-(img.getIconWidth()+20), 20); 
      } 
     }); 
     pack(); 
     setSize(400,400); 
     setLayout(null); 
    } 
Смежные вопросы