2016-05-26 15 views
0

したがって、私は(0,200)から(100000,200)までg.drawLine(x、y)を使って線を描いているサイズ500x500のJFrameを持っています。問題は、スクロールバーがないので、私は行全体を見ることができないということです。誰かがこの特定の状況でスクロールバーを持って、ポイント(100000,200)までライン全体を見る方法を教えてもらえますか?JavaのJFrameのスクロールバーSwitch

+2

誰がそこまでスクロールしたいと考えていないので、どのような[*実際の問題*](http://meta.stackoverflow.com/q/66377/163188)あなたが解決しようとしていますか? – trashgod

答えて

1

コードを表示できますか?それはしかし、私の頭の上に私はあなただけのものを作成し、そのようなあなたのJFrameに追加すべきだと思う、それを見ずに知ることは難しいので:

JTextArea ta = new JTextArea(); // Example with a JTextArea, 
     depends on what you have, as I said, we need to see the code 

JScrollPane sp = new JScrollPane(ta); //Add it to the component 
    needed, in your case the drawn line i guess 

jFrame.add(sp); //Add it to the frame 

アンデそれを追加する前に、あなたはサイズを操作することができます。

sp.setColumnHeaderView(new JLabel("header column")); 

sp.setRowHeaderView(new JLabel("header row")); 

sp.setPreferredSize(new Dimension(500, 300)); 
3

Iはusability concernsを有するが、以下の例では、How to Use Scroll Panes: Implementing a Scrolling-Savvy Clientで説明したようにScrollableインタフェースを実装する方法を示す図です。特にgetPreferredScrollableViewportSize()の結果がgetPreferredSize()の結果とどのように異なるかに注意してください。単位とブロックの増分は、ページングをやや簡単にします。

image

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.Graphics; 
import java.awt.Rectangle; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.Scrollable; 
import javax.swing.SwingConstants; 

/** 
* @see https://stackoverflow.com/a/37460185/230513 
*/ 
public class Test { 

    private void display() { 
     JFrame f = new JFrame("Test"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.add(new JScrollPane(new DrawingPanel())); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 

    private static class DrawingPanel extends JPanel implements Scrollable { 

     private static final int W = 100_000; 
     private static final int H = 400; 

     @Override 
     public Dimension getPreferredSize() { 
      return new Dimension(W, H); 
     } 

     @Override 
     protected void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      g.setColor(Color.red); 
      g.drawLine(0, getHeight()/2, getWidth(), getHeight()/2); 
      g.drawLine(0, getHeight()/4, 0, 3 * getHeight()/4); 
      g.drawLine(W - 1, getHeight()/4, W - 1, 3 * getHeight()/4); 
     } 

     @Override 
     public Dimension getPreferredScrollableViewportSize() { 
      return new Dimension(640, H); 
     } 

     @Override 
     public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) { 
      if (orientation == SwingConstants.HORIZONTAL) { 
       return W/10; 
      } else { 
       return 10; 
      } 
     } 

     @Override 
     public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) { 
      if (orientation == SwingConstants.HORIZONTAL) { 
       return W/10; 
      } else { 
       return 10; 
      } 
     } 

     @Override 
     public boolean getScrollableTracksViewportWidth() { 
      return false; 
     } 

     @Override 
     public boolean getScrollableTracksViewportHeight() { 
      return false; 
     } 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Test()::display); 
    } 
}