4

だから、私は一種のテキストエディタを作っています、そして私は垂直ナビゲーションのためにJScrollPaneが必要です。しかし、私はそれを機能させることができません。

私はグーグルの結果の最初の10ページですべての奇妙なチュートリアルを読みました、そして私はそれを動かすことができません。

JFrame(サイズ1000x800)があるとしましょう。JFrameと水平方向に整列するようにJPanel(1000x2000)を入れたいと思います。JPanelの右側にシンプルなスクロールバーを貼り付けて、残りの部分に移動できるようにします。

サイズを縮小し、JPanelをJScrollBarに追加し、その逆も同様に、そのうちの1つをJFrameに追加しました。両方とも、なしですが、何もありません。

したがって、この時点で、完成したコードを数行気にする必要はありません...

編集:いいでしょう、ここにコードがあります...

mWindow = new JFrame(lang.getString("title"));
mWindow.setSize(1000, 800);
mWindow.setLocationRelativeTo(null);
mWindow.setResizable(false);
mWindow.setLayout(null);
mWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

mWindow.setVisible(true);

workspace = new JPanel();
workspace.setBounds(0,0, 1000, 1203);
workspace.setBackground(Color.RED);

scroll = new JScrollPane(workspace, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scroll.setBounds(0, 20, 600, 600);
//scroll.setLayout(null);
mWindow.getContentPane().add(scroll);
mWindow.repaint();
mWindow.validate();

JPanelの一部(600X600、(JScrollPaneサイズ))とスクロールバーが表示されますが、スクロールできません

4

4 に答える 4

6

だから、私はこの本当に簡単なテストをしました、そしてそれは私にとってうまくいきます...

public class TestPane extends JPanel {

    public TestPane() {

        setBorder(new LineBorder(Color.RED));
        // This is for demonstration purposes only
        // One should always rely on the layout manager
        // to define this value
        // Thank kleopatra 
        setPreferredSize(new Dimension(1000, 1000));

    }

    @Override
    protected void paintComponent(Graphics g) {

        super.paintComponent(g);

        FontMetrics fm = g.getFontMetrics();

        Dimension size = getPreferredSize();
        String text = "Pref: " + size.width + "x" + size.height;
        g.drawString(text, 0, fm.getAscent());

        size = getSize();
        text = "Size: " + size.width + "x" + size.height;
        g.drawString(text, 0, fm.getHeight() + fm.getAscent());

    }

}

そしてテストフレーム

public class TestFrame {

    public static void main(String args[]) {

        JFrame frame = new JFrame();
        frame.setLayout(new BorderLayout());

        JScrollPane scroll = new JScrollPane(new TestPane());

        frame.add(scroll);

        frame.setSize(500, 500);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

    }

}

これを生成します:

スクロールして離れる

ちなみに、なぜ人々がnullレイアウトを使用することを主張するのかはわかりません。それらは、価値があるよりも多くの問題と心の痛みを引き起こすだけです。時間をかけて、いくつかの単純なレイアウトマネージャーを見つけてください。私は多くの理由でVBが嫌いですが、レイアウト管理は私のリストの一番上にあります、IMHO

于 2012-08-18T00:32:30.647 に答える
3

適用してみてください

setPreferredSize(new Dimension());

setSize()メソッドの代わりに、パネルのメソッド。

このような:

import java.awt.Dimension;

import javax.swing.*;
public class Example extends JFrame{

public static void main(String[] args) {
    Example ex = new Example();
    JPanel panel = new JPanel();
    JScrollPane sc = new JScrollPane(panel);
    panel.setPreferredSize(new Dimension(800,600));
    ex.getContentPane().add(sc);
    ex.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    ex.pack();
    ex.setVisible(true);
}

}
于 2012-08-17T23:57:39.453 に答える
1

私はします:

  1. スクロールペインがフランのコンテンツペインのすべての部屋に収まるように境界線をレイアウトします。
  2. レイアウト用の最後のパック。
  3. setVisible last;
  4. 何も役に立たない場合はsetPreferredSize。

    mWindow = new JFrame(lang.getString("title"));
    mWindow.setSize(1000, 800);
    mWindow.setLocationRelativeTo(null);
    mWindow.setResizable(false);
    mWindow.setLayout(new BorderLayout());
    mWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    workspace = new JPanel();
    workspace.setBounds(0,0, 1000, 1203);
    workspace.setPreferredSize(new Dimension(1000,1203));
    
    workspace.setBackground(Color.RED);
    
    scroll = new JScrollPane(workspace, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    scroll.setBounds(0, 20, 600, 600);
    mWindow.getContentPane().add(scroll, BorderLayout.CENTER);
    mWindow.pack();
    mWindow.setVisible(true);
    
于 2012-08-18T00:37:08.157 に答える
0

このようなものを試して、フレームを作成するクラスから呼び出してみませんか。

public JPanel createLPanelWithScroller() {

      Dimension outter_dem = new Dimension(600, 600); //width,height
      Dimension inner_panel_dem = new Dimension(1000, 1203);  
      Dimension scroll_dem = new Dimension(600, 600); 

      JPanel outter_panel = new JPanel(new FlowLayout());
 outter_panel.setPreferredSize(outter_panel_dem);       

 JPanel inner_panel = new JPanel(new FlowLayout());
 inner_panel.setPreferredSize(inner_panel_dem);

 JScrollPane scroller = new JScrollPane(list_panel); 
 scroller.setHorizontalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
      scroller.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
 scroller.setPreferredSize(scroll_dem);

 outer_panel.add(list_scroller);

 return outer_panel;
}
于 2013-04-12T20:31:47.327 に答える