Problem mit der aktualisierung von JTree und Text Area

Status
Nicht offen für weitere Antworten.

Lenzen

Aktives Mitglied
Hallo,

ich habe folgendes Problem:

Ich habe ein Programm geschrieben was eine log Datei einlesen kann. Die Log datei hat IP Adressen und den dazugehörigen Teil auf dem der User gesurft hat.
Die IP-Adressen werden in ein JTree eingefügt ( linke Seite des Fensters ) und der Inhalt auf die Rechte Seite in einer JText Area.

zusätzlich habe ich noch ein TextFeld gemacht um auch direkt die IP Adresse dort eingeben zu können.

Bsp.:


-----------------------------------------
| 117.35.12.3 | SerachButton
-----------------------------------------

JTree TextFeld

IP-Adressen
117.35.12.30 | sdkjfhksjckjsdvkjsdvkjsd Inhalt der WebSeite
118.35.12.31 | sdkjfhksjckjsdvkjsdvkjsd Inhalt der WebSeite
119.35.12.88 | sdkjfhksjckjsdvkjsdvkjsd Inhalt der WebSeite
111.35.12.32 | sdkjfhksjckjsdvkjsdvkjsd Inhalt der WebSeite
114.35.12.93 | sdkjfhksjckjsdvkjsdvkjsd Inhalt der WebSeite
115.35.12.85 | sdkjfhksjckjsdvkjsdvkjsd Inhalt der WebSeite
116.35.12.31 | sdkjfhksjckjsdvkjsdvkjsd Inhalt der WebSeite
118.35.12.67 | sdkjfhksjckjsdvkjsdvkjsd Inhalt der WebSeite
119.35.12.49 | sdkjfhksjckjsdvkjsdvkjsd Inhalt der WebSeite
110.35.12.32 | sdkjfhksjckjsdvkjsdvkjsd Inhalt der WebSeite

------------------------------------------------------------------------------------------------

- wenn ich nun eine IP Adresse anklicke, erscheint rechts der Inhalt
- wenn ich nun eine weitere IP Adresse anklicke, bleibt der Rest des alten Inhalts weiterhin bestehen
- auch der JTree erscheint dann lückenhaft

Wie kann ich realisieren, dass beide Seiten aktualisiert werden sobald ich auf den Baum klicke oder den Seach Button drücke?

Mein Code bisher:
Code:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;

public class NewJFrame extends javax.swing.JFrame {
	private JMenuBar MenuLeiste;
	private JTextField jTextField1;
	private JMenu fileMenu1;
	private JMenuItem ExitMenuItem1;
	private JButton SearchButton1;
	private JLabel chooseLabel1;
	private JMenu fileMenue;
	private JSplitPane jSplitPane1;
	private JScrollPane jScrollPane1;
	private JScrollPane jScrollPane2;
	private JMenuItem exitMenuItem1;
	private JSeparator jSeparator1;
	private JMenuItem openMenuItem1;
	private JTree jTree1;

	private String ip = "";
	private Scanner s;
	private FileWriter fstream;
	private BufferedWriter out;
	private Matcher mat = null;

	private static final long serialVersionUID = 1L;
	static String PATH = "d:\\Test\\AD_weblog.log";
	static String OUTFILE = "d:\\Test\\TestWrite.txt";
	static String suchwort = "145.254.32.119";

	public static void main(String[] args) throws FileNotFoundException,
			IOException {
		NewJFrame inst = new NewJFrame("");
		inst.setVisible(true);
		inst.pack();
		inst.setSize(793, 646);

	}

	public NewJFrame(String ip) throws FileNotFoundException, IOException {
		super();
		this.ip = ip;
		initGUI(ip);
	}

