将内部私人面板设置为不透明
Setting an internal private panel opaque
我是否可以将内部私有 JPanel 设置为不透明?一个例子:
//Assuming I have no access rights to modify OuterPanel.java
class OuterPanel extends JPanel{
private JPanel internalPanel = new JPanel();
public OuterPanel(){
setLayout(new BorderLayout());
internalPanel.setOpaque(true);
add(internalPanel, BorderLayout.CENTER);
}
}
class MyClass{
private OuterPanel myPanel;
public MyClass(){
panel = new OuterPanel();
// is there anyway i can set myPanel's internalPanel to opaque(false)?
// assuming OuterPanel is a library and i have no way to modify it.
}
}
使用上面的示例代码,假设 OuterPanel 是一个库 class,我无法修改它的代码,有什么方法可以实际设置它的 internalPanel 的不透明设置吗?
正如 maloomeister 所提到的。我使用以下代码解决了这个问题。
class OuterPanel extends JPanel{
private JPanel internalPanel = new JPanel();
public OuterPanel(){
setLayout(new BorderLayout());
internalPanel.setOpaque(true);
add(internalPanel, BorderLayout.CENTER);
}
}
class MyClass{
private OuterPanel myPanel;
public MyClass(){
panel = new OuterPanel();
setAllOpaque(panel.getComponents());
}
// This method is called recursively to set ALL JPanels
private void setAllOpaque(Component[] comp){
for (Component com : comp){
if (com instanceof JPanel){
JPanel p = (JPanel)com;
p.setOpaque(false);
setAllOpaque(p.getComponents());
}
}
}
}
我使用递归,因为当前的 OuterPanel 示例很简单,但我实际的实际 JPanel 实际上是一个表单,其中填充了许多不同的 JPanel。这解决了它。
这可能不是最精炼的方法,所以如果有人有更好的解决方案,请分享! :)
我是否可以将内部私有 JPanel 设置为不透明?一个例子:
//Assuming I have no access rights to modify OuterPanel.java
class OuterPanel extends JPanel{
private JPanel internalPanel = new JPanel();
public OuterPanel(){
setLayout(new BorderLayout());
internalPanel.setOpaque(true);
add(internalPanel, BorderLayout.CENTER);
}
}
class MyClass{
private OuterPanel myPanel;
public MyClass(){
panel = new OuterPanel();
// is there anyway i can set myPanel's internalPanel to opaque(false)?
// assuming OuterPanel is a library and i have no way to modify it.
}
}
使用上面的示例代码,假设 OuterPanel 是一个库 class,我无法修改它的代码,有什么方法可以实际设置它的 internalPanel 的不透明设置吗?
正如 maloomeister 所提到的。我使用以下代码解决了这个问题。
class OuterPanel extends JPanel{
private JPanel internalPanel = new JPanel();
public OuterPanel(){
setLayout(new BorderLayout());
internalPanel.setOpaque(true);
add(internalPanel, BorderLayout.CENTER);
}
}
class MyClass{
private OuterPanel myPanel;
public MyClass(){
panel = new OuterPanel();
setAllOpaque(panel.getComponents());
}
// This method is called recursively to set ALL JPanels
private void setAllOpaque(Component[] comp){
for (Component com : comp){
if (com instanceof JPanel){
JPanel p = (JPanel)com;
p.setOpaque(false);
setAllOpaque(p.getComponents());
}
}
}
}
我使用递归,因为当前的 OuterPanel 示例很简单,但我实际的实际 JPanel 实际上是一个表单,其中填充了许多不同的 JPanel。这解决了它。
这可能不是最精炼的方法,所以如果有人有更好的解决方案,请分享! :)