JScrollPane为其他元素提供滚动功能。
以下代码演示如何使用不同的选项创建JScrollPane:
创建没有组件作为其视口的JScrollPane和 使用默认滚动条策略
JScrollPane sp1 = new JScrollPane();
使用JTextArea作为其视口和创建JScrollPane 默认滚动条策略为“根据需要"
JTextArea description = new JTextArea(10, 60); JScrollPane sp2 = new JScrollPane(description);
使用JTextArea作为其视口和创建JScrollPane 两个滚动条策略设置为“始终显示"
JTextArea comments = new JTextArea(10, 60); JScrollPane sp3 = new JScrollPane(comments, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
JScrollPane的视口保留对我们添加到JScrollPane的组件的引用。 您可以通过查询其视口来获取JScrollPane中组件的引用,如图所示:
JViewport vp = sp3.getViewport(); JTextArea comments1 = (JTextArea)vp.getView();
要将组件添加到JScrollPane的视口:
sp3.setViewportView(new JTextPane());
要将组件放置在JScrollPane的其中一个角上,请调用setCorner(String key,Component corner)键是
import java.awt.BorderLayout; import java.awt.GridLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.ScrollPaneConstants; import javax.swing.SwingUtilities; public class Main { public static void main(String[] a) { JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.add(new JScrollPaneDemo()); f.setSize(500, 500); f.setVisible(true); } } class JScrollPaneDemo extends JPanel { public void init() { try { SwingUtilities.invokeAndWait(new Runnable() { public void run() { makeGUI(); } }); } catch (Exception exc) { System.out.println("Can"t create because of " + exc); } } private void makeGUI() { setLayout(new BorderLayout()); JPanel jp = new JPanel(); jp.setLayout(new GridLayout(20, 20)); int b = 0; for (int i = 0; i < 20; i++) { for (int j = 0; j < 20; j++) { jp.add(new JButton("Button " + b)); ++b; } } int v = ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED; int h = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED; JScrollPane jsp = new JScrollPane(jp, v, h); add(jsp, BorderLayout.CENTER); } }
import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JScrollPane; import javax.swing.border.LineBorder; public class Main { public static void main(String args[]) { JFrame frame = new JFrame("Tabbed Pane Sample"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JLabel label = new JLabel("Label"); label.setPreferredSize(new Dimension(1000, 1000)); JScrollPane jScrollPane = new JScrollPane(label); JButton jButton1 = new JButton(); jScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); jScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); jScrollPane.setViewportBorder(new LineBorder(Color.RED)); jScrollPane.getViewport().add(jButton1, null); frame.add(jScrollPane, BorderLayout.CENTER); frame.setSize(400, 150); frame.setVisible(true); } }
import java.awt.event.*; import javax.swing.*; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JScrollBar; import javax.swing.JScrollPane; class JScrollPaneToTopAction implements ActionListener { JScrollPane scrollPane; public JScrollPaneToTopAction(JScrollPane scrollPane) { if (scrollPane == null) { throw new IllegalArgumentException( "JScrollPaneToTopAction: null JScrollPane"); } this.scrollPane = scrollPane; } public void actionPerformed(ActionEvent actionEvent) { JScrollBar verticalScrollBar = scrollPane.getVerticalScrollBar(); JScrollBar horizontalScrollBar = scrollPane.getHorizontalScrollBar(); verticalScrollBar.setValue(verticalScrollBar.getMinimum()); horizontalScrollBar.setValue(horizontalScrollBar.getMinimum()); } } public class Main { public static void main(String args[]) { JFrame frame = new JFrame("Tabbed Pane Sample"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JLabel label = new JLabel("Label"); label.setPreferredSize(new Dimension(1000, 1000)); JScrollPane jScrollPane = new JScrollPane(label); JButton bn = new JButton("Move"); bn.addActionListener(new JScrollPaneToTopAction(jScrollPane)); frame.add(bn, BorderLayout.SOUTH); frame.add(jScrollPane, BorderLayout.CENTER); frame.setSize(400, 150); frame.setVisible(true); } }
在JScrollPane容器中侦听滚动条值更改
import java.awt.Adjustable; import java.awt.event.AdjustmentEvent; import java.awt.event.AdjustmentListener; // www . j ava2 s .co m import javax.swing.JScrollPane; import javax.swing.JTextArea; public class Main { public static void main(String[] argv) throws Exception { JTextArea textArea = new JTextArea(); JScrollPane pane = new JScrollPane(textArea); // Listen for value changes in the scroll pane"s scrollbars AdjustmentListener listener = new MyAdjustmentListener(); pane.getHorizontalScrollBar().addAdjustmentListener(listener); pane.getVerticalScrollBar().addAdjustmentListener(listener); } } class MyAdjustmentListener implements AdjustmentListener { public void adjustmentValueChanged(AdjustmentEvent evt) { Adjustable source = evt.getAdjustable(); if (evt.getValueIsAdjusting()) { return; } int orient = source.getOrientation(); if (orient == Adjustable.HORIZONTAL) { System.out.println("from horizontal scrollbar"); } else { System.out.println("from vertical scrollbar"); } int type = evt.getAdjustmentType(); switch (type) { case AdjustmentEvent.UNIT_INCREMENT: System.out.println("Scrollbar was increased by one unit"); break; case AdjustmentEvent.UNIT_DECREMENT: System.out.println("Scrollbar was decreased by one unit"); break; case AdjustmentEvent.BLOCK_INCREMENT: System.out.println("Scrollbar was increased by one block"); break; case AdjustmentEvent.BLOCK_DECREMENT: System.out.println("Scrollbar was decreased by one block"); break; case AdjustmentEvent.TRACK: System.out.println("The knob on the scrollbar was dragged"); break; } int value = evt.getValue(); } }
SWING 事件适配器适配器是用于接收各种事件的抽象类。这些类中的方法是空的。这些类的存在是为了方便创建监听器对象。SWING 适配...
断言所有的断言都包含在 Assert 类中public class Assert extends java.lang.Object这个类提供了很多有用的断言方法来编写测试用...
MyBatis的真正强大在于它的语句映射,这是它的魔力所在。由于它的异常强大,映射器的XML文件就显得相对简单。如果拿它跟具有相同...
foreach动态SQL的另一个常见使用场景是对集合进行遍历(尤其是在构建IN条件语句的时候)。比如:select id="selectPostIn" ...
SqlSession使用MyBatis的主要Java接口就是SqlSession。你可以通过这个接口来执行命令,获取映射器实例和管理事务。在介...