NetBeans Matisse - 从另一个类访问jframe组件

时间:2014-04-11 07:46:59

标签: java swing netbeans gui-builder matisse

来自Netbeans的Matisse代码被阻止。我遇到的问题是,我必须setBackground从另一个类中的JLabel到另一个类,但我不能这样做,因为我无法访问JLabel由于其私有和阻止代码。

对此有任何解决方案吗?

2 个答案:

答案 0 :(得分:2)

  

"来自Netbeans的Matisse代码被阻止"

您可以按照here

进行编辑
  

"因为我的私有和被阻止的代码无法访问JLabel"

只需为另一个类

中的标签编写getter方法
public class OtherClass .. {
    private JLabel jLabel1;

    public JLabel getLabel() {
        return jLabel1;
    }
}

import otherpackage.OtherClass;

public class MainFrame extends JFrame {
    private OtherClass otherClass;
    ...
    private void jButtonActionPerformed(ActionEvent e) {
         JLabel label = otherClass.getLabel();
         label.setBackground(...)
    }
}

  

"从另一个类"

访问jframe组件

听起来你正在使用多个框架。见The Use of Multiple JFrames, Good/Bad Practice?


<强>更新

  

&#34;我有一个用matisse制作的MAIN框架,但是由于某些原因,我必须在另一个类中设置matisse里面的textField的背景,而在另一个类中进行X验证&#34;

您可以执行的操作是将Main框架的引用传递给其他类,并在setter框架中显示Main。类似的东西(我将提供访问界面)

public interface Gettable {
    public void setLabelBackground(Color color);
}

public class Main extends JFrame implements Gettable {
    private JLabel jLabel1;
    private OtherPanel otherPanel;

    public void initComponents() {
        otherPanel = new OtherPanel(Main.this); // see link above to edit this area
    }

    @Override
    public void setLabelBackground(Color color) {
        jLabel1.setBackground(color);
    }
}

public class OtherPanel extends JPanel {
    private Gettable gettable;

    public OtherPanel(Gettable gettable) {
        this.gettable = gettable;
    }

    private void jButtonActionPerformed(ActionEvent e) {
        gettable.setLabelBackground(Color.RED);
    }
}

答案 1 :(得分:0)

  • 使用JLabel为类创建一个侦听器,并使用更改标签背景的方法
  • 在使用JLabel的类中实现它
  • 使用JLabel将其他类的侦听器(您要从中更改BG)设置为类的侦听器
  • 在您想要的任何功能之后更改背景。