TreeCellRendererを試す -- JPanelをJTreeの中に埋め込む

戻る



:::::::::::::: MyPanel.java :::::::::::::: import java.awt.*; import java.awt.event.*; import java.awt.dnd.*; import java.awt.geom.*; import java.awt.image.*; import javax.imageio.*; import javax.swing.event.*; import javax.swing.*; import javax.swing.border.*; import java.util.*; import java.io.*; import java.net.*; /** * $Id: TreeCellRenderer3.html,v 1.1 2009/06/22 16:12:01 kishi Exp kishi $ */ public class MyPanel extends JPanel { private BufferedImage image = null; public MyPanel( String text, String imagePath ) { super(); setPreferredSize( new Dimension( 500, 25 ) ); setLayout( null ); JLabel label = new JLabel( text ); try { image = ImageIO.read( new File( imagePath ) ); } catch ( Exception e ) { e.printStackTrace(); } label.setBounds( 50, 0, 200, 25 ); this.add( label ); // ボーダーを追加 setBorder( new MatteBorder( 1, 1, 1, 1, Color.black ) ); } public void paintComponent( Graphics g ) { g.setColor( Color.cyan ); g.fillRect( 0, 0, this.getWidth(), this.getHeight() ); if ( image != null ) { g.drawImage( image, 0, 0, 25, 25, this ); } } } :::::::::::::: TCR.java :::::::::::::: import java.util.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.tree.*; /** * $Id: TreeCellRenderer3.html,v 1.1 2009/06/22 16:12:01 kishi Exp kishi $ */ public class TCR extends JFrame implements TreeCellRenderer { Map map; public Component getTreeCellRendererComponent( JTree tree , Object value , boolean selected , boolean expanded , boolean leaf , int row , boolean hasFocus ) { // valueは実際のノードのオブジェクトを指す String text = value.toString(); String gender = ( String ) map.get( value ); String imagePath = null; if ( "MALE".equals( gender ) ) { imagePath = "male.gif"; } else if ( "FEMALE".equals( gender ) ) { imagePath = "female.gif"; } else { imagePath = "home.png"; } MyPanel panel = new MyPanel( text, imagePath ); return panel; } public TCR() { JPanel mainPanel = new JPanel(); map = new HashMap(); DefaultMutableTreeNode root = new DefaultMutableTreeNode( "メンバー" ); DefaultTreeModel treeModel = new DefaultTreeModel( root ); DefaultMutableTreeNode node1 = new DefaultMutableTreeNode( "山田太一" ); map.put( node1, "MALE" ); DefaultMutableTreeNode node2 = new DefaultMutableTreeNode( "大久保彦左衛門" ); map.put( node2, "MALE" ); DefaultMutableTreeNode node3 = new DefaultMutableTreeNode( "津島恵子" ); map.put( node3, "FEMALE" ); root.add( node1 ); root.add( node2 ); root.add( node3 ); JTree tree = new JTree( treeModel ); tree.setCellRenderer( this ); // スクロールするペインを追加 JScrollPane scrPane = new JScrollPane(); scrPane.getViewport().setView( tree ); scrPane.setPreferredSize( new Dimension( 360, 480 ) ); mainPanel.add( scrPane ); // コンテナに各パネルを配置 Container container = this.getContentPane(); container.add( mainPanel, BorderLayout.CENTER ); } public static void main( String[] args ) { /* 自分自身を作成 */ TCR viewer = new TCR(); /* 終了処理を追加 */ viewer.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent e ) { System.exit( 0 ); } } ); /* サイズと位置を指定 */ viewer.setBounds( 10, 10, 400, 600 ); /* 実際に表示する */ viewer.setTitle( "TreeCellRendererを試す -- その3" ); viewer.setVisible( true ); } }

戻る inserted by FC2 system