/**
* 把代码复制到文件,可以运行。
*/
import java.awt.BorderLayout
import java.awt.Color
import java.awt.Component
import java.awt.Font
import java.awt.Graphics
import java.awt.Graphics2D
import java.awt.Rectangle
import java.awt.Transparency
import java.awt.event.WindowAdapter
import java.awt.event.WindowEvent
import java.awt.image.BufferedImage
import javax.swing.Icon
import javax.swing.ImageIcon
import javax.swing.JDialog
import javax.swing.JLabel
import javax.swing.JPanel
import javax.swing.JScrollPane
import javax.swing.JTree
import javax.swing.UIManager
import javax.swing.tree.DefaultMutableTreeNode
import javax.swing.tree.TreeCellRenderer
/**
*
* @author beans
*/
public class TreeMain {
public static void main(String[] args) {
new TreeMain().showDialog()
}
public TreeMain() {
}
/**
* 显示窗口
*/
private void showDialog() {
JDialog dialog = new JDialog()
dialog.setBounds(new Rectangle(50, 50, 380, 280))
dialog.setTitle("演示树")
dialog.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
dialog.setVisible(false)
dialog.dispose()
}
})
dialog.add(this.getPanel(), BorderLayout.CENTER)
dialog.setVisible(true)
}
private JPanel getPanel() {
JPanel panel = new JPanel()
JScrollPane treePanel = new JScrollPane()
treePanel.setViewportView(this.getTree())
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(panel)
panel.setLayout(layout)
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(treePanel, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE)
.addContainerGap())
)
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(treePanel, javax.swing.GroupLayout.PREFERRED_SIZE, 272, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(18, Short.MAX_VALUE))
)
panel.add(treePanel, BorderLayout.CENTER)
return panel
}
/**
* 取得树。
*
* @return
*/
private JTree getTree() {
DefaultMutableTreeNode root = new DefaultMutableTreeNode()
root.add(this.getNode())
root.add(this.getNode())
root.add(this.getNode())
JTree jtree = new JTree(root)
jtree.setRootVisible(false)
jtree.setCellRenderer(new CTreeCellRenderer())
jtree.expandRow(1)
return jtree
}
/**
* 取得树节点。
*
* @return
*/
private DefaultMutableTreeNode getNode() {
DefaultMutableTreeNode node = new DefaultMutableTreeNode(new NodeObject(true, "节"))
for (int i = 0 i < 5 i++) {
DefaultMutableTreeNode leaf = new DefaultMutableTreeNode(new NodeObject(false, "叶" + i))
node.add(leaf)
}
return node
}
/**
* 树节点和树叶,关联对象。
*/
class NodeObject {
boolean isNode
String name
/**
*
* @param isNode the value of isNode
* @param name the value of name
*/
NodeObject(boolean isNode, String name) {
this.isNode = isNode
this.name = name
}
/**
* 图标
*
* @param isSelect 选中节点时返回不同的图标。
* @return
*/
ImageIcon getIcon(boolean isSelect) {
int wh = 20
BufferedImage image = new BufferedImage(wh, wh, BufferedImage.TYPE_INT_ARGB)
Graphics2D g2 = image.createGraphics()
image = g2.getDeviceConfiguration().createCompatibleImage(wh, wh, Transparency.TRANSLUCENT)
Graphics2D g2d = image.createGraphics()
Font font = new Font("Dialog", Font.PLAIN, wh - 4)
g2d.setFont(font)
g2d.setBackground(Color.WHITE)
g2d.setColor(Color.BLACK)
g2d.drawString(isSelect ? " S " : " N ", 0, wh - 1)
g2d.setColor(this.isNode ? Color.RED : Color.YELLOW)
g2d.drawLine(0, 5, wh, 5)
g2d.drawLine(0, 10, wh, 10)
g2d.drawLine(0, 15, wh, 15)
g2d.dispose()
g2.dispose()
return new ImageIcon(image)
}
String getName() {
return this.name
}
}
/**
* 树渲染器
*/
protected class CTreeCellRenderer extends JLabel implements TreeCellRenderer {
protected Color m_textSelectionColor
protected Color m_textNonSelectionColor
protected Color m_bkSelectionColor
protected Color m_bkNonSelectionColor
protected Color m_borderSelectionColor
protected boolean m_selected
public CTreeCellRenderer() {
m_textSelectionColor = UIManager.getColor("Tree.selectionForeground")
m_textNonSelectionColor = UIManager.getColor("Tree.textForeground")
m_bkSelectionColor = UIManager.getColor("Tree.selectionBackground")
m_bkNonSelectionColor = UIManager.getColor("Tree.textBackground")
m_borderSelectionColor = UIManager.getColor("Tree.selectionBorderColor")
}
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) value
NodeObject obj = (NodeObject) node.getUserObject()
this.setIcon(obj.getIcon(selected))
this.setText(" " + obj.getName() + " ")
this.setForeground(selected ? m_textSelectionColor : m_textNonSelectionColor)
this.setBackground(selected ? m_bkSelectionColor : m_bkNonSelectionColor)
this.m_selected = selected
return this
}
@Override
public void paint(Graphics g) {
Color bColor = this.getBackground()
Icon icon = this.getIcon()
g.setColor(bColor)
int offset = 0
if (icon != null && getText() != null) {
offset = (icon.getIconWidth() + this.getIconTextGap())
}
g.fillRect(offset, 0, this.getWidth() - 1 - offset, this.getHeight() - 1)
if (this.m_selected) {
g.setColor(this.m_borderSelectionColor)
g.drawRect(offset, 0, this.getWidth() - 1 - offset, this.getHeight() - 1)
}
super.paint(g)
}
}
}
include<stdio.h>int main(){ int N,r
long double sum=0
long double a,b
scanf("%d",&N)
for(r=0r<Nr++){
scanf("%lf%lf",&a,&b)
JTree组件被用来以树的形式显示数据,一层套一层,看起来清晰明了,使用户很方便地就了解到各个节点之间的层次关系,可以很容易地找到相关的数据。
例如 Windows 系统的文件管理器,它就是一个典型的树层次结构。
JTree的构造函数:
·JTree() 建立一棵默认的树。
·JTree(Hashtable data) 利用Hashtable建立树。
·JTree(Object[] data) 利用数组建立树。
·JTree(TreeModel model) 利用TreeModel建立树。
·JTree(TreeNode root) 建立以root为根的树。
·JTree(TreeNode root,Boolean children) 建立以 root 为根的树,并设定是否允许有子节点。
·JTree(Vector value) 利用Vector建立树。
使用一个JTree可以简单地像下面这样表示:
import javax.swing.JFrame
import javax.swing.JTree
import javax.swing.event.TreeSelectionEvent
import javax.swing.event.TreeSelectionListener
import javax.swing.tree.DefaultMutableTreeNode
public class TreeDemo {
public static void main(String[] args) {
// 创建没有父节点和子节点、但允许有子节点的树节点,并使用指定的用户对象对它进行初始化。
// public DefaultMutableTreeNode(Object userObject)
DefaultMutableTreeNode node1 = new DefaultMutableTreeNode("软件部")
node1.add(new DefaultMutableTreeNode(new User("小花")))
node1.add(new DefaultMutableTreeNode(new User("小虎")))
node1.add(new DefaultMutableTreeNode(new User("小龙")))
DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("销售部")
node2.add(new DefaultMutableTreeNode(new User("小叶")))
node2.add(new DefaultMutableTreeNode(new User("小雯")))
node2.add(new DefaultMutableTreeNode(new User("小夏")))
DefaultMutableTreeNode top = new DefaultMutableTreeNode("职员管理")
top.add(new DefaultMutableTreeNode(new User("总经理")))
top.add(node1)
top.add(node2)
final JTree tree = new JTree(top)
JFrame f = new JFrame("JTreeDemo")
f.add(tree)
f.setSize(300, 300)
f.setVisible(true)
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
// 添加选择事件
tree.addTreeSelectionListener(new TreeSelectionListener() {
@Override
public void valueChanged(TreeSelectionEvent e) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree
.getLastSelectedPathComponent()
if (node == null)
return
Object object = node.getUserObject()
if (node.isLeaf()) {
User user = (User) object
System.out.println("你选择了:" + user.toString())
}
}
})
}
}
class User {
private String name
public User(String n) {
name = n
}
// 重点在toString,节点的显示文本就是toString
public String toString() {
return name
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)