размещение прозрачного JPanel сверху другого JPanel, не работающего

Я пытаюсь поместить JPanel сверху другого JPanel, который содержит JTextArea и кнопку, и я хочу верхней группе быть прозрачным. Я попробовал его, делая setOpaque (ложным) о верхней группе. но это не работает. Кто-либо может помочь мне пройти через это? Заранее спасибо!

public class JpanelTest extends JPanel
{
    public JpanelTest()
    {
    super();
    onInit();
}
private void onInit()
{
    setLayout(new BorderLayout());

    JPanel panel = new JPanel();
    panel.setLayout(new BorderLayout());
    panel.add(new JTextArea(100,100),BorderLayout.CENTER);
    panel.add(new JButton("submit"),BorderLayout.SOUTH);

    JPanel glass = new JPanel();
    glass.setOpaque(false);

    add(panel,BorderLayout.CENTER);
    add(glass,BorderLayout.CENTER);
    setVisible(true);
}

public static void main(String args[])
{
    new JpanelTest();
}
}
11
что вы действительно подразумеваете по вершине ? и что точно не работает?
добавлено автор Nikolay Kuznetsov, источник
что вы действительно подразумеваете по вершине ? и что точно не работает?
добавлено автор Nikolay Kuznetsov, источник
что вы действительно подразумеваете по вершине ? и что точно не работает?
добавлено автор Nikolay Kuznetsov, источник
что вы действительно подразумеваете по вершине ? и что точно не работает?
добавлено автор Nikolay Kuznetsov, источник
Это означает, что результат показывает только верхнюю группу.
добавлено автор Nikhil, источник
Это означает, что результат показывает только верхнюю группу.
добавлено автор Nikhil, источник
Это означает, что результат показывает только верхнюю группу.
добавлено автор Nikhil, источник
Это означает, что результат показывает только верхнюю группу.
добавлено автор Nikhil, источник
Вы имеете в виду прозрачный?
добавлено автор trashgod, источник
Вы имеете в виду прозрачный?
добавлено автор trashgod, источник
См. принятый ответ в stackoverflow.com/questions/2669654/… Особенно часть об использовании BorderLayout...
добавлено автор PhiLho, источник
См. принятый ответ в stackoverflow.com/questions/2669654/… Особенно часть об использовании BorderLayout...
добавлено автор PhiLho, источник
См. принятый ответ в stackoverflow.com/questions/2669654/… Особенно часть об использовании BorderLayout...
добавлено автор PhiLho, источник
См. принятый ответ в stackoverflow.com/questions/2669654/… Особенно часть об использовании BorderLayout...
добавлено автор PhiLho, источник

5 ответы

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

Начиная с вашего кода, и изменяя его много, я заставил его работать, но это не могло бы сделать то, что вы ожидаете...

import java.awt.*;
import javax.swing.*;

public class Test extends JFrame
{
  public Test()
  {
    super();

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(500, 200);

    onInit();

    setVisible(true);
  }
  private void onInit()
  {
    JLayeredPane lp = getLayeredPane();

    JPanel panel = new JPanel();
    panel.setLayout(new BorderLayout());
    panel.add(new JTextArea(), BorderLayout.CENTER);
    panel.add(new JButton("Submit"), BorderLayout.SOUTH);
    panel.setSize(300, 150);//Size is needed here, as there is no layout in lp

    JPanel glass = new JPanel();
    glass.setOpaque(false);//Set to true to see it
    glass.setBackground(Color.GREEN);
    glass.setSize(300, 150);
    glass.setLocation(10, 10);

    lp.add(panel, Integer.valueOf(1));
    lp.add(glass, Integer.valueOf(2));
  }

  public static void main(String args[])
  {
   //Schedule a job for the event-dispatching thread:
   //creating and showing this application's GUI.
    javax.swing.SwingUtilities.invokeLater(new Runnable()
    {
      public void run()
      {
        new Test();
      }
    });
  }
}

Если полностью прозрачный, ну, в общем, это похоже на него, не здесь! Когда непрозрачный, это просто покрывает некоторые GUI, но не предотвращает щелчки мыши, например.

5
добавлено

1) there are a few ways, there no issue to put JPanel, with covering full JFrames/JPanel area or only part of Rectangle/Dimension that returns JFrames/JPanel

  • использование JLayer (Java7) на основе JXLayer (Java6)

  • использование GlassPane

  • использование JViewport

  • использование OverlayLayout

  • использует transucent JDialog/JWindow

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

4
добавлено

Проверьте эту обучающую программу на использование Стекла корня колебания.

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

4
добавлено
@Nikhil: Я соглашаюсь, что этот ответ походит на то, что вы хотите, хотя вы действительно не сказали нам, каковы ваши требования (или проблемы).
добавлено автор arcy, источник

Проверьте эту обучающую программу на использование Стекла корня колебания.

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

4
добавлено
@Nikhil: Я соглашаюсь, что этот ответ походит на то, что вы хотите, хотя вы действительно не сказали нам, каковы ваши требования (или проблемы).
добавлено автор arcy, источник

Проверьте эту обучающую программу на использование Стекла корня колебания.

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

4
добавлено
@Nikhil: Я соглашаюсь, что этот ответ походит на то, что вы хотите, хотя вы действительно не сказали нам, каковы ваши требования (или проблемы).
добавлено автор arcy, источник
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async