Может ли текстовое поле перекрывать метку в форме JDialog? - PullRequest
0 голосов
/ 31 января 2011

У меня проблемы с моим графическим интерфейсом ... хочу иметь фоновое изображение, используя "label", а затем есть перекрывающееся "текстовое поле" ... я использую "label" (в элементах управления Swing), чтобы я мог импортировать изображение ... а затем подумать, чтобы перекрыть текстовое поле ... но это не работает, потому что каждый раз, когда я перетаскиваю текстовое поле ... мой макет испортился ... вы можете помочь мне или предложить лучшее решение моей проблемы.

Я просто хочу показать инструкцию с фоновым изображением в моем графическом интерфейсе ..

Спасибо заранее:)

Ответы [ 2 ]

0 голосов
/ 31 января 2011

Вы пытались использовать JLayeredPane? Начиная с учебника по Swing , он точно выглядит как необходимый компонент в вашем случае.

0 голосов
/ 31 января 2011

Вы можете добавлять изображения на JLabel. Если вы хотите добавить другие компоненты поверх изображения, вы должны добавить изображение в JPanel. Таким образом, вы будете иметь управление макетом. Для этого решения необходимо выполнить ряд шагов:

  1. Создайте класс, который расширяет JPanel и включает в себя читатель и элемент paintComponent

    public class ImageJPanel extends JPanel {
        public ImageJPanel() {
           try {
              myImage = ImageIO.read(new File("singer.jpg"));
           } catch (IOException ex) {
               System.out.println("No image! " + ex.getMessage());
           }
        }
    @Override
    public void paintComponent(Graphics g) {
        g.drawImage(myImage, 0, 0, null);
    }
    
    private BufferedImage myImage;}
    
  2. Установите макет вашего JDialog на BorderLayout.

  3. Добавьте еще одну JPanel p, сделайте ее непрозрачной, чтобы увидеть изображение, p.setOpaque(false); с JTextFields, JLabels и т. Д. На свою панель контента.

  4. Добавьте экземпляр ImageJPanel в центр макета границы.

Вот пример конструктора для класса Tester, расширяющего JDialog:

public Tester() {
    setLayout(new BorderLayout());
    JPanel myImagePanel = new ImageJPanel();
    add(myImagePanel);
    JPanel workPanel = new JPanel();
    workPanel.setOpaque(false);
    workPanel.add(new JLabel("a label"));
    workPanel.add(new JTextField(10));
    myImagePanel.add(workPanel);
    pack();
}
...