Как узнать, Java компонент отображается на экране - PullRequest
8 голосов
/ 07 марта 2012

Я хочу выяснить, находится ли JPanel на экране или нет.Это не значит, что для этой ситуации можно использовать метод isVisible().Я имею в виду, я хочу выяснить, является ли компонент, который был инициирован ранее, в настоящее время, является одним из компонентов на моей главной панели или нет.

Редактирование и дополнительные пояснения: у меня в моей программе было несколько панелей, инициированных ранееих в моей форме по мере необходимости.Я хочу знать, например, jpanel1 сейчас на любой из панелей, которые сейчас присутствуют в моей форме.

Пример:

public class GUI extends JFrame() {

    private JPanel1, jPanel2;

    public static void main(String[] args) {
        GUI gui = new GUI();
        jPanel1 = new JPanel();
        jPanel2 = new JPanel();
        gui.setContentpane(jPanel1);
        gui.setVisible(true);
    }

}

сейчас jPanel1 отображается на экране бу jPanel2 не видно.Как я могу это узнать?

Ответы [ 4 ]

12 голосов
/ 07 марта 2012

После исследования я обнаружил, что этот метод означает, что компонент отображается на экране или нет:

isDisplayable ()

в моем примере:

jPanel1.isDisplayable() // возвращает true

jPanel2.isDisplayable() // возвращает false

как просто!

5 голосов
/ 19 апреля 2016

jPanel1.isVisible()==true jPanel1.isVisible()==false

для панели jPanel1.isShowing() также работает

0 голосов
/ 07 марта 2012

Напишите свой собственный класс панели, который расширяет JPanel.Добавьте в этот класс новый метод с именем isOnTheScreen(), который возвращает логическое значение , указывающее, добавлена ​​ли панель в окно или нет.

public class MyPanel extends JPanel
{
    boolean isAdded = false;

    public boolean isOnTheScreen()
    {
       return isAdded;
    }

    public void setOnTheScreen(boolean isAdded)
    {
       this.isAdded = isAdded;
    }
}

После создания собственных объектов панели используйтеописанные выше методы, чтобы узнать, добавлена ​​ли панель к главной панели / фрейму или нет.Предположим, что вы добавили панель к фрейму:

JFrame frame = new JFrame()
MyPanel panel = new MyPanel();
frame.getContentPane().add(panel);
panel.setOnTheScreen(true);

Как только вы добавите ее на главный экран, в этом случае фрейм вызовите setOnTheScreen(true) И аналогичным образом вызовите setOnTheScreen(false) при удаленииpanel.

После этого дизайна вы можете определить, добавлена ​​ли панель в главное окно или нет, просто вызвав isOnTheScreen() где-нибудь еще в вашем коде.Я надеюсь, что этот дизайн поможет вам.

0 голосов
/ 07 марта 2012

Если вы ищете дочерние элементы главной панели, вы можете вызвать getComponents() на главной панели, чтобы вернуть массив ее компонентов, а затем выполнить итерацию по ним, чтобы проверить, является ли какой-либо из них искомой панелью. , Возможно, вам придется вызывать это рекурсивно, если панель не является прямым потомком главной панели.

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