	private void initGUI(String ip) throws FileNotFoundException, IOException {
		this.s = new Scanner(new File(PATH));
		this.fstream = new FileWriter(OUTFILE);
		this.out = new BufferedWriter(fstream);

		setTitle("Search for IP Address in LogFiles");
		this.setLayout(null);

		try {
			// Close window
			setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			{
				jTextField1 = new JTextField();
				getContentPane().add(jTextField1);
				jTextField1.setText("");
				jTextField1.setBounds(7, 7, 462, 28);
			}
			{
				chooseLabel1 = new JLabel();
				getContentPane().add(chooseLabel1);
				chooseLabel1.setText("Choose the IP Address");
				chooseLabel1.setBounds(476, 7, 130, 28);
			}
			{
				SearchButton1 = new JButton();
				getContentPane().add(SearchButton1);
				SearchButton1.setText("Search");
				SearchButton1.setBounds(623, 7, 133, 28);
				SearchButton1.addActionListener(new Ereignis());
			}
			{
				jSplitPane1 = new JSplitPane();
				getContentPane().add(jSplitPane1);
				jSplitPane1.setBounds(7, 42, 770, 539);
				{
					JTextArea text = new JTextArea();
					DefaultMutableTreeNode root = new DefaultMutableTreeNode("IPAdressen");
					String ipAddress = "";
					String tmp = "";
					String zweiterTeil = "";
					while (s.hasNextLine()) {
						String str = s.nextLine();
						//if (str.startsWith(suchwort)) {
						if (str.startsWith(ip)) {
							// Ausgabe von IP+Seite
							//System.out.println(str);

							// Daten in Datei schreiben
							//out.write(str);
							//out.newLine();

							//Füllen der TextArea
							//jTextArea1.setText("sdlkjskdlvnlsdknvlksdnvl");
							//text.append(str);
							//text.append("\n");

							//2.Teil in TexArea fügen
							zweiterTeil = str.split("(\\d+)(\\.\\d+){3}")[1];
							text.append(zweiterTeil);
							text.append("\n");

							//text.setLineWrap(false); // Zeilenumbruch		
							mat = Pattern.compile("(\\d+)(\\.\\d+){3}")
									.matcher(str);

							while (mat.find()) {
								ipAddress = mat.group(0).toString(); // temporärer string   
								if (!tmp.equals(ipAddress)) {
									root.add(new DefaultMutableTreeNode(
											ipAddress));
								}
							}
							tmp = ipAddress;

						}
					}

					jScrollPane1 = new JScrollPane(text);
					jSplitPane1.add(jScrollPane1, JSplitPane.RIGHT);

					jTree1 = new JTree(root);
					jTree1.getSelectionModel().addTreeSelectionListener(
							new TreeSelectionListener() {
								public void valueChanged(TreeSelectionEvent e) {
									TreePath path = e.getNewLeadSelectionPath();
									TreeNode node = (TreeNode) path.getLastPathComponent();
									String testNode = node.toString();
									try {
										if (testNode.equals("IPAdressen")) {
											//System.out.print("ROOT");				                        	
											initGUI("");
										} else {
											//System.out.print("Node");												
											initGUI(testNode);
										}
									} catch (Exception e1) {
									}
									System.out.println(testNode);
								}
							});
					jScrollPane2 = new JScrollPane(jTree1);
					jSplitPane1.add(jScrollPane2, JSplitPane.LEFT);
					// Grösse der linken Seite einstellen
					jSplitPane1.setDividerLocation(0.2);

				}
			}
			{
				MenuLeiste = new JMenuBar();
				setJMenuBar(MenuLeiste);
				MenuLeiste.setPreferredSize(new java.awt.Dimension(785, 27));
				{
					fileMenu1 = new JMenu();
					MenuLeiste.add(fileMenu1);
					fileMenu1.setText("File");
					{
						openMenuItem1 = new JMenuItem();
						fileMenu1.add(openMenuItem1);
						openMenuItem1.setText("open");
						openMenuItem1.addActionListener(new Ereignis());
					}
					{
						jSeparator1 = new JSeparator();
						fileMenu1.add(jSeparator1);
					}
					{
						exitMenuItem1 = new JMenuItem();
						fileMenu1.add(exitMenuItem1);
						exitMenuItem1.setText("exit");
						exitMenuItem1.addActionListener(new Ereignis());
					}
				}

			}
			//pack();		
			setVisible(true);
			setSize(793, 646);
		} catch (Exception e) {
			e.printStackTrace();
		}
		//BufferedWriter schliessen
		try {
			out.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//Scanner schliessen
		s.close();
	}

	public class Ereignis implements ActionListener {

		//Create a file chooser
		final JFileChooser fc = new JFileChooser("D:/Test");

		public void actionPerformed(ActionEvent e) {
			//Handle open button action.
			if (e.getSource() == openMenuItem1) {
				int returnVal = fc.showOpenDialog(NewJFrame.this);
				if (returnVal == JFileChooser.APPROVE_OPTION) {
					File file = fc.getSelectedFile();
					System.out.println(file.getAbsolutePath());
				} else
					System.out.println("Auswahl abgebrochen");
				//System.exit(1);
			}
			if (e.getSource() == exitMenuItem1) {
				//Close window			
				dispose();
				System.exit(0);
			}
			if (e.getSource() == SearchButton1) {				
				ip = jTextField1.getText();
				System.out.println(ip);
				try {
					initGUI(ip);
				} catch (Exception e1) {
				}
			}
		}
	}
}
 

André Uhres

Top Contributor
So ungefähr stelle ich mir vor, daß du es haben willst:
Code:
package tree;
/*
 * NewJFrame.java
 */
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import java.util.regex.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;
public class NewJFrame extends JFrame {
    private JMenuBar menuLeiste;
    private JTextField jTextField1;
    private JMenu fileMenu1;
    private JMenuItem exitMenuItem1;
    private JButton searchButton1;
    private JLabel chooseLabel1;
    private JMenu fileMenue;
    private JSplitPane jSplitPane1;
    private JScrollPane jScrollPane1;
    private JScrollPane jScrollPane2;
    private JMenuItem exitMenuItem2;
    private JSeparator jSeparator1;
    private JMenuItem openMenuItem1;
    private JTree jTree1;
    private String ip = "";
    private Scanner s;
    private FileWriter fstream;
    private BufferedWriter out;
    private Matcher mat = null;
    private static final long serialVersionUID = 1L;
    static String PATH = "d:\\Test\\AD_weblog.log";
    static String OUTFILE = "d:\\Test\\TestWrite.txt";
    static String suchwort = "145.254.32.119";
    private JTextArea text;
    private boolean found;
    private DefaultMutableTreeNode currentValue;
    public static void main(String[] args) throws FileNotFoundException, IOException {
        NewJFrame inst = new NewJFrame("");
        inst.setSize(793, 646);
        inst.setVisible(true);
    }
    public NewJFrame(String ip) throws FileNotFoundException, IOException {
        super();
        this.ip = ip;
        initGUI(ip);
    }
    private void initGUI(String ip) throws FileNotFoundException, IOException {
        this.s = new Scanner(new File(PATH));
        this.fstream = new FileWriter(OUTFILE);
        this.out = new BufferedWriter(fstream);
        setTitle("Search for IP Address in LogFiles");
        this.setLayout(null);
        try {
            // Close window
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            {
                jTextField1 = new JTextField();
                getContentPane().add(jTextField1);
                jTextField1.setText("");
                jTextField1.setBounds(7, 7, 462, 28);
            }
            {
                chooseLabel1 = new JLabel();
                getContentPane().add(chooseLabel1);
                chooseLabel1.setText("Choose the IP Address");
                chooseLabel1.setBounds(476, 7, 130, 28);
            }
            {
                searchButton1 = new JButton();
                getContentPane().add(searchButton1);
                searchButton1.setText("Search");
                searchButton1.setBounds(623, 7, 133, 28);
                searchButton1.addActionListener(new Ereignis());
            }
            {
                jSplitPane1 = new JSplitPane();
                getContentPane().add(jSplitPane1);
                jSplitPane1.setBounds(7, 42, 770, 539);
                {
                    text = new JTextArea();
                    DefaultMutableTreeNode root = new DefaultMutableTreeNode("IPAdressen");
                    String ipAddress = "";
                    String tmp = "";
                    String zweiterTeil = "";
                    while (s.hasNextLine()) {
                        String str = s.nextLine();
                        //if (str.startsWith(suchwort)) {
                        if (str.startsWith(ip)) {
                            // Ausgabe von IP+Seite
                            //System.out.println(str);
                            // Daten in Datei schreiben
                            //out.write(str);
                            //out.newLine();
                            //Füllen der TextArea
                            //jTextArea1.setText("sdlkjskdlvnlsdknvlksdnvl");
                            //text.append(str);
                            //text.append("\n");
                            //2.Teil in TexArea fügen
                            zweiterTeil = str.split("(\\d+)(\\.\\d+){3}")[1];
                            text.append(zweiterTeil);
                            text.append("\n");
                            //text.setLineWrap(false); // Zeilenumbruch
                            mat = Pattern.compile("(\\d+)(\\.\\d+){3}").matcher(str);
                            while (mat.find()) {
                                ipAddress = mat.group(0).toString(); // temporärer string
                                if (!tmp.equals(ipAddress)) {
                                    root.add(new DefaultMutableTreeNode(new IPNode(ipAddress, zweiterTeil)));
                                }
                            }
                            tmp = ipAddress;
                        }
                    }
                    jScrollPane1 = new JScrollPane(text);
                    jSplitPane1.add(jScrollPane1, JSplitPane.RIGHT);
                    jTree1 = new JTree(root);
                    jTree1.getSelectionModel().addTreeSelectionListener(new TreeSelectionListener() {
                        public void valueChanged(TreeSelectionEvent e) {
                            TreePath path = e.getNewLeadSelectionPath();
                            DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent();
                            String testNode = node.toString();
                            Object userNode = node.getUserObject();
                            if(userNode instanceof IPNode){
                                IPNode ipNode = (IPNode) userNode;
                                text.setText( ipNode.getContents() );
                            }
                            System.out.println(testNode);
                        }
                    });
                    jScrollPane2 = new JScrollPane(jTree1);
                    jSplitPane1.add(jScrollPane2, JSplitPane.LEFT);
                    // Grösse der linken Seite einstellen
                    jSplitPane1.setDividerLocation(0.2);
                }
            }
            {
                menuLeiste = new JMenuBar();
                setJMenuBar(menuLeiste);
                menuLeiste.setPreferredSize(new Dimension(785, 27));
                {
                    fileMenu1 = new JMenu();
                    menuLeiste.add(fileMenu1);
                    fileMenu1.setText("File");
                    {
                        openMenuItem1 = new JMenuItem();
                        fileMenu1.add(openMenuItem1);
                        openMenuItem1.setText("open");
                        openMenuItem1.addActionListener(new Ereignis());
                    }
                    {
                        jSeparator1 = new JSeparator();
                        fileMenu1.add(jSeparator1);
                    }
                    {
                        exitMenuItem2 = new JMenuItem();
                        fileMenu1.add(exitMenuItem2);
                        exitMenuItem2.setText("exit");
                        exitMenuItem2.addActionListener(new Ereignis());
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        //BufferedWriter schliessen
        try {
            out.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //Scanner schliessen
        s.close();
    }
    public class Ereignis implements ActionListener {
        //Create a file chooser
        final JFileChooser fc = new JFileChooser("d:/Test");
        public void actionPerformed(ActionEvent e) {
            //Handle open button action.
            if (e.getSource() == openMenuItem1) {
                int returnVal = fc.showOpenDialog(NewJFrame.this);
                if (returnVal == JFileChooser.APPROVE_OPTION) {
                    File file = fc.getSelectedFile();
                    System.out.println(file.getAbsolutePath());
                } else
                    System.out.println("Auswahl abgebrochen");
                //System.exit(1);
            }
            if (e.getSource() == exitMenuItem2) {
                //Close window
                dispose();
                System.exit(0);
            }
            if (e.getSource() == searchButton1) {
                ip = jTextField1.getText();
                System.out.println(ip);
                traverse(jTree1);
                if(found){
                    IPNode ipNode = (IPNode) currentValue.getUserObject();
                    text.setText( ipNode.getContents() );
                    jTree1.setSelectionPath(new TreePath(currentValue.getPath()));
                }
            }
        }
    }
    /*
     * Die Methoden "traverse" und "walk" dienen dazu den Baum zu durchlaufen
     * um eine bestimmte IP Addresse zu finden
     */
    public void traverse(JTree tree) {
        found = false;
        TreeModel model = tree.getModel();
        if (model != null) {
            Object root = model.getRoot();
            walk(model,root);
        } else
            System.out.println("Tree is empty.");
    }
    protected void walk(TreeModel model, Object o){
        int  cc;
        cc = model.getChildCount(o);
        LOOP: for( int i=0; i < cc; i++) {
            DefaultMutableTreeNode child = (DefaultMutableTreeNode) model.getChild(o, i );
            if (model.isLeaf(child) ){
                TreeNode[] ar = child.getPath();
                for (int j = 0; j < ar.length; j++) {
                    currentValue = (DefaultMutableTreeNode) ar[j];
                    if(currentValue.getUserObject() instanceof IPNode){
                        IPNode ipNode = (IPNode)currentValue.getUserObject();
                        String ipS = ipNode.getIp();
                        if(ipS.equals(ip)){
                            found = true;
                            break LOOP;
                        }
                    }
                }
            }else {
                walk(model,child );
            }
        }
    }
}
/*
 * IPNode
 *
 * kapselt die IP Addresse zusammen mit dem entsprechenden Seiteninhalt
 */
class IPNode{
    private String ip;
    private String contents;
    public IPNode(String ip, String contents){
        this.ip = ip;
        this.contents = contents;
    }
    public String getContents() {
        return contents;
    }
    public String getIp() {
        return ip;
    }
    public void setContents(String contents) {
        this.contents = contents;
    }
    public void setIp(String ip) {
        this.ip = ip;
    }
    public String toString() {
        return ip;
    }
}
 

Lenzen

Aktives Mitglied
Allerbesten Dank für die Hilfe :)!

Ich hab nun nur noch eine Sache:
- wenn ich auf eine der IP Adressen klicke erscheint im rechten TextFeld nur ein Eintrag
- wenn es nun aber für eine IP Adresse mehrere Einträge gibr werden diese nicht ausgegeben

Ich habe mit der tmp Variable IP Adressen, die nach einander stehen entfernen können, weiß aber nicht, ob dass der beste Weg ist, denn eigentlich sollen sie nicht doppelt vorkommen im Tree.
Eine kleine Änderung mit dem dem splitten des String habe ich ebenfalls vorgenommen.

Code:
.....
   mat = Pattern.compile("(\\d+)(\\.\\d+){3}").matcher(str);
                            while (mat.find()) {
                                ipAddress = mat.group(0).toString(); // temporärer string
                                zweiterTeil = str.split(ipAddress)[1];
                                text.append(zweiterTeil);
                                text.append("\n");
                                if (!tmp.equals(ipAddress)) {
                                    root.add(new DefaultMutableTreeNode(new IPNode(ipAddress, zweiterTeil)));
                                }
                            }
                            tmp = ipAddress;
                        }

.....
 

André Uhres

Top Contributor
Code:
package tree;
/*
 * NewJFrame.java
 */
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import java.util.List;
import java.util.regex.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;
public class NewJFrame extends JFrame {
    private JMenuBar menuLeiste;
    private JTextField jTextField1;
    private JMenu fileMenu1;
    private JMenuItem exitMenuItem1;
    private JButton searchButton1;
    private JLabel chooseLabel1;
    private JMenu fileMenue;
    private JSplitPane jSplitPane1;
    private JScrollPane jScrollPane1;
    private JScrollPane jScrollPane2;
    private JMenuItem exitMenuItem2;
    private JSeparator jSeparator1;
    private JMenuItem openMenuItem1;
    private JTree jTree1;
    private String ip = "";
    private Scanner s;
    private FileWriter fstream;
    private BufferedWriter out;
    private Matcher mat = null;
    private static final long serialVersionUID = 1L;
    static String PATH = "c:\\Test\\AD_weblog.log";
    static String OUTFILE = "c:\\Test\\TestWrite.txt";
    static String suchwort = "145.254.32.119";
    private JTextArea text;
    private boolean found;
    private DefaultMutableTreeNode currentValue;
    public static void main(String[] args) throws FileNotFoundException, IOException {
        NewJFrame inst = new NewJFrame();
        inst.setSize(793, 646);
        inst.setVisible(true);
    }
    public NewJFrame() throws FileNotFoundException, IOException {
        super();
        initGUI();
    }
    private void initGUI() throws FileNotFoundException, IOException {
        this.s = new Scanner(new File(PATH));
        this.fstream = new FileWriter(OUTFILE);
        this.out = new BufferedWriter(fstream);
        setTitle("Search for IP Address in LogFiles");
        this.setLayout(null);
        try {
            // Close window
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            {
                jTextField1 = new JTextField();
                getContentPane().add(jTextField1);
                jTextField1.setText("");
                jTextField1.setBounds(7, 7, 462, 28);
            }
            {
                chooseLabel1 = new JLabel();
                getContentPane().add(chooseLabel1);
                chooseLabel1.setText("Choose the IP Address");
                chooseLabel1.setBounds(476, 7, 130, 28);
            }
            {
                searchButton1 = new JButton();
                getContentPane().add(searchButton1);
                searchButton1.setText("Search");
                searchButton1.setBounds(623, 7, 133, 28);
                searchButton1.addActionListener(new Ereignis());
            }
            {
                jSplitPane1 = new JSplitPane();
                getContentPane().add(jSplitPane1);
                jSplitPane1.setBounds(7, 42, 770, 539);
                {
                    text = new JTextArea();
                    DefaultMutableTreeNode root = new DefaultMutableTreeNode("IPAdressen");
                    jTree1 = new JTree(root);
                    String zweiterTeil = "";
                    while (s.hasNextLine()) {
                        String str = s.nextLine();
                        zweiterTeil = str.split("(\\d+)(\\.\\d+){3}")[1];
                        text.append(zweiterTeil);
                        text.append("\n");
                        mat = Pattern.compile("(\\d+)(\\.\\d+){3}").matcher(str);
                        while (mat.find()) {
                            ip = mat.group(0).toString();
                            traverse(jTree1);
                            if(found){
                                IPNode ipNode = (IPNode) currentValue.getUserObject();
                                ipNode.addContents(zweiterTeil);
                            }else{
                                root.add(new DefaultMutableTreeNode(new IPNode(ip, zweiterTeil)));
                            }
                        }
                    }
                    jTree1.expandRow(0);
                    jScrollPane1 = new JScrollPane(text);
                    jSplitPane1.add(jScrollPane1, JSplitPane.RIGHT);
                    jTree1.getSelectionModel().addTreeSelectionListener(new TreeSelectionListener() {
                        public void valueChanged(TreeSelectionEvent e) {
                            TreePath path = e.getNewLeadSelectionPath();
                            DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent();
                            String testNode = node.toString();
                            Object userNode = node.getUserObject();
                            if(userNode instanceof IPNode){
                                IPNode ipNode = (IPNode) userNode;
                                text.setText( ipNode.getContents() );
                            }
                            System.out.println(testNode);
                        }
                    });
                    jScrollPane2 = new JScrollPane(jTree1);
                    jSplitPane1.add(jScrollPane2, JSplitPane.LEFT);
                    // Grösse der linken Seite einstellen
                    jSplitPane1.setDividerLocation(0.2);
                }
            }
            {
                menuLeiste = new JMenuBar();
                setJMenuBar(menuLeiste);
                menuLeiste.setPreferredSize(new Dimension(785, 27));
                {
                    fileMenu1 = new JMenu();
                    menuLeiste.add(fileMenu1);
                    fileMenu1.setText("File");
                    {
                        openMenuItem1 = new JMenuItem();
                        fileMenu1.add(openMenuItem1);
                        openMenuItem1.setText("open");
                        openMenuItem1.addActionListener(new Ereignis());
                    }
                    {
                        jSeparator1 = new JSeparator();
                        fileMenu1.add(jSeparator1);
                    }
                    {
                        exitMenuItem2 = new JMenuItem();
                        fileMenu1.add(exitMenuItem2);
                        exitMenuItem2.setText("exit");
                        exitMenuItem2.addActionListener(new Ereignis());
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        //BufferedWriter schliessen
        try {
            out.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //Scanner schliessen
        s.close();
    }
    public class Ereignis implements ActionListener {
        //Create a file chooser
        final JFileChooser fc = new JFileChooser("c:/Test");
        public void actionPerformed(ActionEvent e) {
            //Handle open button action.
            if (e.getSource() == openMenuItem1) {
                int returnVal = fc.showOpenDialog(NewJFrame.this);
                if (returnVal == JFileChooser.APPROVE_OPTION) {
                    File file = fc.getSelectedFile();
                    System.out.println(file.getAbsolutePath());
                } else
                    System.out.println("Auswahl abgebrochen");
                //System.exit(1);
            }
            if (e.getSource() == exitMenuItem2) {
                //Close window
                dispose();
                System.exit(0);
            }
            if (e.getSource() == searchButton1) {
                ip = jTextField1.getText();
                System.out.println(ip);
                traverse(jTree1);
                if(found){
                    IPNode ipNode = (IPNode) currentValue.getUserObject();
                    text.setText( ipNode.getContents() );
                    jTree1.setSelectionPath(new TreePath(currentValue.getPath()));
                }
            }
        }
    }
    /*
     * Die Methoden "traverse" und "walk" dienen dazu den Baum zu durchlaufen
     * um eine bestimmte IP Addresse zu finden
     */
    public void traverse(JTree tree) {
        found = false;
        TreeModel model = tree.getModel();
        if (model != null) {
            Object root = model.getRoot();
            walk(model,root);
        } else
            System.out.println("Tree is empty.");
    }
    protected void walk(TreeModel model, Object o){
        int  cc;
        cc = model.getChildCount(o);
        LOOP: for( int i=0; i < cc; i++) {
            DefaultMutableTreeNode child = (DefaultMutableTreeNode) model.getChild(o, i );
            if (model.isLeaf(child) ){
                TreeNode[] ar = child.getPath();
                for (int j = 0; j < ar.length; j++) {
                    currentValue = (DefaultMutableTreeNode) ar[j];
                    if(currentValue.getUserObject() instanceof IPNode){
                        IPNode ipNode = (IPNode)currentValue.getUserObject();
                        String ipS = ipNode.getIp();
                        if(ipS.equals(ip)){
                            found = true;
                            break LOOP;
                        }
                    }
                }
            }else {
                walk(model,child );
            }
        }
    }
}
/*
 * IPNode
 *
 * kapselt die IP Addresse zusammen mit einer Liste der entsprechenden Seiteninhalte
 */
class IPNode{
    private String ip;
    private List<String> contents = new ArrayList<String>();
    public IPNode(String ip, String contents){
        this.ip = ip;
        addContents(contents);
    }
    public void addContents(String contents) {
        this.contents.add(contents);
    }
    public String getContents() {
        StringBuffer buf = new StringBuffer();
        for (String elem : contents) {
            buf.append(elem);
            buf.append("\n");
        }
        return buf.toString();
    }
    public String getIp() {
        return ip;
    }
    public String toString() {
        return ip;
    }
}
 

Lenzen

Aktives Mitglied
Ich bedanke mich ganz herzlich für die schnelle Hilfe. So schön hätte ich das Programm sicher nicht fertig bekommen. Und alles funktioniert so wie ich es gern haben wollte. :lol: *ju hu*
Nun kann ich endlich auf dem Server die Log-Dateien besser auswerten.
 

André Uhres

Top Contributor
Lenzen hat gesagt.:
..Habe nun das Problem, wenn ich mit dem FileChooser eine neue Datei wähle wird der Tree nicht aktualisiert (bzw. das Programm).

Ich habe bisher keine Möglichkeit gefunden, um dies zu realisieren. Wer kann mir helfen?

Mein Code:

Code:
package LogFileAuswerten_1;

/*
* NewJFrame.java
*/
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import java.util.List;
import java.util.regex.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.PlainDocument;
import javax.swing.tree.*;

public class NewJFrame extends JFrame {
 
	private static final long serialVersionUID = -378063720927050537L;
	private JMenuBar menuLeiste;
    private JTextField jTextField1;
    private JMenu fileMenu1;   
    private JButton searchButton1;
    private JLabel chooseLabel1;   
    private JSplitPane jSplitPane1;
    private JScrollPane jScrollPane1;
    private JScrollPane jScrollPane2;
    private JMenuItem exitMenuItem2;
    private JSeparator jSeparator1;
    private JMenuItem openMenuItem1;
    private JProgressBar jProgressBar1;  
    private DefaultMutableTreeNode root = new DefaultMutableTreeNode("DataToFind"); 
    private JTree jTree1;
    private String ip = "";
    private Scanner s;
    private long erg;
    private FileWriter fstream;
    private BufferedWriter out;
    private Matcher mat = null;           
    private JTextArea text;
    private boolean found;
    private DefaultMutableTreeNode currentValue;
    static String OUTFILE = "c:\\Test\\TestWrite.txt";
    static String suchwort = "2007-07-17 17:38:56.765";
//----------------------- Regex -----------------------------------------------------------------    

    //static String PATH = "C:\\Test\\md.Log";	
    
    /**    
     *  1. Regex Teil trifft z.B. 07/30/2007,08:43:38.256
     *  2. Regex Teil trifft z.B. 2007-07-17 17:38:57.625
     *  3. Regex Teil trifft z.B. trifft IP-Adressen
     */  
    
	// Regex zusammen
    static String REGEX = 
      "(\\d+\\/\\d+\\/\\d+\\W?\\s?\\d+[:/.]\\d+[:/.]\\d+([./.]\\d+)?)|" +
	  "((20)\\d+([- /.])\\d+([-/.])\\d+(\\s)\\d+[:/.]\\d+[:/.]\\d+[./.]\\d+)|" +
	  "((\\d+)(\\.\\d+){3})";
//-------------------------------------------------------------------------------------------------	

    
    public static void main(String[] args) throws FileNotFoundException, IOException {
        NewJFrame inst = new NewJFrame();
        inst.setSize(793, 672);
        inst.setVisible(true);
    }
    public NewJFrame() throws FileNotFoundException, IOException {
        super();
        initGUI();
    }
    private void initGUI() throws FileNotFoundException, IOException {
        this.s = new Scanner(new File("C:\\Test\\md.Log"));
//        this.fstream = new FileWriter(OUTFILE);
//        this.out = new BufferedWriter(fstream);
        setTitle("Search for Data in LogFiles");
        this.setLayout(null);
        try {
            // Close window
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            {
                jTextField1 = new JTextField();
                getContentPane().add(jTextField1);
                jTextField1.setText("");
                jTextField1.setBounds(7, 7, 462, 28);
            }
            {
                chooseLabel1 = new JLabel();
                getContentPane().add(chooseLabel1);
                chooseLabel1.setText("Choose the Data");
                chooseLabel1.setBounds(476, 7, 130, 28);
            }
            {
                searchButton1 = new JButton();
                getContentPane().add(searchButton1);
                searchButton1.setText("Search");
                searchButton1.setBounds(623, 7, 133, 28);
                searchButton1.addActionListener(new Ereignis());
            }
            {
                jSplitPane1 = new JSplitPane();
                getContentPane().add(jSplitPane1);
                jSplitPane1.setBounds(7, 42, 770, 539);
                {
                    text = new JTextArea();                      
                    jTree1 = new JTree(root);                    
                    long startTime = System.currentTimeMillis(); 
                    Einlesen es1 = new Einlesen();   
                    es1.einlesen(s, root);
                    long endTime = System.currentTimeMillis();                    
                    erg = (endTime-startTime); 
                    jTree1.expandRow(0);
                    jScrollPane1 = new JScrollPane(text);
                    jSplitPane1.add(jScrollPane1, JSplitPane.RIGHT);
                    jTree1.getSelectionModel().addTreeSelectionListener(new TreeSelectionListener() {
                        public void valueChanged(TreeSelectionEvent e) {
                            TreePath path = e.getNewLeadSelectionPath();
                            DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent();
                            String testNode = node.toString();
                            Object userNode = node.getUserObject();
                            if(userNode instanceof IPNode){
                                IPNode ipNode = (IPNode) userNode;
                                text.setText( ipNode.getContents() );
                            }
                            //Ausgabe des Baum Klicks
                            //System.out.println(testNode);
                        }
                    });
                    jScrollPane2 = new JScrollPane(jTree1);
                    jSplitPane1.add(jScrollPane2, JSplitPane.LEFT);
                    // Grösse der linken Seite einstellen
                    jSplitPane1.setDividerLocation(0.3);
                }
            }
            {
				chooseLabel1 = new JLabel();
				getContentPane().add(chooseLabel1);
				chooseLabel1.setText("Status");
				chooseLabel1.setBounds(7, 590, 56, 21);
			}
			{
				jProgressBar1 = new JProgressBar(0, (int)erg*30);		
				jProgressBar1.setValue(0);
				jProgressBar1.setStringPainted(true);
				getContentPane().add(jProgressBar1);
				jProgressBar1.setBounds(52, 590, 720, 21);
//----------------------------- Statusanzeige -------------------------------------------
                new Thread(new Runnable() {
					public void run() {
						for (int i = 1; i <= jProgressBar1.getMaximum(); ++i) {
							final int j = i;
							SwingUtilities.invokeLater(new Runnable() {
										public void run() {
											jProgressBar1.setValue(j);
										}
									});
						}
					}
				}).start();
//----------------------------------------------------------------------------------------  
			}
            {
                menuLeiste = new JMenuBar();
                setJMenuBar(menuLeiste);
                menuLeiste.setPreferredSize(new Dimension(785, 27));
                {
                    fileMenu1 = new JMenu();
                    menuLeiste.add(fileMenu1);
                    fileMenu1.setText("File");
                    {
                        openMenuItem1 = new JMenuItem();
                        fileMenu1.add(openMenuItem1);
                        openMenuItem1.setText("open");
                        openMenuItem1.addActionListener(new Ereignis());
                    }
                    {
                        jSeparator1 = new JSeparator();
                        fileMenu1.add(jSeparator1);
                    }
                    {
                        exitMenuItem2 = new JMenuItem();
                        fileMenu1.add(exitMenuItem2);
                        exitMenuItem2.setText("exit");
                        exitMenuItem2.addActionListener(new Ereignis());
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        //BufferedWriter schliessen
/*       try {
            out.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }*/
        
        //Scanner schliessen
        s.close();
    }
    
    /*
     * Die Methoden "traverse" und "walk" dienen dazu den Baum zu durchlaufen
     * um eine bestimmte IP Addresse zu finden
     */
    public void traverse(JTree tree) {
        found = false;
        TreeModel model = tree.getModel();
        if (model != null) {
            Object root = model.getRoot();
            walk(model,root);
        } else
            System.out.println("Tree is empty.");
    }
    protected void walk(TreeModel model, Object o){
        int  cc;
        cc = model.getChildCount(o);
        LOOP: for( int i=0; i < cc; i++) {
            DefaultMutableTreeNode child = (DefaultMutableTreeNode) model.getChild(o, i );
            if (model.isLeaf(child) ){
                TreeNode[] ar = child.getPath();
                for (int j = 0; j < ar.length; j++) {
                    currentValue = (DefaultMutableTreeNode) ar[j];
                    if(currentValue.getUserObject() instanceof IPNode){
                        IPNode ipNode = (IPNode)currentValue.getUserObject();
                        String ipS = ipNode.getIp();
                        if(ipS.equals(ip)){
                            found = true;
                            break LOOP;
                        }
                    }
                }
            }else {
                walk(model,child );
            }
        }
    }
    class Einlesen{
    	
    	private String zweiterTeil = "";   	
    	
    	public void einlesen(Scanner s, DefaultMutableTreeNode root){     		
    		while (s.hasNextLine()) {
                String str = s.nextLine();
                mat = Pattern.compile(REGEX).matcher(str);
                if (mat.find()){ 
                	//zweiterTeil = str.split(REGEX)[1];	
                	zweiterTeil = str.substring(mat.end());
                	//System.out.println(zweiterTeil);
             //------------------------------beim erneuten öffnen aktiv-----------   	
                	//text.setText(zweiterTeil);
                	text.append(zweiterTeil);   // kann auch auskommentiert werden gibt 
                	text.append("\n");             // Inhalt von neu eingelesener Datei mit aus
                }
                mat = Pattern.compile(REGEX).matcher(str);               
                while (mat.find()) {
                    ip = mat.group(0).toString();
                    //System.out.println(ip);
                    //----doppelte Daten werden zusammengefasst----
                    traverse(jTree1);
                    if(found){
                        IPNode ipNode = (IPNode) currentValue.getUserObject();
                        ipNode.addContents(zweiterTeil);
                    }else{                    	
                        root.add(new DefaultMutableTreeNode(new IPNode(ip, zweiterTeil)));   
                        
                    }
                }
            }
    	}
    }
    
    public class Ereignis implements ActionListener {
                 
        public void actionPerformed(ActionEvent e) {
        	// Create a file chooser
            JFileChooser fc = new JFileChooser("c:/Test");              
            // Handle open button action.
            if (e.getSource() == openMenuItem1) {
                int returnVal = fc.showOpenDialog(NewJFrame.this);
                if (returnVal == JFileChooser.APPROVE_OPTION) {
					File file = fc.getSelectedFile();
					//System.out.println(fc.getSelectedFile());					
					//PATH = file.getAbsolutePath().toString();						
					Thread loader = new FileLoader(file, new PlainDocument());
					loader.start();					                    
                   
					
					setVisible(true);
				/*	try {
						new NewJFrame();
						setVisible(true);
					} catch (FileNotFoundException e1){ // Datei gibt's nich'					
						System.err.println("Datei gibt's nicht!");
					} catch (IOException e1){ // Schreib-/Leseprobleme 					
						System.err.println("Schreib-/Leseprobleme!");
					}*/
					
				} else
                    System.out.println("Auswahl abgebrochen");
                //System.exit(1);
            }
            if (e.getSource() == exitMenuItem2) {
                //Close window
                dispose();
                System.exit(0);
            }
            if (e.getSource() == searchButton1) {
                ip = jTextField1.getText();
                //System.out.println(ip);                
                traverse(jTree1);
                if(found){
                    IPNode ipNode = (IPNode) currentValue.getUserObject();                   
                    text.setText( ipNode.getContents() );
                    jTree1.setSelectionPath(new TreePath(currentValue.getPath()));
                }        
//----------------------------- Statusanzeige -------------------------------------------
                new Thread(new Runnable() {
					public void run() {
						for (int i = 1; i <= jProgressBar1.getMinimum(); ++i) {
							final int j = i;
							SwingUtilities.invokeLater(new Runnable() {
										public void run() {
											jProgressBar1.setValue(j);
										}
									});
						}
					}
				}).start();
//----------------------------------------------------------------------------------------                
            }
        }
    }
/**
 * 
 * Datei wird im Hintergrund nachgeladen,
 * somit können auch große Datein schnell geöffnet werden.
 */   
    
    class FileLoader extends Thread {

		Document doc;
		File f;

		FileLoader(File f, Document doc) {
			setPriority(4);
			this.f = f;
			this.doc = doc;
		}

		public void run() {
			try {
				// try to start reading
				Reader in = new FileReader(f);
				char[] buff = new char[4096];
				int nch;
				while ((nch = in.read(buff, 0, buff.length)) != -1) {
					doc.insertString(doc.getLength(), new String(buff, 0, nch),
							null);
				}
				Scanner s1 = new Scanner(f);									
				Einlesen es = new Einlesen();
				es.einlesen(s1, root);

				// System.out.println(doc.getText(0, doc.getLength()));

			} catch (IOException e) {
				final String msg = e.getMessage();
				SwingUtilities.invokeLater(new Runnable() {
					public void run() {
						// JOptionPane.showMessageDialog(getFrame(),
						// "Could not open file: " + msg,
						// "Error opening file",
						// JOptionPane.ERROR_MESSAGE);
					}
				});
			} catch (BadLocationException e) {
				System.err.println(e.getMessage());
			}
		}
	}
}

/**
 * IPNode
 * 
 * kapselt die IP Addresse zusammen mit einer Liste der entsprechenden
 * Seiteninhalte
 */
class IPNode{
    private String ip;
    private List<String> contents = new ArrayList<String>();    
    public IPNode(String ip, String contents){
        this.ip = ip;
        addContents(contents);
    }
    public void addContents(String contents) {
        this.contents.add(contents);
    }
    public String getContents() {
        StringBuffer buf = new StringBuffer();        
        for (String elem : contents) {        	
            buf.append(elem);
            buf.append("\n");
        }
        return buf.toString();
    }
    public String getIp() {
        return ip;
    }
    public String toString() {
        return ip;
    }
}
Versuch mal, mit SwingUtilities.invokeLater einen reload vom Model zu machen:
Code:
...
public class NewJFrame extends JFrame {
...
    private void initGUI() throws FileNotFoundException, IOException {
...
                    jTree1.getSelectionModel().addTreeSelectionListener(new TreeSelectionListener() {
                        public void valueChanged(TreeSelectionEvent e) {
                            TreePath path = e.getNewLeadSelectionPath();
                            if(path==null)return ;//<------------- der reload nimmt die Selektion weg!
...
                        }
                    });
...
    }
...
    public class Ereignis implements ActionListener {
        public void actionPerformed(ActionEvent e) {
...
               Thread loader = new FileLoader(file, new PlainDocument());
               loader.start();               
               SwingUtilities.invokeLater(new Runnable() {
                   public void run() {
                       ((DefaultTreeModel)jTree1.getModel()).reload(root);//<-----------------------
                   }
               });
...
        }
    }
...
}
 

Lenzen

Aktives Mitglied
Funktioniert schon so wie ich es mir vorstelle.
Das Problem nun ist, dass ich erst nach dem zweiten Mal öffnen der Datei die Baumaktualisierung sehe und alle Einträge auf der "rechten Seite" dann doppelt vorhanden sind.




@ LordTerra
LordTerra hat gesagt.:
jaja wieder so nen bösser admin der die leute überwachen will *ggg*

Ich beabsichtige keine Leute zu überwachen. :)
 

André Uhres

Top Contributor
Lenzen hat gesagt.:
..Das Problem nun ist, dass ich erst nach dem zweiten Mal öffnen der Datei die Baumaktualisierung sehe und alle Einträge auf der "rechten Seite" dann doppelt vorhanden sind...
Achso, ich dachte, du würdest eine zweite Datei öffnen, die die erste ergänzt.
Wenn die neue Datei enfach die alte ersetzt, dann musst du natürlich, die bereits geladenen Daten zuerst löschen.
Für den JTree würde das zum Beispiel so gehen:
Code:
           // Handle open button action.
            if (e.getSource() == openMenuItem1) {
                int returnVal = fc.showOpenDialog(NewJFrame.this);
                if (returnVal == JFileChooser.APPROVE_OPTION) {
                    File file = fc.getSelectedFile();
                    root = new DefaultMutableTreeNode("DataToFind");//<---------------
                    jTree1.setModel(new DefaultTreeModel(root));    //<---------------
 

Lenzen

Aktives Mitglied
André Uhres hat gesagt.:
Achso, ich dachte, du würdest eine zweite Datei öffnen, die die erste ergänzt.
Wenn die neue Datei enfach die alte ersetzt, dann musst du natürlich, die bereits geladenen Daten zuerst löschen.
Für den JTree würde das zum Beispiel so gehen:

Ich wollte schon gern die alte Datei um den Inhalt der neuen im Baum ergänzen. Das hattest du schon richtig verstanden.
Nur das Problem anders ausgedrückt:
- wenn ich auf File -> Open -> ...(test.log wähle) ------> es erfolgt keine Aktualisierung
- wenn ich nun ein erneutes Mal auf File -> Open -> ...(test.log wähle) --------> (selbe Datei) wird der Baum ergänzt und die Einträge auf der "rechten Seite" erscheinen doppelt

[wenn beim 2. Mal einfach eine andere log-Datei gewählt wird erscheint folgendes: Exception in thread "Thread-4" java.lang.IllegalStateException: No match available
at java.util.regex.Matcher.end(Matcher.java:365)
at LogFileAuswerten_1.NewJFrame$Einlesen.einlesen(NewJFrame.java:252)
at LogFileAuswerten_1.NewJFrame$FileLoader.run(NewJFrame.java:362)]
 

Lenzen

Aktives Mitglied
So habe jetzt eine Lösung des Problems gefunden. Liegt daran das die Daten noch nicht da sind bevor der Baum aufgebaut wird. Habe das ganze jetzt sysnconisiert.
Der Code:


Code:
 public class Ereignis implements ActionListener {                 
        public void actionPerformed(ActionEvent e) {
...
                    if (returnVal == JFileChooser.APPROVE_OPTION) {
					File file = fc.getSelectedFile();				
					final Thread loader = new FileLoader(file, new PlainDocument());					
					//starting loader and calling wait() for thread loader
					synchronized(loader) {           //<------------------------------------------------
		                try {
		                	loader.start();		
		                	loader.wait();
		                } catch (InterruptedException ex) {}
		            } 					
					
					// Wird erst aufgerufen, wenn alle Aufgaben abgearbeitet wurden	
					SwingUtilities.invokeLater(new Runnable() {
		                   public void run() {		  
		                	  // notifying all threads of this class
		                	   synchronized(loader) {      //<------------------------------------------------
		                	   loader.notify();
		                	   }
		                       ((DefaultTreeModel)jTree1.getModel()).reload(root);		                      
		                   }
		               });     		
...
         }
  }
 

Lenzen

Aktives Mitglied
Nachdem ich mein kleines Programm etwas erweitert habe, funktioniert das aneinander hängen des nächsten Einlesevorgangs nicht mehr.
Ich habe das einlesen über eine xml Datei eingebaut.
Das leidige Synchronisationsproblem ist leider immer noch nicht abgeschlossen. Wer kann mir hier helfen?

Code:
package LogFileAuswerten_XML;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.text.Document;
import javax.swing.text.PlainDocument;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;


public class NewJFrame extends JFrame {
 
	private static final long serialVersionUID = -378063720927050537L;
	private JMenuBar menuLeiste;
    private JTextField jTextField1;
    private JMenu fileMenu1;   
    private JButton searchButton1;
    private JLabel chooseLabel1;   
    private JSplitPane jSplitPane1;
    private JScrollPane jScrollPane1;
    private JScrollPane jScrollPane2;
    private JMenuItem exitMenuItem2;
    private JSeparator jSeparator1;
    private JMenuItem openMenuItem1;
    private JProgressBar jProgressBar1;  
    private JPanel panel1;
    private JPanel panel2;
    private DefaultMutableTreeNode root = new DefaultMutableTreeNode("DataToFind"); 
    private JTree jTree1;
    private String ip = "";   
    private long erg; 
    private JTextArea text;
    private boolean found;
    private DefaultMutableTreeNode currentValue;  
    public String PATH = "";
    static String OUTFILE = "c:\\Test\\TestWrite.txt";
    static String suchwort = "2007-07-17 17:38:56.765";
   
 
//----------------------- Regex -----------------------------------------------------------------          
    /**    
     *  1. Regex Teil trifft z.B. 07/30/2007,08:43:38.256
     *  2. Regex Teil trifft z.B. 2007-07-17 17:38:57.625
     *  3. Regex Teil trifft z.B. trifft IP-Adressen
     *  4. Regex Teil trifft z.B. 13:32:18.0781 
     */  
    
	// Regex zusammen
    static String REGEX = 
      "(\\d+\\/\\d+\\/\\d+\\W?\\s?\\d+[:/.]\\d+[:/.]\\d+([./.]\\d+)?)|" +
	  "((20)\\d+([- /.])\\d+([-/.])\\d+(\\s)\\d+[:/.]\\d+[:/.]\\d+[./.]\\d+)|" +
	  "((\\d+)(\\.\\d+){3})|" +
	  "\\d+[:/.]\\d+[:/.]\\d+([./.]\\d+)\\s";
    Pattern pat= Pattern.compile(REGEX);
//-------------------------------------------------------------------------------------------------	

    
	       		        
	 
    
    public static void main(String[] args) throws IOException{
        NewJFrame inst;       
		try {
			inst = new NewJFrame();
			inst.setVisible(true);
		} catch (IOException e1) {					
			JOptionPane.showMessageDialog(null, "Error Reason:\n" +
					e1.getMessage()+
					"\n\nCan't find file! Wrong file choose in xml file." +
					"\nPush OK to choose the logfile", "FileNotFoundError",0);
			JFileChooser fc = new JFileChooser("c:/Test");
			fc.showOpenDialog( null ); 
			File file = fc.getSelectedFile();	
			if(file != null){ // hier wurd im File Chooser abgebrochen
				String s = file.toString();				
				inst = new NewJFrame(s);
				inst.setVisible(true);	
			}
		}  
        
    }
    public NewJFrame() throws FileNotFoundException, IOException {
        super();
        XML_Parser p = new XML_Parser();     	
		try {
			PATH = p.getPath();
		} catch (Exception eXML) {}	
        initGUI(PATH);
    }
    public NewJFrame(String s) throws FileNotFoundException, IOException {
        super();
        initGUI(s);            
    }
   
    private void initGUI(String PATH) throws FileNotFoundException, IOException {   
    				
        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(PATH)));
//        this.fstream = new FileWriter(OUTFILE);
//        this.out = new BufferedWriter(fstream);
        setTitle("Search for Data in LogFiles");
        setSize(872, 772);
        this.setLayout(new BorderLayout());     
        panel1 = new JPanel(new GridLayout(1,2));         
        try {
            // Close window
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            {
                jTextField1 = new JTextField();                            
                jTextField1.setText("");                  
                panel1.add(jTextField1);           
            }
            {
                chooseLabel1 = new JLabel();               
                chooseLabel1.setText("Choose the Data");               
                panel1.add(chooseLabel1);                 
            }
            {
                searchButton1 = new JButton();               
                searchButton1.setText("Search");
                searchButton1.setSize(28, 7);
                panel1.add(searchButton1);                
                getContentPane().add(panel1, BorderLayout.NORTH);
                searchButton1.addActionListener(new Ereignis());
            }
            {
                jSplitPane1 = new JSplitPane();
                getContentPane().add(jSplitPane1, BorderLayout.CENTER);               
                {
                    text = new JTextArea();                      
                    jTree1 = new JTree(root);                    
                    long startTime = System.currentTimeMillis(); 
                    Einlesen es1 = new Einlesen();   
                    es1.einlesen(br, root);
                    //es1.einlesen(s, root);
                    long endTime = System.currentTimeMillis();                    
                    erg = (endTime-startTime);                       
                    jTree1.expandRow(0);
                    jScrollPane1 = new JScrollPane(text);
                    jSplitPane1.add(jScrollPane1, JSplitPane.RIGHT);                   
                    jTree1.getSelectionModel().addTreeSelectionListener(new TreeSelectionListener() {
                        public void valueChanged(TreeSelectionEvent e) {
                            TreePath path = e.getNewLeadSelectionPath();                            
                            if(path==null)return ;//<------------- der reload nimmt die Selektion weg!
                            DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent();
                            //String testNode = node.toString();
                            Object userNode = node.getUserObject();
                            if(userNode instanceof IPNode){
                                IPNode ipNode = (IPNode) userNode;
                                text.setText(ipNode.getContents());                                 
                            }
                            //Ausgabe des Baum Klicks
                            //System.out.println(testNode);
                        }
                    });                   
                    jScrollPane2 = new JScrollPane(jTree1);
                    // Grösse der linken Seite einstellen
                    jSplitPane1.setDividerLocation(0.3);
                    jSplitPane1.add(jScrollPane2, JSplitPane.LEFT);
                    
                }
            }            
			{
				panel2 = new JPanel(new GridLayout(1,2)); 
				jProgressBar1 = new JProgressBar(0, (int)erg*30);		
				jProgressBar1.setValue(0);
				jProgressBar1.setStringPainted(true);
				panel2.add(jProgressBar1); 				
				getContentPane().add(panel2, BorderLayout.SOUTH);
//----------------------------- Statusanzeige -------------------------------------------
                new Thread(new Runnable() {
					public void run() {
						for (int i = 1; i <= jProgressBar1.getMaximum(); ++i) {
							final int j = i;
							SwingUtilities.invokeLater(new Runnable() {
										public void run() {
											jProgressBar1.setValue(j);
										}
									});
						}
					}
				}).start();
//----------------------------------------------------------------------------------------  
			}
			{
            	
				chooseLabel1 = new JLabel();				
				chooseLabel1.setText(" Status of Time to read the data from File");
				panel2.add(chooseLabel1); 				
			}
            {
                menuLeiste = new JMenuBar();
                setJMenuBar(menuLeiste);
                menuLeiste.setPreferredSize(new Dimension(785, 27));
                {
                    fileMenu1 = new JMenu();
                    menuLeiste.add(fileMenu1);
                    fileMenu1.setText("File");
                    {
                        openMenuItem1 = new JMenuItem();
                        fileMenu1.add(openMenuItem1);
                        openMenuItem1.setText("open");
                        openMenuItem1.addActionListener(new Ereignis());
                    }
                    {
                        jSeparator1 = new JSeparator();
                        fileMenu1.add(jSeparator1);
                    }
                    {
                        exitMenuItem2 = new JMenuItem();
                        fileMenu1.add(exitMenuItem2);
                        exitMenuItem2.setText("exit");
                        exitMenuItem2.addActionListener(new Ereignis());
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        //BufferedWriter schliessen
/*       try {
            out.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }*/
        
        //BufferedReader schliessen
        br.close();
    }
    
    /*
     * Die Methoden "traverse" und "walk" dienen dazu den Baum zu durchlaufen
     * um eine bestimmte IP Addresse zu finden
     */
    public void traverse(JTree tree) {
        found = false;
        TreeModel model = tree.getModel();
        if (model != null) {
            Object root = model.getRoot();
            walk(model,root);
        } else
            System.out.println("Tree is empty.");
    }
    protected void walk(TreeModel model, Object o){
        int  cc;
        cc = model.getChildCount(o);
        LOOP: for( int i=0; i < cc; i++) {
            DefaultMutableTreeNode child = (DefaultMutableTreeNode) model.getChild(o, i );
            if (model.isLeaf(child) ){
                TreeNode[] ar = child.getPath();
                for (int j = 0; j < ar.length; j++) {
                    currentValue = (DefaultMutableTreeNode) ar[j];
                    if(currentValue.getUserObject() instanceof IPNode){
                        IPNode ipNode = (IPNode)currentValue.getUserObject();
                        String ipS = ipNode.getIp();
                        if(ipS.equals(ip)){
                            found = true;
                            break LOOP;
                        }
                    }
                }
            }else {
                walk(model,child );
            }
        }
    }
    class Einlesen{
    	
    	private String zweiterTeil = "";   	
    	
    	public void einlesen(BufferedReader br, DefaultMutableTreeNode root) throws IOException{     
    		String str;    		
    		while ((str=br.readLine())!= null) {          			
             //------------------------------beim erneuten öffnen aktiv-----------   	
                	//text.setText(zweiterTeil);
                	//text.append(zweiterTeil);
                	//text.append("\n");
                //}
    			// 	versucht, den ganzen input mit dem Muster zu matchen
    		    Matcher mat = pat.matcher(str);       
                while(mat.find()) {                	
                    // ip = mat.group(0).toString();
                    ip = str.substring(mat.start(), mat.end());
                	//System.out.println(ip);
                    zweiterTeil = str.substring(mat.end());                  
                    //----doppelte Daten werden zusammengefasst----
                    traverse(jTree1);
                    if(found){
                        IPNode ipNode = (IPNode) currentValue.getUserObject();
                        ipNode.addContents(zweiterTeil);                       
                    }else{                    	
                        root.add(new DefaultMutableTreeNode(new IPNode(ip, zweiterTeil)));                       
                    }
                }                
            }    	
    		 DefaultMutableTreeNode child;
             child = new DefaultMutableTreeNode("next File ...");
             root.add(child);             
    	}
    }
    
    public class Ereignis implements ActionListener {                 
    	
        public void actionPerformed(ActionEvent e) {
        	// Create a file chooser
            JFileChooser fc = new JFileChooser("d:/Test");              
            // Handle open button action.
            if (e.getSource() == openMenuItem1) {
                int returnVal = fc.showOpenDialog(NewJFrame.this);
                if (returnVal == JFileChooser.APPROVE_OPTION) {
                    File file = fc.getSelectedFile();            
                    final Thread loader = new FileLoader(file, new PlainDocument());               
                    //starting loader and calling wait() for thread loader
                    synchronized(loader) {           //<------------------------------------------------
                           try {
                              loader.start();      
                              loader.wait();                                 
                           } catch (InterruptedException ex) {}
                       }                
                    
                    // Wird erst aufgerufen, wenn alle Aufgaben abgearbeitet wurden   
                    SwingUtilities.invokeLater(new Runnable() {
                              public void run() {       
                                // notifying all threads of this class
                                 synchronized(loader) {      //<------------------------------------------------
                                 loader.notify();
                                 }
                                  ((DefaultTreeModel)jTree1.getModel()).reload(root);                           
                              }
                          });   
					setVisible(true);									
				} else
                    System.out.println("Auswahl abgebrochen");
                //System.exit(1);
            }
            if (e.getSource() == exitMenuItem2) {
                //Close window
                dispose();
                System.exit(0);
            }
            if (e.getSource() == searchButton1) {
                ip = jTextField1.getText();
                //System.out.println(ip);                
                traverse(jTree1);
                if(found){
                    IPNode ipNode = (IPNode) currentValue.getUserObject();                   
                    text.setText( ipNode.getContents() );
                    jTree1.setSelectionPath(new TreePath(currentValue.getPath()));
                }                    
                searchButton1.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                      for (int i = 0; i > 1000; i++) {
                          // Als Beispiel für eine
                          // rechenintensive Operation
                          try { Thread.sleep(1000); } 
                           catch (InterruptedException ex) {}
                          jProgressBar1.setValue(i);
                      }
                    }});                
            }
        }
    }
/**
 * 
 * Datei wird im Hintergrund nachgeladen,
 * somit können auch große Datein schnell geöffnet werden.
 */   
    
    class FileLoader extends Thread {

		Document doc;
		File f;

		FileLoader(File f, Document doc) {
			setPriority(5);
			this.f = f;
			this.doc = doc;
		}

		public void run() {
			try {						
				// try to start reading
				Reader in = new FileReader(f);
				char[] buff = new char[4096];
				int nch;					
				while ((nch = in.read(buff, 0, buff.length)) != -1) {
					doc.insertString(doc.getLength(), new String(buff, 0, nch),	null);									
				}				
				BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(f)));
				Einlesen es = new Einlesen();				
				es.einlesen(br, root);					
				// BufferedReader schliessen
				br.close();
			} catch (Exception e) {} 
		}
		
	}
}

/**
 * IPNode
 * 
 * kapselt die IP Addresse zusammen mit einer Liste der entsprechenden
 * Seiteninhalte
 */
class IPNode {
	private String ip;
	private List<String> contents = new ArrayList<String>();

	public IPNode(String ip, String contents) {
		this.ip = ip;
		addContents(contents);
	}

	public void addContents(String contents) {
		this.contents.add(contents);
	}

	public String getContents() {
		StringBuilder bu = new StringBuilder();
		for (String elem : contents) {
			bu.append(elem);
			bu.append("\n");
		}
		return bu.toString();
	}

	public String getIp() {
		return ip;
	}

	public String toString() {
		return ip;
	}
}

Code:
package LogFileAuswerten_XML;

import java.io.File;
import java.io.IOException;

import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.xml.parsers.*;

import org.w3c.dom.Document;
import org.xml.sax.SAXException;

public class XML_Parser {	
	
	private String s = "";
	
	
	public String getPath() throws ParserConfigurationException{
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = factory.newDocumentBuilder();
		Document document = null;
		try {
			document = builder.parse(new File("SetPath.xml"));
		} catch (IOException e1) {		
			JOptionPane.showMessageDialog(null, e1.getMessage()+
					"\n\nCan't find xml file! " +
					"\nPush OK to choose the logfile", "FileNotFoundError",0);
			JFileChooser fc = new JFileChooser("c:/Test");
			fc.showOpenDialog( null ); 
			File file = fc.getSelectedFile();
			s = file.toString();
			return s;
		} catch (SAXException e) {			
			return e.getMessage();
		}	 	
		s = document.getFirstChild().getTextContent().trim();		
		return s;
	}	
	
}

Code:
<?xml version="1.0" ?> 
<SetPath> 
    <first> 
        <path>D:\Test\kurz.log</path>                
    </first>         
</SetPath>
 

André Uhres

Top Contributor
Lenzen hat gesagt.:
..funktioniert das aneinander hängen des nächsten Einlesevorgangs nicht mehr..
Bitte beschreib dein Problem genauer.
Wir wissen zwar jetzt, dass es um "das aneinander hängen des nächsten Einlesevorgangs" geht,
und dass dabei irgendetwas nicht funktioniert, aber was genau ist das Fehlverhalten? ???:L

Du kannst auch Testdateien hochladen: Eigene Dateien und den Link darauf hier posten.
Das wird die Fehlersuche ungemein erleichtern.
 

Lenzen

Aktives Mitglied
Wenn ich eine Datei einlese wird diese ganz normal eingelesen. Den Abschluss des Baums bildet der Eintrag "next File ..."
Will ich aber nun eine weitere Datei einlesen, wird mir der Inhalt nicht angezeigt, sondern nur mein Abschluss unter den bereits bestehenden gesetzt.
Ich habe deinen Link benutzt, um die 3 Dateien hochzuladen. Hätte gern noch ein Bildschirmdruck eingefügt --> das funktionierte aber leider nicht.

Ich versuche das mal darzustellen.

Data to find
:
:---10.12.1.3
:---10.23.2.7
:---10.34.7.1
:---next File ...
:---next File ...

Nach dem ersten einlesen wird der Baum richtig aufgebaut und "next File ..." angehängt. Das erneute einlesen über den File Chooser, erweitert den Baum leider nur um meinen Abschluss.
 

André Uhres

Top Contributor
Lenzen hat gesagt.:
.. Das erneute einlesen über den File Chooser, erweitert den Baum leider nur um meinen Abschluss.
Ich würde sagen: erweitert den Baum glücklicherweise nur um den Abschluss, denn
Code:
//----doppelte Daten werden zusammengefasst----
Jedenfalls sind in den Testdateien die IP Adressen doppelt :wink:
 

Lenzen

Aktives Mitglied
Oh je.... denn hab ich aufgrund meiner "tollen Testdaten" das nicht machen können. :roll:

Sorry nochmal! Dann geht ja doch alles.
Oh man, dann hätte ich mir und euch allen viel Zeit ersparen können.

Danke André für deine Hilfe.
 

Lenzen

Aktives Mitglied
Danke, dass sieht schon klasse aus.
Ich finde auch, dass du das Layout besser hinbekommen hast als ich. Nun stimmt auch das Verhältnis von Suchleiste und Button. :)
Danke dir André.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Problem bei der Aktualisierung des Frames AWT, Swing, JavaFX & SWT 6
kodela Swing Problem mit sofortiger Aktualisierung eine Textfeldes AWT, Swing, JavaFX & SWT 8
P Problem bei Aktualisierung eines JPanels AWT, Swing, JavaFX & SWT 2
M swt - problem mit aktualisierung des tableeditors AWT, Swing, JavaFX & SWT 3
R Thread-Problem (Aktualisierung von JLabel-Komponente) AWT, Swing, JavaFX & SWT 9
M problem mit textfield-aktualisierung AWT, Swing, JavaFX & SWT 4
G JScrollPane problem mit aktualisierung der daten AWT, Swing, JavaFX & SWT 3
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
H 2D-Grafik Problem mit Paint AWT, Swing, JavaFX & SWT 1
S Layout - Problem AWT, Swing, JavaFX & SWT 1
Tassos JavaFX/Problem mit der Maussteuerung in Stackpane AWT, Swing, JavaFX & SWT 7
sserio Java Fx - Problem AWT, Swing, JavaFX & SWT 3
A Problem Spiel auf Panel der GUI zu bringen AWT, Swing, JavaFX & SWT 1
A JavaFX Controller Problem AWT, Swing, JavaFX & SWT 1
TheWhiteShadow JavaFX ListView Problem beim Entfernen von Elementen AWT, Swing, JavaFX & SWT 1
E LayoutManager Welcher Layout-Mix löst mein Problem? AWT, Swing, JavaFX & SWT 3
Umb3rus JavaFX Problem mit PropertyValueFactory: can not read from unreadable property AWT, Swing, JavaFX & SWT 1
T Problem mit paintComponent() AWT, Swing, JavaFX & SWT 17
AmsananKING Java Menü-Problem AWT, Swing, JavaFX & SWT 1
K JavaFX Resizing-Problem beim BorderLayout (Center Component) beim Arbeiten mit mehreren FXMLs AWT, Swing, JavaFX & SWT 2
G Instance OF Problem AWT, Swing, JavaFX & SWT 9
FrittenFritze Ein Problem mit der CSSBox, die Größe wird nicht angepasst AWT, Swing, JavaFX & SWT 5
M Problem mit dem Anzeigen von Frames im Vordergrund AWT, Swing, JavaFX & SWT 5
Badebay Problem mit JButton AWT, Swing, JavaFX & SWT 2
newJavaGeek Grid-Layout problem AWT, Swing, JavaFX & SWT 7
J JavaFX Löschen im Tabelview macht Problem AWT, Swing, JavaFX & SWT 15
JavaTalksToMe JavaFx ExekutorService Problem AWT, Swing, JavaFX & SWT 2
Zrebna Problem bei Eventhandling (Value soll nach jedem erneutem Klick gelöscht werden) AWT, Swing, JavaFX & SWT 4
B Problem mit JavaFX AWT, Swing, JavaFX & SWT 5
J css Problem AWT, Swing, JavaFX & SWT 5
B JavaFX habe mein Problem fett markiert AWT, Swing, JavaFX & SWT 2
A Swing Filter-Problem AWT, Swing, JavaFX & SWT 1
temi JavaFX Problem mit IntelliJ und JavaFx 11 unter XUbuntu AWT, Swing, JavaFX & SWT 3
L Java FX Problem mit Ubuntu 18 und JavaFx AWT, Swing, JavaFX & SWT 27
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
kodela Swing Problem mit Warten-Dialog AWT, Swing, JavaFX & SWT 16
B JavaFx Scene Builder Problem AWT, Swing, JavaFX & SWT 2
B [Problem] Java öffnet Word-Datein nicht AWT, Swing, JavaFX & SWT 14
T DataBinding Problem AWT, Swing, JavaFX & SWT 5
Blender3D Problem mit € Symbol Font Gotham Windows 10 Swing AWT, Swing, JavaFX & SWT 11
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
J Problem mit Platfrom run later AWT, Swing, JavaFX & SWT 15
J Problem mit Platfrom run later AWT, Swing, JavaFX & SWT 0
D Swing SwingUtils / Thread Problem AWT, Swing, JavaFX & SWT 3
L JavaFX Problem beim Aufrufen einer Methode AWT, Swing, JavaFX & SWT 5
T Swing Problem mit Datum und FormattedTextField AWT, Swing, JavaFX & SWT 2
S AWT Java print dialog Problem AWT, Swing, JavaFX & SWT 0
olfibits JavaFX Problem mit HTMLEditor AWT, Swing, JavaFX & SWT 0
W SWT hover-background-problem with first column in TreeViewer AWT, Swing, JavaFX & SWT 0
M Problem mit Add JScrollPane AWT, Swing, JavaFX & SWT 25
Mario1409 Swing JTextArea scroll Problem AWT, Swing, JavaFX & SWT 0
N Swing Problem mit loop AWT, Swing, JavaFX & SWT 2
S Swing Problem mit Button und ActionListener AWT, Swing, JavaFX & SWT 5
S Swing & Clean und build Problem AWT, Swing, JavaFX & SWT 12
S JLabel setText() Problem AWT, Swing, JavaFX & SWT 6
I 2D-Grafik Problem beim Ändern der Farbe eine 2d Objekts AWT, Swing, JavaFX & SWT 3
G Swing Splitpane Problem AWT, Swing, JavaFX & SWT 1
F Problem mit der FXML Rectangle Shape AWT, Swing, JavaFX & SWT 2
N JavaFX Stranges Problem mit der Autoscroll-Eigenschaft von Textareas AWT, Swing, JavaFX & SWT 0
E Java FX FXML Problem mit html Scriptausführung AWT, Swing, JavaFX & SWT 2
J JavaFX Intersect Problem mit Shapes AWT, Swing, JavaFX & SWT 10
R JavaFX MediaPlayer AVI-Problem AWT, Swing, JavaFX & SWT 1
M Swing Problem mit ListCellRenderer AWT, Swing, JavaFX & SWT 7
D Problem mit JTable AWT, Swing, JavaFX & SWT 1
F GUI Auflösung ändern - Koordianten und Proportions Problem AWT, Swing, JavaFX & SWT 21
J Problem mit Button darstellung AWT, Swing, JavaFX & SWT 23
M Problem mit Layoutmanagern... Hilfe wäre sehr nett. AWT, Swing, JavaFX & SWT 2
S 2D-Grafik Problem mit Variablen AWT, Swing, JavaFX & SWT 4
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
M Swing AttributiveCellTableModel addRow() Problem AWT, Swing, JavaFX & SWT 1
J Swing Problem mit Graphics Methode AWT, Swing, JavaFX & SWT 4
N JavaFX Problem mit table multiple selection AWT, Swing, JavaFX & SWT 5
K CheckBox Problem AWT, Swing, JavaFX & SWT 5
Grevak DisplayMode Problem seit Windows 10 AWT, Swing, JavaFX & SWT 2
S Swing Eigene JComboBox Problem! AWT, Swing, JavaFX & SWT 1
B Swing Problem mit Bildpfad AWT, Swing, JavaFX & SWT 4
N Swing Problem beim Scrollen mit JScrollPane AWT, Swing, JavaFX & SWT 6
V Graphics g - drawOval problem mit background AWT, Swing, JavaFX & SWT 1
C AWT Problem mit Protokol Fenster AWT, Swing, JavaFX & SWT 0
M Swing pack() Problem mit Taskleiste AWT, Swing, JavaFX & SWT 4
N Swing Choice- Problem! AWT, Swing, JavaFX & SWT 8
Q "AWT-EventQueue-0" Exception Problem AWT, Swing, JavaFX & SWT 4
D jButton Problem, ein Rieser Button bedeckt das ganze frame AWT, Swing, JavaFX & SWT 1
A Problem: repaint() - Schleife AWT, Swing, JavaFX & SWT 3
J Anfänger GUI Problem bei der Ausführung eines sehr einfachen Programms AWT, Swing, JavaFX & SWT 2
P AWT Problem mit Platzierung (GridBagLayout) AWT, Swing, JavaFX & SWT 2
N Swing JTree Problem beim erstellen der Knoten AWT, Swing, JavaFX & SWT 0
N Swing CardLayout: Problem beim Wechsel zwischen den JPanels AWT, Swing, JavaFX & SWT 3
A Mini-Menu-Schriften. Ein Problem bei hohen DPI Zahlen AWT, Swing, JavaFX & SWT 2
Z Canvas in Frame einfügen. Problem mit 4-Gewinnt AWT, Swing, JavaFX & SWT 1
C Thread-/ Simulations- Problem AWT, Swing, JavaFX & SWT 18
G Swing Setvisible problem AWT, Swing, JavaFX & SWT 1
J JTabbedPane: close Button Problem AWT, Swing, JavaFX & SWT 2
Tom299 JavaFX -> fxmlLoader -> getResourceAsStream Problem AWT, Swing, JavaFX & SWT 1
T Problem: ComboBox und addItem AWT, Swing, JavaFX & SWT 5
M JTextArea wird nicht aktualisiert (ActionListener-Problem) AWT, Swing, JavaFX & SWT 1
T LayoutManager LookAndFeel-Problem AWT, Swing, JavaFX & SWT 4
F Problem mit Implementierung von Kollisionsabfrage AWT, Swing, JavaFX & SWT 5
vodkaz (javafx) Image Problem AWT, Swing, JavaFX & SWT 2
T Problem beim Zeichnen von Rechteck AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben