swing模仿web锚点效果 博客分类: swing SwingWeb
程序员文章站
2024-02-04 22:29:58
...
import java.awt.BorderLayout; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollBar; import javax.swing.JScrollPane; import javax.swing.JSplitPane; import javax.swing.JTree; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; /** * * @author Administrator */ public class TestScroll extends JFrame { private JButton[] buttons = new JButton[100]; private JScrollPane js = new JScrollPane(); public TestScroll() { init(); } private void init() { setTitle("swing模仿web锚点效果"); setSize(300, 300); setLocationRelativeTo(this); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new BorderLayout()); JSplitPane jSplitPane = new JSplitPane(); jSplitPane.setDividerLocation(140); jSplitPane.setLeftComponent(getTree()); jSplitPane.setRightComponent(getPanel()); this.add(jSplitPane); } private JScrollPane getPanel() { JPanel jpanel = new JPanel(); jpanel.setLayout(new BoxLayout(jpanel, BoxLayout.Y_AXIS)); for (int i = 0; i < 100; i++) { JButton button = new JButton("button" + i); jpanel.add(button); buttons[i] = button; } js.setViewportView(jpanel); return js; } private JScrollPane getTree() { JScrollPane scroll = new JScrollPane(); final JTree tree = new JTree(); DefaultMutableTreeNode node = new DefaultMutableTreeNode("序号"); for (int i = 0; i < 100; i++) { node.add(new DefaultMutableTreeNode(i)); } DefaultTreeModel tmode = new DefaultTreeModel(node); tree.setModel(tmode); tree.addTreeSelectionListener(new TreeSelectionListener() { @Override public void valueChanged(TreeSelectionEvent e) { //关键代码 String path = tree.getLastSelectedPathComponent().toString(); int y = 0; try { y = Integer.parseInt(path); } catch (NumberFormatException n) { //do Nothing } JScrollBar bar = js.getVerticalScrollBar(); bar.setValue(buttons[y].getY()); } }); scroll.setViewportView(tree); return scroll; } public static void main(String[] args) { TestScroll t = new TestScroll(); t.setVisible(true); } }
截图: