10. december 2002 - 23:19
#1
Måske du får en ide...
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;
import java.sql.*;
import java.util.*;
import javax.swing.text.*;
import javax.swing.event.TreeModelEvent;
import javax.swing.event.*;
public class Tree extends JApplet implements ActionListener {
Sql sql = new Sql();
Container panel = getContentPane();
Hashtable index = new Hashtable();
Hashtable index2 = new Hashtable();
JScrollPane scroller,feltScroller;
JButton nyTraad,svarTraad;
JTextArea traadText;
JTextPane felt,test;
JTextField navn,email,besked,emne;
JOptionPane skriveFelt1;
JTree tree=null;
DefaultMutableTreeNode top =null;
DefaultMutableTreeNode node=null;
DefaultTreeModel treeModel;
Object parent=null;
int parentId=0;
public void init() {
tree();
}
public void tree() {
panel.setLayout(null);
panel.setBackground(Color.white);
top = new DefaultMutableTreeNode("Forum");
treeModel = new DefaultTreeModel(top);
//treeModel.addTreeModelListener(new MyTreeModelListener());
tree = new JTree(treeModel);
//JTreeUpdater updater = new JTreeUpdater(tree);
tree.setEditable(false);
tree.setRootVisible(true);
tree.setShowsRootHandles(true);
tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();
renderer.setOpenIcon(null);
renderer.setClosedIcon(null);
renderer.setLeafIcon(null);
tree.setCellRenderer(renderer);
nyTraad = new JButton("Ny Tråd");
nyTraad.setBounds(100,5,110,20);
nyTraad.addActionListener(this);
panel.add(nyTraad);
svarTraad = new JButton("Svar på Tråd");
svarTraad.setBounds(325,5,110,20);
svarTraad.addActionListener(this);
panel.add(svarTraad);
scroller = new JScrollPane(tree);
//scroller.setOpaque(true);
//tree.setBackground(new Color(217,219,226));
scroller.setBounds(10,30,530,200);
panel.add(scroller);
felt = new JTextPane();
felt.setEditable(false);
feltScroller = new JScrollPane(felt);
feltScroller.setBounds(10,240,530,155);
// felt.setBackground(new Color(217,219,226));
panel.add(feltScroller);
try {
UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName() );
}catch (Exception e) {}
/*
try {
UIManager.setLookAndFeel(new com.sun.java.swing.plaf.motif.MotifLookAndFeel());
}
catch (Exception e) {}
SwingUtilities.updateComponentTreeUI(tree.getRootPane());
tree.setToggleClickCount(1);
*/
refreshTree();
tree.addTreeSelectionListener(new TreeSelectionListener() {
public void valueChanged(TreeSelectionEvent e) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
//System.out.println(index2.get(node));
try{
parent = index2.get(node);
System.out.println(parent);///
if(parent != null)
{
parentId = (Integer.parseInt((parent).toString()));
}
}catch(NullPointerException g){}
}
});
MouseListener ml = new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
if(e.getClickCount() == 1 && parent !=null)
{
felt.setText("");
final StyledDocument doc=(StyledDocument )felt.getDocument();
final MutableAttributeSet attr=new SimpleAttributeSet();
String feltBesked="";
String navn="";
String email="";
java.sql.Date tid=null;
try{
//System.out.println("parent id :"+parentId);///
ResultSet row = sql.hentDataId(parentId);
if(row.next())
{
tid = row.getDate("tid");
navn = row.getString("name");
email = row.getString("email");
feltBesked = row.getString("message");
//System.out.println(navn+" "+email+" "+feltBesked+" "+tid);////
}
}catch(SQLException a){}
try{
StyleConstants.setFontSize(attr,10);
StyleConstants.setForeground(attr,Color.black);
StyleConstants.setFontFamily(attr,"Verdana");
StyleConstants.setBold(attr,true);
doc.insertString(doc.getLength(),feltBesked+"\n",attr);
StyleConstants.setBold(attr,false);
StyleConstants.setFontSize(attr,9);
doc.insertString(doc.getLength(),"Skrevet af : "+navn+" "+tid+"<"+email+">"+"\n\n",attr);
felt.setCaretPosition(0);
}catch(BadLocationException b){System.out.println(b);}
repaint();
}
}
};
tree.addMouseListener(ml);
}
public void actionPerformed(ActionEvent e) {
if(e.getSource() == nyTraad) {
traadText = new JTextArea(5,5);
feltScroller = new JScrollPane(traadText,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
navn = new JTextField();
email = new JTextField();
emne = new JTextField();
traadText.setLineWrap(true);
Object besked[] = new Object[] {
"Navn",
navn,
"Email",
email,
"Emne",
emne,
"Besked",
feltScroller};
skriveFelt1.showMessageDialog(this, besked,"Lav en Tråd",JOptionPane.OK_CANCEL_OPTION);
if(navn.getText().length()!=0 && email.getText().length()!=0 && emne.getText().length()!=0 && traadText.getText().length()!=0) {
sql.opretTraad(0,navn.getText(),email.getText(),"null",emne.getText(),traadText.getText().trim());
//((DefaultTreeModel)tree.getModel()).reload();
}
refreshTree();
}
if(e.getSource() == svarTraad) {
traadText = new JTextArea(5,5);
feltScroller = new JScrollPane(traadText,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
navn = new JTextField();
email = new JTextField();
emne = new JTextField();
traadText.setLineWrap(true);
Object besked[] = new Object[] {
"Navn",
navn,
"Email",
email,
"Emne",
emne,
"Besked",
feltScroller};
skriveFelt1.showMessageDialog(this, besked,"Svar på denne tråd",JOptionPane.OK_CANCEL_OPTION);
if(navn.getText().length()!=0 && email.getText().length()!=0 && emne.getText().length()!=0 && traadText.getText().length()!=0) {
sql.opretTraad(parentId,navn.getText(),email.getText(),"null",emne.getText(),traadText.getText().trim());
}
refreshTree();
}
}
public static void main(String args[]) {
new Tree();
}
private void refreshTree()
{
top.removeAllChildren();
try{
ResultSet row = sql.hentData();
int i = 0;
while(row.next()) {
int id = row.getInt("id");
int overId = row.getInt("parentID");
java.sql.Date tid = row.getDate("tid");
String navn = row.getString("name");
String email = row.getString("email");
String ip = row.getString("ip");
String traad = row.getString("subject");
String besked = row.getString("message");
DefaultMutableTreeNode svar = new DefaultMutableTreeNode(traad);
if( overId == 0 )
top.add(svar);
else if( overId != 0 ) {
node = (DefaultMutableTreeNode) index.get(""+overId);
node.add(svar);
//updater.update();
//treeModel.reload(node);
//treeModel.nodeStructureChanged(node);
//treeModel.reload(top);
//treeModel.nodeStructureChanged(top);
}
i++;
index.put(""+id,svar);
index2.put(svar,""+id);
}
}catch(SQLException e){System.out.println(e);}
tree.updateUI();
treeModel.reload();
}
}
class MyTreeModelListener implements TreeModelListener {
public void treeNodesChanged(TreeModelEvent e) {
}
public void treeNodesInserted(TreeModelEvent e) {
System.out.println(e.getSource()+"hej");
}
public void treeNodesRemoved(TreeModelEvent e) {
}
public void treeStructureChanged(TreeModelEvent e) {
}
}
11. december 2002 - 21:46
#5
Ja, du kan bruge dette:
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.event.TreeSelectionListener;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.tree.TreeSelectionModel;
import java.net.URL;
import java.io.IOException;
import javax.swing.JEditorPane;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;
public class TreeDemo extends JFrame {
private JEditorPane htmlPane;
private static boolean DEBUG = false;
private URL helpURL;
//Optionally play with line styles. Possible values are
//"Angled", "Horizontal", and "None" (the default).
private boolean playWithLineStyle = false;
private String lineStyle = "Angled";
public TreeDemo() {
super("TreeDemo");
//Create the nodes.
DefaultMutableTreeNode top = new DefaultMutableTreeNode("The Java Series");
createNodes(top);
//Create a tree that allows one selection at a time.
final JTree tree = new JTree(top);
tree.getSelectionModel().setSelectionMode
(TreeSelectionModel.SINGLE_TREE_SELECTION);
//Listen for when the selection changes.
tree.addTreeSelectionListener(new TreeSelectionListener() {
public void valueChanged(TreeSelectionEvent e) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode)
tree.getLastSelectedPathComponent();
if (node == null) return;
Object nodeInfo = node.getUserObject();
if (node.isLeaf()) {
BookInfo book = (BookInfo)nodeInfo;
displayURL(book.bookURL);
if (DEBUG) {
System.out.print(book.bookURL + ": \n ");
}
} else {
displayURL(helpURL);
}
if (DEBUG) {
System.out.println(nodeInfo.toString());
}
}
});
if (playWithLineStyle) {
tree.putClientProperty("JTree.lineStyle", lineStyle);
}
//Create the scroll pane and add the tree to it.
JScrollPane treeView = new JScrollPane(tree);
//Create the HTML viewing pane.
htmlPane = new JEditorPane();
htmlPane.setEditable(false);
initHelp();
JScrollPane htmlView = new JScrollPane(htmlPane);
//Add the scroll panes to a split pane.
JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
splitPane.setTopComponent(treeView);
splitPane.setBottomComponent(htmlView);
Dimension minimumSize = new Dimension(100, 50);
htmlView.setMinimumSize(minimumSize);
treeView.setMinimumSize(minimumSize);
splitPane.setDividerLocation(100);
splitPane.setPreferredSize(new Dimension(500, 300));
//Add the split pane to this frame.
getContentPane().add(splitPane, BorderLayout.CENTER);
}
private class BookInfo {
public String bookName;
public URL bookURL;
public String prefix = "file:"
+ System.getProperty("user.dir")
+ System.getProperty("file.separator");
public BookInfo(String book, String filename) {
bookName = book;
try {
bookURL = new URL(prefix + filename);
} catch (java.net.MalformedURLException exc) {
System.err.println("Attempted to create a BookInfo "
+ "with a bad URL: " + bookURL);
bookURL = null;
}
}
public String toString() {
return bookName;
}
}
private void initHelp() {
String s = null;
try {
s = "file:"
+ System.getProperty("user.dir")
+ System.getProperty("file.separator")
+ "TreeDemoHelp.html";
if (DEBUG) {
System.out.println("Help URL is " + s);
}
helpURL = new URL(s);
displayURL(helpURL);
} catch (Exception e) {
System.err.println("Couldn't create help URL: " + s);
}
}
private void displayURL(URL url) {
try {
htmlPane.setPage(url);
} catch (IOException e) {
System.err.println("Attempted to read a bad URL: " + url);
}
}
private void createNodes(DefaultMutableTreeNode top) {
DefaultMutableTreeNode category = null;
DefaultMutableTreeNode book = null;
category = new DefaultMutableTreeNode("Books for Java Programmers");
top.add(category);
//original Tutorial
book = new DefaultMutableTreeNode(new BookInfo
("The Java Tutorial: Object-Oriented Programming for the Internet",
"tutorial.html"));
category.add(book);
//Tutorial Continued
book = new DefaultMutableTreeNode(new BookInfo
("The Java Tutorial Continued: The Rest of the JDK",
"tutorialcont.html"));
category.add(book);
//JFC Swing Tutorial
book = new DefaultMutableTreeNode(new BookInfo
("The JFC Swing Tutorial: A Guide to Constructing GUIs",
"swingtutorial.html"));
category.add(book);
//Arnold/Gosling
book = new DefaultMutableTreeNode(new BookInfo
("The Java Programming Language", "arnold.html"));
category.add(book);
//FAQ
book = new DefaultMutableTreeNode(new BookInfo(
"The Java FAQ", "faq.html"));
category.add(book);
//Chan/Lee
book = new DefaultMutableTreeNode(new BookInfo
("The Java Class Libraries: An Annotated Reference",
"chanlee.html"));
category.add(book);
//Threads
book = new DefaultMutableTreeNode(new BookInfo
("Concurrent Programming in Java: Design Principles and Patterns",
"thread.html"));
category.add(book);
category = new DefaultMutableTreeNode("Books for Java Implementers");
top.add(category);
//VM
book = new DefaultMutableTreeNode(new BookInfo
("The Java Virtual Machine Specification",
"vm.html"));
category.add(book);
//Language Spec
book = new DefaultMutableTreeNode(new BookInfo
("The Java Language Specification",
"jls.html"));
category.add(book);
}
public static void main(String[] args) {
JFrame frame = new TreeDemo();
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
frame.pack();
frame.setVisible(true);
}
}