Размещение компонента на стеклянной панели
У меня есть подкласс JLabel, который формирует компонент моего GUI. Я реализовал возможность перетаскивать компонент из одного контейнера в другой, но без каких-либо визуальных эффектов. Я хочу, чтобы этот JLabel следовал за курсором при перетаскивании элемента из одного контейнера в другой. Я подумал, что мог бы просто создать стеклянную панель и нарисовать ее там. Однако даже после добавления компонента на стеклянную панель, установки видимого компонента, отображения видимой стеклянной панели и установки непрозрачной стеклянной панели я все равно не вижу компонента. Я знаю, что компонент работает, потому что я могу добавить его на панель содержимого и показать его.
Как добавить компонент на стеклянную панель?
Наконец-то понял, как заставить работать простой пример. Спасибо, @akf. Мне удалось адаптировать это решение к моей первоначальной проблеме, что позволило мне удалить ~ 60 строк кода Java2D, который вручную отображал представление JLabel.
package test;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.LineBorder;
public class MainFrame extends JFrame {
/**
* @param args
*/
public static void main(String[] args) {
MainFrame mf = new MainFrame();
mf.setSize(400, 400);
mf.setLocationRelativeTo(null);
mf.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
mf.setGlassPane(new JPanel());
JLabel l = new JLabel();
l.setText("Hello");
l.setBorder(new LineBorder(Color.BLACK, 1));
l.setBounds(10, 10, 50, 20);
l.setBackground(Color.RED);
l.setOpaque(true);
l.setPreferredSize(l.getSize());
//mf.add(l);
((JPanel)mf.getGlassPane()).add(l);
mf.getGlassPane().setVisible(true);
mf.setVisible(true);
}
}