1

なぜ私の仕事JScrollPaneがうまくいかないのか、誰かが解決できますか?おそらく私が見逃したかもしれない何か。私が示した以上の文脈がなければ、これはばかげているかもしれませんが、質問してください。喜んでもっと提供します.

public ApplicationFrame(String title, int x, int y, int width, int height) {
        // Constructor for the ApplicationFrame, no implicit Construc.
        setTitle(title);
        setResizable(true);
        setBounds(x, y, width, height);
                    setLayout(new BorderLayout());
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        setIconImage(new ImageIcon(getClass().getResource("resources/topLeft.png")).getImage());
        topMostMenuBar = new TopMenuBar(this);
        setJMenuBar(topMostMenuBar.getMyJMenuBar());
        paneEdge = BorderFactory.createLineBorder(Color.gray);
        blackline = BorderFactory.createLineBorder(Color.black);
        this.frameContent = new ApplicationPanel() {
            //@Override
            protected void paintComponent(Graphics g) {
                super.paintComponent(g);
                g.drawImage(TI, 0, 0, null);
            }
        };
        mainImageScrollPane = new JScrollPane(frameContent);
        statusPanel = new ApplicationPanel(new Color(0xfff0f0f0));
        leftPanel = new ApplicationPanel(new Color(0xfff0f0f0));
        testPanel = new ColorPanel(new Color(0xfff0f0f0));
        testPanel.setPreferredSize(new Dimension(50,300));
        add(mainImageScrollPane, BorderLayout.CENTER );
        add(statusPanel, BorderLayout.SOUTH);
        add(leftPanel, BorderLayout.WEST);
        Container visibleArea = getContentPane();
        visibleArea.add(frameContent);
        setVisible(true);
        do {
            loadImageIn();
        } while (!initLoadSuccess);
        initButtons();
        leftPanel.add(testPanel, BorderLayout.SOUTH);
    } // end Constructor **

これは大きなコードなので、そこから SSCCE を作成する方法がわかりません。あなたが見ているのは、JFrame3つのパネルを保持する a のサブクラスへのコンストラクターです。は、このApplicationPanel時点では単なるJPanel. このloadImageIn()メソッドはファイルチューザを開き、選択したイメージを にロードしますframeContent。画像は正常に表示され、ウィンドウのサイズを変更する場合を除いて、すべてが機能し、スクロールバーはありません。

4

3 に答える 3

2

ApplicationPanelに追加するこの行がありますvisibleArea...

visibleArea.add(frameContent);

多分あなたは実際にこれを意味JScrollPanevisibleAreaます.JScrollPaneApplicationPanel

visibleArea.add(mainImageScrollPane);

を呼び出すとnew JScrollPane(frameContent)、内部のパネルには何も行われず、外側にラッパーが追加されるだけです。したがって、スクロール機能が必要な場合JScrollPaneは、パネル自体ではなく、ラッパーを参照する必要があります。

于 2012-06-20T10:13:08.203 に答える
0
mainImageScrollPane.setViewportView(<component_to_be_scrollable>);
于 2012-06-20T11:50:03.683 に答える
0

のサイズが指定されていませんframeContent。意図的なものですか?

さらに、あなたframeContentは後で に追加されvisibleAreaます。もう存在しないという意味mainImageScrollPane JScrollPane

たぶん、あなたは : を持ちたいかもしれませんが visibleArea.add(mainImageScrollPane);、パネルサイズを設定する必要があります

于 2012-06-20T10:09:37.333 に答える