2013-04-05 144 views

回答

6

您可以通过使用一个滚动面板,并通过创建自己的按钮,将使用滚动条的操作让你自己的组件:

import java.awt.*; 
import javax.swing.*; 
import javax.swing.plaf.basic.*; 

public class ScrollPaneSSCCE extends JPanel 
{ 
    public ScrollPaneSSCCE() 
    { 
     setLayout(new BorderLayout()); 

     JTextArea textArea = new JTextArea(1, 80); 
     textArea.setText("Hopefully this will answer your question"); 
     JScrollPane scrollPane = new JScrollPane(textArea); 
     scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); 
     add(scrollPane); 

     JScrollBar horizontal = scrollPane.getHorizontalScrollBar(); 

     BasicArrowButton west = new BasicArrowButton(BasicArrowButton.WEST); 
     west.setAction(new ActionMapAction("", horizontal, "negativeUnitIncrement")); 
     add(west, BorderLayout.WEST); 

     BasicArrowButton east = new BasicArrowButton(BasicArrowButton.EAST); 
     east.setAction(new ActionMapAction("", horizontal, "positiveUnitIncrement")); 
     add(east, BorderLayout.EAST); 
    } 

    private static void createAndShowUI() 
    { 
     JFrame frame = new JFrame("ScrollPaneSSCCE"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(new ScrollPaneSSCCE(), BorderLayout.NORTH); 
     frame.setSize(100, 100); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     EventQueue.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       createAndShowUI(); 
      } 
     }); 
    } 
} 

您还需要使用Action Map Action类。

+0

很好,谢谢!小问题:如何在不需要滚动的情况下让这些按钮隐藏(整个内容适合屏幕显示)? – Marco 2013-04-06 09:16:25

+0

将ComponentListener添加到scrollPane并监听componentResized()方法。然后,检查添加到滚动窗格的组件的首选大小以及滚动窗格的大小。如果首选尺寸较大,则显示隐藏它们的按钮。 – camickr 2013-04-06 15:45:54