2

NetbeansがJPanelを拡張する場合、合成ではなく継承を使用するため、自動生成されたクラスのインスタンスを参照するときに問題が発生しますか?

NetbeansはJPanelsをprivate javax.swing.JPanel overview;インスタンスとして宣言しているため、タイプがJPanelであるのに、タイプがOverviewである必要があります。

setGroupメソッドを呼び出しながら、Overviewを自動生成されたJPanelとして保持するにはどうすればよいですか?私はそうしようとします:

Main.java

private void groupsPropertyChange(java.beans.PropertyChangeEvent evt) {
    String s = evt.getNewValue().toString();
    LOG.fine("new group: " + s);
    overview.setGroup(s);
}

Overview.javaを使用:

public class Overview extends javax.swing.JPanel {


...

    public String getGroup() {
        return group;
    }

    public void setGroup(String group) {
        this.group = group;
    }

}

しかし、このコンパイルエラーが発生します:

init:
Deleting: /home/thufir/NetBeansProjects/SwingNNTP/build/built-jar.properties
deps-jar:
Updating property file: /home/thufir/NetBeansProjects/SwingNNTP/build/built-jar.properties
Compiling 1 source file to /home/thufir/NetBeansProjects/SwingNNTP/build/classes
warning: [options] bootstrap class path not set in conjunction with -source 1.5
/home/thufir/NetBeansProjects/SwingNNTP/src/net/bounceme/dur/nntp/view/Main.java:59: error: cannot find symbol
        overview.setGroup(s);
  symbol:   method setGroup(String)
  location: variable overview of type JPanel
1 error
1 warning
/home/thufir/NetBeansProjects/SwingNNTP/nbproject/build-impl.xml:628: The following error occurred while executing this line:
/home/thufir/NetBeansProjects/SwingNNTP/nbproject/build-impl.xml:285: Compile failed; see the compiler error output for details.
BUILD FAILED (total time: 1 second)
4

2 に答える 2

4

JPanel適切なレイアウトのAは、 Container1つ以上のJComponentインスタンスに便利です。(基本的な)UIデリゲートとダブルバッファリングを提供しますが、それ以外はほとんど提供しません。カスタムコンポーネントはおそらくJComponent直接拡張する必要があります。(オプションの)UIデリゲートのインフラストラクチャをここに示しますここで説明するように、このようなカスタムコンポーネントをデザイナーパレットに追加できます。

于 2012-05-07T10:46:10.967 に答える
2

そうですね、Netbeansには、GUIで作成されたJPanelをJPanel以外のタイプとして宣言するオプションがないのではないかと思いますが、これはちょっと奇妙なことです。Netbeans GUIビルダーを使用したまま、その拡張タイプでJPanelのサブクラスをインスタンス化できない場合、なぜJPanelを拡張するのですか?JPanelを拡張することは本質的に良い考えではありません...

ソリューションコード:

package net.bounceme.dur.nntp.view;

import java.util.logging.Logger;
import javax.swing.JTabbedPane;

public class MyTabs extends JTabbedPane {

    private static final Logger LOG = Logger.getLogger(MyTabs.class.getName());
    private Overview overview = new Overview();
    private Detail details = new Detail();
    private Groups groups = new Groups();

    public MyTabs() {
        this.add("groups", groups);
        this.add("overview", overview);
        this.add("detail", details);

        groups.addPropertyChangeListener(new java.beans.PropertyChangeListener() {

            public void propertyChange(java.beans.PropertyChangeEvent evt) {
                String s = evt.getNewValue().toString();
                LOG.fine(s);
                overview.setGroup(s);
            }
        });

    }
}

GUIビルダーを使用しない以外に、これを行うためのより良い方法があるかどうかだけ知りたいです。

于 2012-05-07T08:56:47.713 に答える