开源项目中写报表编辑器的有这个.
具体去sourceforge查查jasperreport的设计器吧

解决方案 »

  1.   

    JScrollPane本身就有这个属性可以设置的。
      

  2.   

    试试下面这段代码:
      jSlider1.setMaximum(20);
        jSlider1.setPaintLabels(true);
        Hashtable  h = new Hashtable(21);
        for(int i=0;i<=20;i++)
        {
         h.put(new Integer(i), new JLabel("<html>|<br>"+i+"</html>"));
        }
        //jSlider1.setLabelTable(  jSlider1.createStandardLabels(10));
        jSlider1.setLabelTable( h);如果只要数字,使用jSlider1.setLabelTable(  jSlider1.createStandardLabels(10));否则,使用jSlider1.setLabelTable( h);并把Jlabel的内容该为你想要的图形或文字
      

  3.   

    前两个类:
    //// ScrollDemo.java //////////////////////////////
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.border.*;
    /*
     * ScrollDemo.java requires:images/youngdad.jpeg
     */
    public class ScrollDemo extends JPanel
                            implements ItemListener
    {
        private Rule columnView;
        private Rule rowView;
        private JToggleButton isMetric;
        private ScrollablePicture picture;
        public ScrollDemo()
        {
            ImageIcon david = createImageIcon("images/youngdad.jpeg");
            columnView = new Rule(Rule.HORIZONTAL, true);
            rowView = new Rule(Rule.VERTICAL, true);
            if (david != null)
            {
                columnView.setPreferredWidth(david.getIconWidth());
                rowView.setPreferredHeight(david.getIconHeight());
            }
            else{columnView.setPreferredWidth(320);rowView.setPreferredHeight(480);}        JPanel buttonCorner = new JPanel();
            isMetric = new JToggleButton("cm", true);
            isMetric.setFont(new Font("SansSerif", Font.PLAIN, 11));
            isMetric.setMargin(new Insets(2,2,2,2));
            isMetric.addItemListener(this);
            buttonCorner.add(isMetric);         picture = new ScrollablePicture(david, columnView.getIncrement());
            JScrollPane pictureScrollPane = new JScrollPane(picture);
            pictureScrollPane.setPreferredSize(new Dimension(300, 250));
            pictureScrollPane.setViewportBorder(BorderFactory.createLineBorder(Color.black));
            pictureScrollPane.setColumnHeaderView(columnView);
            pictureScrollPane.setRowHeaderView(rowView);        pictureScrollPane.setCorner(JScrollPane.UPPER_LEFT_CORNER,buttonCorner);
            pictureScrollPane.setCorner(JScrollPane.LOWER_LEFT_CORNER,new Corner());
            pictureScrollPane.setCorner(JScrollPane.UPPER_RIGHT_CORNER,new Corner());        setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
            add(pictureScrollPane);
            setBorder(BorderFactory.createEmptyBorder(20,20,20,20));
        }    public void itemStateChanged(ItemEvent e)
        {
            if (e.getStateChange() == ItemEvent.SELECTED)
            {rowView.setIsMetric(true);columnView.setIsMetric(true);}
            else {rowView.setIsMetric(false);columnView.setIsMetric(false);}
            picture.setMaxUnitIncrement(rowView.getIncrement());
        }
        protected static ImageIcon createImageIcon(String path)
        {
            java.net.URL imgURL = ScrollDemo.class.getResource(path);
            if (imgURL != null) return new ImageIcon(imgURL);
            else
            {
                System.err.println("Couldn't find file: " + path);
                return null;
            }
        }
        public static void main(String[] args)
        {
            JFrame.setDefaultLookAndFeelDecorated(true);
            JFrame frame = new JFrame("ScrollDemo");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setContentPane(new ScrollDemo());
            frame.pack();
            frame.setVisible(true);
        }
    }
    class ScrollablePicture extends JLabel    implements Scrollable
    {
        private int maxUnitIncrement = 1;
        private boolean missingPicture = false;
        public ScrollablePicture(ImageIcon i, int m)
        {
            super(i);
            if (i == null)
            {
                missingPicture = true;
                setText("No picture found.");
                setHorizontalAlignment(CENTER);
                setOpaque(true);
                setBackground(Color.white);
            }
            maxUnitIncrement = m;
        }
        public Dimension getPreferredSize()
        {
            if (missingPicture) return new Dimension(320, 480);
            else  return super.getPreferredSize();
        }
        public Dimension getPreferredScrollableViewportSize()
        {
            return getPreferredSize();
        }
        public int getScrollableUnitIncrement(Rectangle visibleRect,int orientation,int direction)
        {
            int currentPosition = 0;
            if (orientation == SwingConstants.HORIZONTAL)currentPosition = visibleRect.x;
            else currentPosition = visibleRect.y;        if (direction < 0)
            {
                int newPosition=currentPosition-(currentPosition/maxUnitIncrement)*maxUnitIncrement;
                return (newPosition == 0) ? maxUnitIncrement : newPosition;
            } else
            {
                return ((currentPosition / maxUnitIncrement) + 1) *
                       maxUnitIncrement - currentPosition;
            }
        }
        public int getScrollableBlockIncrement(Rectangle visibleRect,int orientation,int direction)
        {
            if (orientation == SwingConstants.HORIZONTAL) return visibleRect.width - maxUnitIncrement;
            else return visibleRect.height - maxUnitIncrement;
        }
        public boolean getScrollableTracksViewportWidth()  {    return false;    }
        public boolean getScrollableTracksViewportHeight() {    return false;    }
        public void setMaxUnitIncrement(int pixels)        {maxUnitIncrement = pixels;   }
    }
      

  4.   

    后两个类:
    class Rule extends JComponent
    {
        public static final int INCH = Toolkit.getDefaultToolkit().getScreenResolution();
        public static final int HORIZONTAL = 0;
        public static final int VERTICAL = 1;
        public static final int SIZE = 35;
        public int orientation;
        public boolean isMetric;
        private int increment;
        private int units;
        public Rule(int orientation, boolean m)
        {
            orientation = orientation;
            isMetric = m;
            setIncrementAndUnits();
        }
        public void setIsMetric(boolean isMetric)
        {
            this.isMetric = isMetric;
            setIncrementAndUnits();
            repaint();
        }
        private void setIncrementAndUnits()
        {
            if (isMetric){units = (int)((double)INCH / (double)2.54);increment = units;}
            else{units = INCH;increment = units / 2;}
        }
        public boolean isMetric() { return this.isMetric; }
        public int getIncrement() { return increment; }
        public void setPreferredHeight(int ph){setPreferredSize(new Dimension(SIZE, ph));}
        public void setPreferredWidth(int pw){setPreferredSize(new Dimension(pw, SIZE));}
        public void paintComponent(Graphics g)
        {
            Rectangle drawHere = g.getClipBounds();
            g.setColor(new Color(230, 163, 4));
            g.fillRect(drawHere.x, drawHere.y, drawHere.width, drawHere.height);
            g.setFont(new Font("SansSerif", Font.PLAIN, 10));
            g.setColor(Color.black);        int end = 0,start = 0,tickLength = 0;
            String text = null;
            if (orientation == HORIZONTAL)
            {
                start = (drawHere.x / increment) * increment;
                end = (((drawHere.x + drawHere.width) / increment) + 1)*increment;
            }
            else
            {
                start = (drawHere.y / increment) * increment;
                end = (((drawHere.y + drawHere.height) / increment) + 1)*increment;
            }
            if (start == 0)
            {
                text = Integer.toString(0) + (isMetric ? " cm" : " in");
                tickLength = 10;
                if (orientation == HORIZONTAL)
                {
                    g.drawLine(0, SIZE-1, 0, SIZE-tickLength-1);
                    g.drawString(text, 2, 21);
                }
                else
                {
                    g.drawLine(SIZE-1, 0, SIZE-tickLength-1, 0);
                    g.drawString(text, 9, 10);
                }
                text = null;
                start = increment;
            }
            for (int i = start; i < end; i += increment)
            {
                if (i % units == 0)  {tickLength = 10;text = Integer.toString(i/units);}
                else {tickLength = 7; text = null;}
                if (tickLength != 0)
                {
                    if (orientation == HORIZONTAL)
                    {
                        g.drawLine(i, SIZE-1, i, SIZE-tickLength-1);
                        if (text != null) g.drawString(text, i-3, 21);
                    }
                    else
                    {
                        g.drawLine(SIZE-1, i, SIZE-tickLength-1, i);
                        if (text != null) g.drawString(text, 9, i+3);
                    }
                }
            }
        }
    }
    class Corner extends JComponent
    {
        public void paintComponent(Graphics g)
        {
            g.setColor(new Color(230, 163, 4));
            g.fillRect(0, 0, getWidth(), getHeight());
        }
    }
      

  5.   

    :o ,发完贴子,自己回家画去了,结果还真画出来了,和word的一样,嘿嘿。
    这么多朋友关注,谢了。非常感谢,结贴。