Так что это фрагмент более крупной программы. Не показано в приведенном ниже коде - это «фреймворк» JFrame, который я правильно настроил и который также содержит JPanel с различными JLabels. То, к чему я стремился в приведенном ниже коде, - это способ получить доступ к объекту «лицо», который имеет тип «facer», который расширяет JPanel, где «facer» правильно добавлен в «фреймворк» JFrame со всем этим отображением должным образом. В приведенном ниже коде показаны некоторые вещи, которые я пробовал. Независимо от того, где я использую .getName(), я всегда получаю null. «line4» получает мне доступ к scrollPane, а не к объекту, который я также добавил в JFrame. Мне также кажется странным, что getParent(). GetParent() дает JLayeredPane (который я не использую), а не JFrame.Как получить родительский объект щелкнутого компонента с помощью getParent()?
Все это в основном орошаемая версия реальной области кода, на которой я застрял, но решение этого по существу показало бы мне, что делать в другом сценарии. В принципе, все, что я прошу, это то, как я могу получить getParent(). GetName() или getParent(). GetParent(). GetName(), чтобы распечатать имя объекта (которое в этом случае является «facer» или «framer»)), а не нулевую или информацию о типе, как показано в моих выводах ниже.
face.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
Component source = (Component) e.getSource(); //line1
System.out.println("source gives me " + source); //line2
System.out.println("getName() gives me " + source.getName()); //line3
System.out.println("getParent().getComponent(1) gives me " + source.getParent().getComponent(0)); //line4
System.out.println("getParent().getName() gives me " + source.getParent().getName()); //line5
System.out.println("getParent().getParent() gives me " + source.getParent().getParent()); //line6
System.out.println("getParent().getParent() gives me " + source.getParent().getParent().getName()); //line7
}
});
Выход дает мне
source gives me facer[,0,0,200x288,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=]
getName() gives me null
getParent().getComponent(1) gives me javax.swing.JScrollPane[,30,-18,140x18,layout=javax.swing.ScrollPaneLayout$UIResource,alignmentX=0.0,alignmentY=0.0,[email protected]e368,flags=328,maximumSize=,minimumSize=,preferredSize=,columnHeader=,horizontalScrollBar=javax.swing.JScrollPane$ScrollBar[,0,0,0x0,hidden,layout=javax.swing.plaf.metal.MetalScrollBarUI,alignmentX=0.0,alignmentY=0.0,border=,flags=4194632,maximumSize=,minimumSize=,preferredSize=,blockIncrement=10,orientation=HORIZONTAL,unitIncrement=1],horizontalScrollBarPolicy=HORIZONTAL_SCROLLBAR_NEVER,lowerLeft=,lowerRight=,rowHeader=,upperLeft=,upperRight=,verticalScrollBar=javax.swing.JScrollPane$ScrollBar[,0,0,0x0,hidden,layout=javax.swing.plaf.metal.MetalScrollBarUI,alignmentX=0.0,alignmentY=0.0,border=,flags=4194632,maximumSize=,minimumSize=,preferredSize=,blockIncrement=10,orientation=VERTICAL,unitIncrement=1],verticalScrollBarPolicy=VERTICAL_SCROLLBAR_NEVER,viewport=javax.swing.JViewport[,1,1,137x15,layout=javax.swing.ViewportLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=25165832,maximumSize=,minimumSize=,preferredSize=,isViewSizeSet=true,lastPaintPosition=,scrollUnderway=false],viewportBorder=]
getParent().getName() gives me null.contentPane
getParent().getParent() gives me javax.swing.JLayeredPane[null.layeredPane,0,0,200x288,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=0,maximumSize=,minimumSize=,preferredSize=,optimizedDrawingPossible=true]
getParent().getParent() gives me null.layeredPane
Можете ли вы показать нам, как вы объявляете этот класс 'facer'? Где вы назовете 'setName()' на нем? – markspace
Чтобы лучше помочь, опубликуйте [MCVE] (http://stackoverflow.com/help/mcve) (минимальный полный проверяемый пример) или [SSCCE] (http://www.sscce.org/) (Short, Self Содержащийся, правильный пример). –
Хорошо оба хорошего совета. Похоже, что не назначать setName() было проблемой. Как раз для выяснения, печать из getParent() фактически распечатывает представление объекта, а не класса. Также вы могли бы объяснить, почему getParent(). GetParent() показывает тип JLayeredPane()? – Guitardeon