0

Netbeans からの Matisse コードはブロックされています。私が抱えている問題はsetBackgroundJLabel別のパッケージの別のクラスからアクセスする必要があるJLabelことですが、プライベートでブロックされたコードのためにアクセスできないため、これを行うことができません。

これに対する解決策はありますか?

4

2 に答える 2

2

「Netbeans からの Matisse コードがブロックされています」

ここに表示されているように編集できます

「プライベートでブロックされたコードのため、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 コンポーネントにアクセスする」

複数のフレームを使用しているように聞こえます。複数の JFrames の使用、良い/悪い習慣を参照してください。


アップデート

「私はマティスで作成された MAIN フレームを持っていますが、いくつかの理由により、別のクラスで X 検証が発生したときに、別のクラスからマティス内の textField の背景を設定する必要があります」

次にできることは、Mainフレームの参照を他のクラスに渡し、フレームに asetterを含めること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);
    }
}
于 2014-04-11T08:00:59.680 に答える
0
  • ラベルの背景を変更するメソッドを使用して JLabel でクラスのリスナーを作成する
  • JLabelを利用するクラスに実装する
  • JLabel を使用して、他のクラス (BG を変更する元) のリスナーをクラスのリスナーに設定します。
  • 必要な機能の後に背景を変更します。
于 2014-04-11T07:53:28.657 に答える