弄了一天了,都没有搞定,郁闷~~~~~~~`
用过Excel吧,在它的主界面下,单击鼠标左键向下拖动时,可以看到右边的滚动条随着鼠标自动调整着大小,换句话说就是表格面板随着鼠标变大了.
现在用Swing实现类似功能,在一个面板中,我点击鼠标向下拖动时,右边的滚动条随着鼠标自动调整大小.
上,下,左,右,都要实现此功能,请问各位高手,要怎么解决啊,急急急~~~~~~~~~~

解决方案 »

  1.   

    把你要拖动的组件(如table等)全放到一个scrollpane中去,setAutoScroll(true)
      

  2.   

    好像还是不行啊.我帖个网上找的例子吧:import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.border.*;public class Test extends Frame { public JLabel bl = new JLabel(" b1 "); JPanel editor; Point lastLocation; public Test() { setLayout(new BorderLayout());
    editor = new JPanel();
    editor.setLayout(null);
    editor.setPreferredSize(new Dimension(300, 400));
    JScrollPane scroller = new JScrollPane();
    // scroller.setAutoscrolls(true);
    JViewport port = scroller.getViewport();
    port.add(editor);
    port.setScrollMode(1); add("Center", scroller); bl.addMouseMotionListener(new MouseMotionAdapter() {
    public void mouseDragged(MouseEvent e) {
    if (lastLocation == null)
    return;
    JLabel ls = (JLabel) e.getComponent();
    int incx = lastLocation.x - e.getX(), incy = lastLocation.y
    - e.getY();
    ls.setLocation(ls.getX() - incx, ls.getY() - incy);
    }
    });
    bl.addMouseListener(new MouseAdapter() {
    public void mousePressed(MouseEvent e) {
    lastLocation = e.getPoint();
    } public void mouseReleased(MouseEvent e) {
    lastLocation = null;
    } public void mouseClicked(MouseEvent e) {
    System.out.println("c");
    JLabel ls = (JLabel) e.getComponent();
    ls.setForeground(Color.blue);
    }
    }); bl.setBounds(new Rectangle(100, 39, 55, 22));
    bl.setBorder(new LineBorder(Color.BLUE, 1));
    editor.add(bl);
    } public static void main(String[] args) {
    Test frame = new Test();
    frame.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    System.exit(0);
    }
    });
    frame.setSize(300, 400);
    frame.setVisible(true);
    }
    }可以直接运行,我希望通过拖动中间的JLabel到下面,来实现想要的功能.请高手帮忙改改啊??
      

  3.   

    import java.awt.*;
    import java.awt.event.MouseEvent;import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.event.MouseInputAdapter;
    import javax.swing.event.MouseInputListener;public class T {
    public static void main(String[] args) {
    P p = new P();
    JFrame f = new JFrame();
    f.getContentPane().add(new JScrollPane(p), BorderLayout.CENTER);
    f.pack();
    f.setLocationRelativeTo(null);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setVisible(true);
    }
    }class P extends JPanel {
    Point start = null;
    Point end = null;

    public P()
    {
    setPreferredSize(new Dimension(300, 300));
    MouseInputListener m = new M();
    addMouseListener(m);
    addMouseMotionListener(m);
    }

    @Override
    protected void paintComponent(Graphics g)
    {
    super.paintComponent(g);
    if (start != null && end != null) {
    Rectangle rect = new Rectangle();
    rect.setFrameFromDiagonal(start, end);

    g.setColor(Color.LIGHT_GRAY);
    ((Graphics2D) g).fill(rect);
    g.setColor(Color.GRAY);
    ((Graphics2D) g).draw(rect);
    }
    }

    class M extends MouseInputAdapter {
    public void mousePressed(MouseEvent e)
    {
    start = e.getPoint();
    end = null;
    repaint();
    }

    public void mouseDragged(MouseEvent e)
    {
    Dimension oldPrefSize = getPreferredSize();
    int newWid = Math.max(oldPrefSize.width, e.getX()+20);
    int newHei = Math.max(oldPrefSize.height, e.getY()+20);
    if (newWid > oldPrefSize.width || newHei > oldPrefSize.height) {
    setPreferredSize(new Dimension(newWid, newHei));
    revalidate();
    }
    scrollRectToVisible(new Rectangle(e.getX(), e.getY(), 20, 20));

    end = e.getPoint();
    repaint();
    }
    }
    }
      

  4.   

    楼上的方法很不错啊,快接近想要的效果了,不过好象鼠标超过边框后,要继续向下拉滚动条才动.Excel中的效果是鼠标拉出边框后就算不动,滚动条也要继续滚动的.请再不知道该改哪里,再帮忙改改吧,马上就散分.
      

  5.   

    package com.geostar.client.geosurfEditor;/**
     * <p>Title: </p>
     *
     * <p>Description: </p>
     *
     * <p>Copyright: Copyright (c) 2007</p>
     *
     * <p>Company: </p>
     *
     * @author not attributable
     * @version 1.0
     */
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.util.Vector;import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableModel;public class jTable extends JFrame {
        JTable table = new JTable();
        Connection con = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;    public jTable() {
            try {
                Class.forName("oracle.jdbc.driver.OracleDriver"); //驱动申明
                con = DriverManager.getConnection(
                        "jdbc:oracle:thin:@cdfn01:1521:cdfn01", "erpcn", "erpcn"); //建立链接
                String sql = "select * from emp"; //查询语句
                pstmt = con.prepareStatement(sql);
                rs = pstmt.executeQuery();
            } catch (Exception e) {
                System.out.println(e.toString());
            }
            ((DefaultTableModel) table.getModel()).setDataVector(getdata(),
                    gettitle());
            JScrollPane jsp = new JScrollPane(table);
            getContentPane().add(jsp);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            pack();
            setVisible(true);
        }    private Vector gettitle() {
            try {
                ResultSetMetaData rsm = rs.getMetaData();
                Vector title = new Vector();
                for (int i = 1; i <= rsm.getColumnCount(); i++) {
                    title.add(rsm.getColumnName(i));
                }
                return title;
            } catch (Exception e) {
                System.out.println(e.toString());
            }
            return new Vector();
        }    private Vector getdata() {
            try {
                ResultSetMetaData rsm = rs.getMetaData();
                Vector data = new Vector();
                while (rs.next()) {
                    Vector row = new Vector();
                    for (int i = 1; i <= rsm.getColumnCount(); i++) {
                        row.add(rs.getObject(i));
                    }
                    data.add(row);
                }
                return data;
            } catch (Exception e) {
                System.out.println(e.toString());
            }
            return new Vector();
        }    public static void main(String args[]) {
            new jTable();
        }
    }