package demo; import java.awt.BorderLayout; import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableModel; import javax.swing.tree.TreeModel; import javax.swing.tree.TreePath; /** * swing根据字符串定位 * (1)定位到JTree某一个节点上。 * (2)定位到JTable某一行上。 * @author WangJian * */ @SuppressWarnings("serial") public class FindInTableAndTree extends JFrame implements ActionListener{ private JToolBar toolbar = new JToolBar(); private JButton findInTableBtn = new JButton("Find in Table"); private JButton findInTreeBtn = new JButton("Find in Tree"); private JTable table = null; private JTree tree = null; private JScrollPane tableSp = new JScrollPane(); private JScrollPane treeSp = new JScrollPane(); private JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, tableSp, treeSp); public FindInTableAndTree(){ super("FindInTableAndTree"); table = new JTable(createTableModel()); tree = new JTree(); tableSp.setViewportView(table); treeSp.setViewportView(tree); toolbar.add(findInTableBtn); toolbar.add(findInTreeBtn); findInTableBtn.addActionListener(this); findInTreeBtn.addActionListener(this); getContentPane().add(splitPane, BorderLayout.CENTER); getContentPane().add(toolbar, BorderLayout.NORTH); } private TableModel createTableModel() { String[] columnNames = { "colors", "sports", "food" }; String[][] data = { { "blue", "violet", "red", "yellow" }, { "basketball", "soccer", "football", "hockey" },{ "hot dogs", "pizza", "ravioli", "bananas" } }; DefaultTableModel model = new DefaultTableModel(data, columnNames); return model; } public void actionPerformed(ActionEvent e){ String str = JOptionPane.showInputDialog(this, "Find:", "Find", JOptionPane.QUESTION_MESSAGE); if (str != null) { if (e.getSource() == findInTableBtn) { findInTable(str); }else { findInTree(str); } } } private void findInTree(String str){ Object root = tree.getModel().getRoot(); TreePath treePath = new TreePath(root); treePath = findInPath(treePath, str); if (treePath != null) { tree.setSelectionPath(treePath); tree.scrollPathToVisible(treePath); } } private TreePath findInPath(TreePath treePath, String str){ Object object = treePath.getLastPathComponent(); if (object == null) { return null; } String value = object.toString(); if (str.equals(value)) { return treePath; }else { TreeModel model = tree.getModel(); int n = model.getChildCount(object); for (int i = 0; i < n; i++) { Object child = model.getChild(object, i); TreePath path = treePath.pathByAddingChild(child); path = findInPath(path, str); if (path != null) { return path; } } return null; } } private void findInTable(String str){ int rowCount = table.getRowCount(); int columnCount = table.getColumnCount(); for (int i = 0; i < rowCount; i++) { for (int k = 0; k < columnCount; k++) { Object value = table.getValueAt(i, k); if (str.equals(value)) { table.getSelectionModel().setSelectionInterval(i, i); Rectangle cellRect = table.getCellRect(i, k, true); table.scrollRectToVisible(cellRect); return; } } } } public static void main(String[] args){ FindInTableAndTree f = new FindInTableAndTree(); f.pack(); f.setLocationRelativeTo(null); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); f.splitPane.setDividerLocation(0.5); } }
最近下载更多
Niha726631 LV6
2023年3月14日
liushiming LV1
2023年3月6日
512816870 LV2
2022年10月20日
yangctz LV24
2021年9月10日
你为我着迷丶 LV18
2020年6月13日
121096056 LV9
2019年12月26日
zhuweiming LV2
2019年11月5日
msjren LV5
2019年10月30日
mupt1234 LV1
2018年12月28日
Cheart LV5
2018年11月10日
最近浏览更多
hurunhui LV1
2023年11月1日
Niha726631 LV6
2023年3月14日
liushiming LV1
2023年3月6日
2252536772 LV21
2022年11月9日
512816870 LV2
2022年10月20日
mengfanyun LV9
2022年7月4日
微信网友_5852742079762432 LV6
2022年3月5日
絮尘惟倾恬
2021年11月27日
暂无贡献等级
yangctz LV24
2021年9月10日
huaua7676 LV30
2021年7月19日