必ずしも重複した質問ではありません
パネルを透明に設定しようとしています。ただし、私の「アプリ」はより大きなアプリケーションの一部であり、パネルが「何」に含まれているかを調べる必要があります。
getRoot() gives a null pointer.
これは機能しますが、すべてが透過的になります - どれが私の親コンテナであるかを知る方法はありますか?
JFrame.setDefaultLookAndFeelDecorated(true);
Frame[] Frs = JFrame.getFrames();
int n=-1;
for (Frame f : Frs) {
f.setOpacity(0.55f);
}
親がフレームなのかパネルなのかよくわかりません。
「私は何に含まれているのか」と言う方法はありますか?
EDIT1
回答のある同様の質問があることは承知していますが、私にはうまくいかないようです。私もこれを試しました:
Container c = SwingUtilities.getAncestorOfClass(getClass(), this);
JOptionPane.showMessageDialog(null,"Container "+ c.getName());
そして再びヌルポインタを取得します
完全なコード
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.JLabel;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
public class HelloWorldModule extends JPanel implements WorkspaceModule{
private static final long serialVersionUID = 1L; //change this number to something more sensible
private JLabel lblHelloWorld;
public HelloWorldModule() {
setLayout(null);
setSize(647, 623);
setPreferredSize(new Dimension(900, 840));
this.setOpaque(true);
JFrame.setDefaultLookAndFeelDecorated(true);
try {
this.setBackground(new java.awt.Color(150,50,50,100));
Container c = SwingUtilities.getAncestorOfClass(this.getClass(), this);
JOptionPane.showMessageDialog(null,"Container "+ c.getName());
//this. setBackground(new java.awt.Color(150,50,50,100));
} catch (Exception e) {
// TODO Auto-generated catch block
JOptionPane.showMessageDialog(null,"Factory "+ e);
}
lblHelloWorld = new JLabel("HelloWorld");
lblHelloWorld.setBounds(33, 53, 78, 28);
add(lblHelloWorld);
setModuleTitle("Hello world!");
}
@Override
public JComponent getVisualComponent() {
return this;
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public PersistedStateHolder getPersistedState() {
// TODO Auto-generated method stub
return null;
}
@Override
public void loadPersistedState(PersistedStateHolder state) {
// TODO Auto-generated method stub
}
protected void setModuleTitle(String title) {
putClientProperty(WorkspaceModuleProperties.COMPONENT_TITLE, title);
}
}
EDIT2
JButton b = new JButton();
b.setVisible(true);
b.setOpaque(true);
b.setText("PRESS");
b.setPreferredSize(new Dimension(100,100));
b.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
Container c = SwingUtilities.getAncestorOfClass(P.getClass(), P);
JOptionPane.showMessageDialog(null,"Container " + c.getName());
}
});