in JScrollPane springen

Status
Nicht offen für weitere Antworten.

oschli

Mitglied
Hi Leute,

ich hätte gerne neben einer JScrollPane ein Funktion, die wie in Eclipse neben der Laufleiste die Warnungen anzeigt
und beim draufklicken an die gewünschte Stelle der JScrollPane springt.

Gibt es da etwas das man verwenden kann?
 

oschli

Mitglied
Hi hab jetzt alle Daten in einer JTable zusammengefasst.
Leider hab ich es noch nicht hinbekommen dass ich anstelle des JLabes "Warning" einen kleinen Button hab der die JSrollPane auf die richtige Zeile setzt.
Ist das überhaupt möglich? Oder sollte ich lieber eine JSrollBar nehmen?



Code:
import java.awt.*;
import javax.swing.*;



import java.awt.Color;
import java.util.Vector;



public class MySMTPReport {
	
	public MySMTPReport(){
		pingsucces=0;
		pingfailed=0;
		percent=0;
		total=0;
		columnNames = new Vector<String>();
		columnNames.add("Date");
		columnNames.add("Time");
		columnNames.add("State");
		columnNames.add("Replytime");
		data = new Vector<Vector>(); 
		southeast = new JPanel();
		southeast.setPreferredSize(new Dimension(50,200));
		
	}
	
	public void analyzePing(String date, String time,boolean succes, String replytime){
		Vector<Object> row = new Vector<Object>(3);
		if(succes){
	  		pingsucces++;
	  		total++;
	  		row.add(date); 
	  		row.add(time);
	  		row.add("Succeded");
	  		row.add(replytime);
	  		

		}
	  	 else{
	  		pingfailed++;
	  		total++;
	  		row.add(date); 
	  		row.add(time);
	  		row.add("Failed");
	  		row.add(replytime);
	  		JLabel test = new JLabel("Warning");
			southeast.add(test);
	  	 }
		data.addElement( row );
	}
	
	public void generateSMTPChart(){
		north = new JPanel();
		north.setLayout(new BorderLayout());
		north.setBorder(BorderFactory.createTitledBorder("Summary"));
		
		northwest = new JPanel();
		northwest.setLayout(new GridLayout(3,1,0,5));
		JLabel totallabel = new JLabel("Total count of ping: "+total);
		JLabel succeslabel = new JLabel("Succeded: "+pingsucces);
		JLabel failedlabel = new JLabel("Failed: "+pingfailed);
		northwest.add(totallabel);
		northwest.add(succeslabel);
		northwest.add(failedlabel);
		
		percent=pingsucces*100/total;
						
		north.add(northwest,BorderLayout.WEST);
		
		south = new JPanel();
		south.setLayout(new BorderLayout());
        south.setPreferredSize(new Dimension(200,200));
        
        reporttable=new JTable(data, columnNames);
		scroll= new JScrollPane(reporttable);
		scroll.setBackground(Color.GRAY);
		
		
		south.add(scroll,BorderLayout.WEST);
		south.add(southeast, BorderLayout.EAST);
		
		
		smtppanel=new JPanel();
		smtppanel.setLayout(new BorderLayout());
		smtppanel.add(north,BorderLayout.NORTH);
		smtppanel.add(south,BorderLayout.CENTER);
		
		
		
	}
	
	public JPanel getSMTP(){
		
		return  smtppanel;
	}

	
	private JPanel smtppanel;
	
	private JPanel north;
	private JPanel northwest;
	private ChartPanel northeast;
	
	private JPanel south;
	private JScrollPane scroll;
	private JTable reporttable;
	private Vector<String> columnNames;
    private Vector<Vector> data ;
	private JPanel southeast;
	
	private int pingsucces;
	private int pingfailed;
	private double percent;
	private int total;
	
	

}

Driver:
Code:
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.*;

public class Driver extends JFrame{
	
	public Driver(JPanel panel){

		class CMyWindowListener extends WindowAdapter {
			public void windowClosing(WindowEvent e){
				System.exit(0);
			}
		}
		setContentPane(panel);
		setSize(625, 510);
		show();
	}
	
	
		
		

	

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		MySMTPReport report = new MySMTPReport();
		report.analyzePing("01-01-2006", "00:00", true, "0.12");
		report.analyzePing("01-01-2006", "00:30", true, "0.86");
		report.analyzePing("01-01-2006", "01:00", true, "0.712");
		report.analyzePing("01-01-2006", "01:30", true, "0.486");
		report.analyzePing("01-01-2006", "02:00", true, "0.35");
		report.analyzePing("01-01-2006", "02:30", true, "0.12");
		report.analyzePing("01-01-2006", "03:00", true, "0.95");
		report.analyzePing("01-01-2006", "03:30", true, "0.36");
		report.analyzePing("01-01-2006", "04:00", true, "0.812");
		report.analyzePing("01-01-2006", "04:30", true, "0.286");
		report.analyzePing("01-01-2006", "05:00", true, "0.12");
		report.analyzePing("01-01-2006", "05:30", true, "0.86");
		report.analyzePing("01-01-2006", "06:00", true, "0.412");
		report.analyzePing("01-01-2006", "06:30", true, "0.786");
		report.analyzePing("01-01-2006", "07:00", true, "0.12");
		report.analyzePing("01-01-2006", "07:30", true, "0.86");
		report.analyzePing("01-01-2006", "08:00", true, "0.712");
		report.analyzePing("01-01-2006", "08:30", true, "0.865");
		report.analyzePing("01-01-2006", "09:00", true, "0.12");
		report.analyzePing("01-01-2006", "09:30", true, "0.16");
		report.analyzePing("01-01-2006", "10:00", true, "0.22");
		report.analyzePing("01-01-2006", "10:30", true, "0.12");
		report.analyzePing("01-01-2006", "11:00", true, "0.32");
		report.analyzePing("01-01-2006", "11:30", true, "0.586");
		report.analyzePing("01-01-2006", "12:00", true, "0.13658");
		report.analyzePing("01-01-2006", "12:30", true, "0.85");
		report.analyzePing("01-01-2006", "13:00", true, "0.13");
		report.analyzePing("01-01-2006", "13:30", true, "0.68");
		report.analyzePing("01-01-2006", "14:00", true, "0.89");
		report.analyzePing("01-01-2006", "14:30", true, "0.65");
		report.analyzePing("01-01-2006", "15:00", true, "0.15");
		report.analyzePing("01-01-2006", "15:30", true, "0.86");
		report.analyzePing("01-01-2006", "16:00", true, "0.12");
		report.analyzePing("01-01-2006", "16:30", true, "0.856");
		report.analyzePing("01-01-2006", "17:00", true, "0.5");
		report.analyzePing("01-01-2006", "17:30", true, "0.86");
		report.analyzePing("01-01-2006", "18:00", true, "0.12");
		report.analyzePing("01-01-2006", "18:30", true, "0.846");
		report.analyzePing("01-01-2006", "19:00", true, "0.12");
		report.analyzePing("01-01-2006", "19:30", true, "0.826");
		report.analyzePing("01-01-2006", "20:00", true, "0.192");
		report.analyzePing("01-01-2006", "20:30", true, "0.846");
		report.analyzePing("01-01-2006", "21:00", false, "100");
		report.analyzePing("01-01-2006", "21:30", true, "0.866");
		report.analyzePing("01-01-2006", "22:00", true, "0.142");
		report.analyzePing("01-01-2006", "22:30", true, "0.786");
		report.analyzePing("01-01-2006", "23:00", true, "0.182");
		report.analyzePing("01-01-2006", "23:30", true, "0.786");
		
		
		report.analyzePing("02-01-2006", "00:00", true, "0.12");
		report.analyzePing("02-01-2006", "00:30", true, "0.86");
		report.analyzePing("02-01-2006", "01:00", true, "0.712");
		report.analyzePing("02-01-2006", "01:30", true, "0.486");
		report.analyzePing("02-01-2006", "02:00", false, "100");
		report.analyzePing("02-01-2006", "02:30", false, "100");
		report.analyzePing("02-01-2006", "03:00", false, "100");
		report.analyzePing("02-01-2006", "03:30", false, "100");
		report.analyzePing("02-01-2006", "04:00", false, "100");
		report.analyzePing("02-01-2006", "04:30", false, "100");
		report.analyzePing("02-01-2006", "05:00", true, "0.12");
		report.analyzePing("02-01-2006", "05:30", true, "0.86");
		report.analyzePing("02-01-2006", "06:00", true, "0.412");
		report.analyzePing("02-01-2006", "06:30", true, "0.786");
		report.analyzePing("02-01-2006", "07:00", true, "0.12");
		report.analyzePing("02-01-2006", "07:30", true, "0.86");
		report.analyzePing("02-01-2006", "08:00", true, "0.712");
		report.analyzePing("02-01-2006", "08:30", true, "0.865");
		report.analyzePing("02-01-2006", "09:00", true, "0.12");
		report.analyzePing("02-01-2006", "09:30", true, "0.16");
		report.analyzePing("02-01-2006", "10:00", true, "0.22");
		report.analyzePing("02-01-2006", "10:30", true, "0.12");
		report.analyzePing("02-01-2006", "11:00", true, "0.32");
		report.analyzePing("02-01-2006", "11:30", true, "0.586");
		report.analyzePing("02-01-2006", "12:00", true, "0.13658");
		report.analyzePing("02-01-2006", "12:30", true, "0.85");
		report.analyzePing("02-01-2006", "13:00", true, "0.13");
		report.analyzePing("02-01-2006", "13:30", true, "0.68");
		report.analyzePing("02-01-2006", "14:00", true, "0.89");
		report.analyzePing("02-01-2006", "14:30", true, "0.65");
		report.analyzePing("02-01-2006", "15:00", true, "0.15");
		report.analyzePing("02-01-2006", "15:30", true, "0.86");
		report.analyzePing("02-01-2006", "16:00", true, "0.12");
		report.analyzePing("02-01-2006", "16:30", true, "0.856");
		report.analyzePing("02-01-2006", "17:00", true, "0.5");
		report.analyzePing("02-01-2006", "17:30", true, "0.86");
		report.analyzePing("02-01-2006", "18:00", true, "0.12");
		report.analyzePing("02-01-2006", "18:30", true, "0.846");
		report.analyzePing("02-01-2006", "19:00", true, "0.12");
		report.analyzePing("02-01-2006", "19:30", true, "0.826");
		report.analyzePing("02-01-2006", "20:00", true, "0.192");
		report.analyzePing("02-01-2006", "20:30", true, "0.846");
		report.analyzePing("02-01-2006", "21:00", false, "100");
		report.analyzePing("02-01-2006", "21:30", true, "0.866");
		report.analyzePing("02-01-2006", "22:00", true, "0.142");
		report.analyzePing("02-01-2006", "22:30", true, "0.786");
		report.analyzePing("02-01-2006", "23:00", true, "0.182");
		report.analyzePing("02-01-2006", "23:30", true, "0.786");
		
		report.analyzePing("03-01-2006", "00:00", true, "0.12");
		report.analyzePing("03-01-2006", "00:30", true, "0.86");
		report.analyzePing("03-01-2006", "01:00", true, "0.712");
		report.analyzePing("03-01-2006", "01:30", true, "0.486");
		report.analyzePing("03-01-2006", "02:00", true, "0.35");
		report.analyzePing("03-01-2006", "02:30", true, "0.12");
		report.analyzePing("03-01-2006", "03:00", true, "0.95");
		report.analyzePing("03-01-2006", "03:30", true, "0.36");
		report.analyzePing("03-01-2006", "04:00", true, "0.812");
		report.analyzePing("03-01-2006", "04:30", true, "0.286");
		report.analyzePing("03-01-2006", "05:00", true, "0.12");
		report.analyzePing("03-01-2006", "05:30", true, "0.86");
		report.analyzePing("03-01-2006", "06:00", true, "0.412");
		report.analyzePing("03-01-2006", "06:30", true, "0.786");
		report.analyzePing("03-01-2006", "07:00", true, "0.12");
		report.analyzePing("03-01-2006", "07:30", true, "0.86");
		report.analyzePing("03-01-2006", "08:00", true, "0.712");
		report.analyzePing("03-01-2006", "08:30", true, "0.865");
		report.analyzePing("03-01-2006", "09:00", true, "0.12");
		report.analyzePing("03-01-2006", "09:30", true, "0.16");
		report.analyzePing("03-01-2006", "10:00", true, "0.22");
		report.analyzePing("03-01-2006", "10:30", true, "0.12");
		report.analyzePing("03-01-2006", "11:00", true, "0.32");
		report.analyzePing("03-01-2006", "11:30", true, "0.586");
		report.analyzePing("03-01-2006", "12:00", true, "0.13658");
		report.analyzePing("03-01-2006", "12:30", true, "0.85");
		report.analyzePing("03-01-2006", "13:00", true, "0.13");
		report.analyzePing("03-01-2006", "13:30", true, "0.68");
		report.analyzePing("03-01-2006", "14:00", true, "0.89");
		report.analyzePing("03-01-2006", "14:30", true, "0.65");
		report.analyzePing("03-01-2006", "15:00", true, "0.15");
		report.analyzePing("03-01-2006", "15:30", true, "0.86");
		report.analyzePing("03-01-2006", "16:00", true, "0.12");
		report.analyzePing("03-01-2006", "16:30", true, "0.856");
		report.analyzePing("03-01-2006", "17:00", true, "0.5");
		report.analyzePing("03-01-2006", "17:30", true, "0.86");
		report.analyzePing("03-01-2006", "18:00", true, "0.12");
		report.analyzePing("03-01-2006", "18:30", true, "0.846");
		report.analyzePing("03-01-2006", "19:00", true, "0.12");
		report.analyzePing("03-01-2006", "19:30", true, "0.826");
		report.analyzePing("03-01-2006", "20:00", true, "0.192");
		report.analyzePing("03-01-2006", "20:30", true, "0.846");
		report.analyzePing("03-01-2006", "21:00", false, "100");
		report.analyzePing("03-01-2006", "21:30", true, "0.866");
		report.analyzePing("03-01-2006", "22:00", true, "0.142");
		report.analyzePing("03-01-2006", "22:30", true, "0.786");
		report.analyzePing("03-01-2006", "23:00", true, "0.182");
		report.analyzePing("03-01-2006", "23:30", true, "0.786");
		
		
		report.generateSMTPChart();
	
		Driver test= new Driver(report.getSMTP());
  
		System.out.println("fertig");
	}

}
 

oschli

Mitglied
Durch einfügen der folgenden Zeilen in den else Zweig der analyzePing Methode hab ich zwar ein springen in der JTabel hinbekommen.

Code:
JButton test = new JButton(String.valueOf(total));
			test.addActionListener( new ActionListener(){
		            
		          
				public void actionPerformed(ActionEvent arg0) {
					reporttable.editCellAt(Integer.parseInt(arg0.getActionCommand()), 0);
					scroll.revalidate();
				}
		     }); 
			southeast.add(test);

Allerdings wird die JScrollPane nicht aktuallisiert. Und wie bekomme ich anstelle der Buttons etwas dezentes?

Hättet ihr mir vielleicht ein paar Anregungen?
 
B

Beni

Gast
Du koenntest einen RowHeader setzen: JScrollPane#setRowHeaderView.
In diesem Header kannst du dann deine Fehlermeldungen zeichnen, und einen MouseListener auf den Header registrieren um allenfalls herumzuspringen.
 

oschli

Mitglied
Könntest du vielleicht noch ein bißchen genauer beschreiben?

Ich hab das bis jetzt so verstanden.

Den JTable füge ich über einen Vieport hinzu. Allerdings geht die JScrollPanel jetzt nicht mehr.


Code:
JViewport test = new JViewport();
		test.setPreferredSize(new Dimension(200,200));
		test.add(reporttable);
		scroll.setBackground(Color.GRAY);
		scroll.setRowHeader(test);


Bei den Buttons bin ich leider überfragt.

Code:
JButton jbutton = new JButton(String.valueOf(total-1));
			jbutton.addActionListener( new ActionListener(){
		            
		          
				public void actionPerformed(ActionEvent arg0) {
					reporttable.editCellAt(Integer.parseInt(arg0.getActionCommand()), 0);
					scroll.revalidate();
					smtppanel.revalidate();
				}
		     }); 
			southeast.add(jbutton);
			scroll.setRowHeaderView(jbutton);
 

oschli

Mitglied
Ich hab das jetzt folgendermaßen eiggefügt.

else Zweig
Code:
JLabel wr= new JLabel("Warning");
	  		scroll.setRowHeaderView(wr);

Code:
JViewport tablecontainer = new JViewport();
        tablecontainer.add(reporttable);
        
		scroll.setViewportView(tablecontainer);

Jetzt ist das Label aber in der JScrollPane. Das ist ja nicht erwünscht.
 

André Uhres

Top Contributor
Code:
/*
 * ScrollJump.java
 */
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
public class ScrollJump extends JFrame {
    public ScrollJump() {
        super("Scroll Jump");
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(400,300);
        setLocationRelativeTo(null);
        initComponents();
        tableModel = (DefaultTableModel)reporttable.getModel();
        for(int i = 0; i<10000; i++){
            String[] rowData = {"A_Test_"+i, "B_Test_"+i, "C_Test_"+i};
            if(i==500 || i==5000){
                rowData[2] = "Failed";
            }
            tableModel.addRow(rowData);
        }
        addComponentListener(new ComponentAdapter(){
            public void componentResized(ComponentEvent e){
                scanTable();
            }
        });
        setVisible(true);
        scanTable();
    }
    private void initComponents() {
        reporttable = new JTable();
        markierungsPanel = new JPanel();
        reporttable.setModel(new DefaultTableModel(
                new Object [][] {
        },
                new String [] {
            "Title 1", "Title 2", "Title 3"
        }
        ) {
            Class[] types = new Class [] {
                String.class, String.class, String.class
            };
            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }
        });
        getContentPane().add(new JScrollPane(reporttable), BorderLayout.CENTER);
        markierungsPanel.setLayout(null);
        markierungsPanel.setPreferredSize(new Dimension(15, 10));
        getContentPane().add(markierungsPanel, BorderLayout.EAST);
    }
    private void scanTable(){
        markierungsPanel.removeAll();
        for(int row = 0; row<reporttable.getRowCount(); row++){
            String value = reporttable.getValueAt(row,2).toString().trim();
            if(value.equals("Failed")){
                markierungsPanel.add(new Markierung(row));
            }
        }
        markierungsPanel.revalidate();
        markierungsPanel.repaint();
    }
    public static void main(String args[]){new ScrollJump();}
    private DefaultTableModel tableModel;
    private JPanel markierungsPanel;
    private JTable reporttable;
    class Markierung extends JLabel{
        public Markierung(int row){
            this.row = row;
            setBackground(Color.orange);
            setBorder(BorderFactory.createLineBorder(Color.lightGray));
            setOpaque(true);
            setSize(new Dimension(13,5));
            double rowCount = reporttable.getRowCount(); //hier statt table => reporttable
            double factor = row / rowCount;
            double height = markierungsPanel.getSize().getHeight();
            int position = (int)(height * factor);
            Component comp = markierungsPanel.getComponentAt(0,position);
            while(comp != null && comp instanceof Markierung){
                position = position + 5;
                comp = markierungsPanel.getComponentAt(0,position);
            }
            setLocation(0,position);
            int max = (int)(height - 5);
            String text = "Fehler: "+reporttable.getValueAt(row,0).toString();
            setToolTipText(text);
            if(position > max){
                setLocation(0,max);
                comp = markierungsPanel.getComponentAt(0,max);
                if(comp != null && comp instanceof Markierung){
                    comp.setBackground(Color.red);
                    String text1 = ((Markierung)comp).getToolTipText();
                    if(!text1.startsWith("<html>")) text1 = "<html>" + text1 ;
                    ((Markierung)comp).setToolTipText(text1+"
"+text);
                }
            }
            setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
            addMouseListener(new MouseAdapter(){
                public void mouseClicked(MouseEvent e){
                    markierungMouseClicked(e);
                }
            });
        }
        private void markierungMouseClicked(MouseEvent e){
            reporttable.scrollRectToVisible(reporttable.getCellRect(row, 0, false));
            reporttable.changeSelection(row,0,false,false);
        }
        private int row;
    }
    
}
 

oschli

Mitglied
Hi ich will euch ja nicht nerven aber irgendwie bekomm ich das nicht hin.


Hab die Methode scanTable übernommen und die reagiert nur noch auf die gewünschten Rows.

Die Methode und die Klasse wurden aus obigen Beispiel übernommen.

In meiner genereateReport Methode wurde folgendens hinzugefügt.

Code:
south = new JPanel();
south.setLayout(new BorderLayout());
south.setPreferredSize(new Dimension(200,200));
        
reporttable=new JTable(data, columnNames);
scroll= new JScrollPane(reporttable);

south.add(scroll,BorderLayout.CENTER);
markierungsPanel.setLayout(null);
markierungsPanel.setPreferredSize(new Dimension(15, 10));
south.add(markierungsPanel, BorderLayout.EAST);
        
scanTable();
		
smtppanel.setLayout(new BorderLayout());
smtppanel.add(north,BorderLayout.NORTH);
smtppanel.add(south,BorderLayout.CENTER)

Das Panel smtppanel gebe ich über eine Methode an die aufrufende Klasse zurück.
Es werden mir die kleinen Buttons nicht angezeigt. Woran könnte das liegen.
 

André Uhres

Top Contributor
ScrollJump ist nur eine Demo und muss natürlich an deine Bedürfnisse angepasst werden.
In scanTable() muss man z.B. die Logik zur Aufspürung von Fehlern reintun,
und die fehlerhaften Zeilen markieren.
Die Markierungen müssten nach diesem Code erscheinen:
Code:
markierungsPanel.revalidate(); 
markierungsPanel.repaint();
 

oschli

Mitglied
Hi das dein Programm ein Demo Programm ist war mir klar. Deshalb hab ich es ja auch angepasst.


Code:
private void scanTable(){
 markierungsPanel.removeAll();
 for(int row = 0; row<reporttable.getRowCount(); row++){
    String value = reporttable.getValueAt(row,2).toString().trim();
    if(value.equals("Failed")){
       markierungsPanel.add(new Markierung(row));
    }
  }
 markierungsPanel.revalidate();
 markierungsPanel.repaint();
}

Die Klasse Markierung hab ich nicht grosartig verändert. Hab eigentlich nur meinen JTable eingefügt. Mehr muss ich ja auch nicht., oder?

Code:
class Markierung extends JLabel{
        public Markierung(int row){
            this.row = row;
            setBackground(Color.orange);
            setBorder(BorderFactory.createLineBorder(Color.lightGray));
            setOpaque(true);
            setSize(new Dimension(13,5));
            double rowCount = reporttable.getRowCount(); //hier statt table => reporttable
            double factor = row / rowCount;
            double height = markierungsPanel.getSize().getHeight();
            int position = (int)(height * factor);
            Component comp = markierungsPanel.getComponentAt(0,position);
            while(comp != null && comp instanceof Markierung){
                position = position + 5;
                comp = markierungsPanel.getComponentAt(0,position);
            }
            setLocation(0,position);
            int max = (int)(height - 5);
            String text = "Fehler: "+reporttable.getValueAt(row,0).toString();
            setToolTipText(text);
            if(position > max){
                setLocation(0,max);
                comp = markierungsPanel.getComponentAt(0,max);
                if(comp != null && comp instanceof Markierung){
                    comp.setBackground(Color.red);
                    String text1 = ((Markierung)comp).getToolTipText();
                    if(!text1.startsWith("<html>")) text1 = "<html>" + text1 ;
                    ((Markierung)comp).setToolTipText(text1+"
"+text);
                }
            }
            setCursor(new Cursor(Cursor.HAND_CURSOR));
            addMouseListener(new MouseAdapter(){
                public void mouseClicked(MouseEvent e){
                    markierungMouseClicked(e);
                }
            });
        }
        private void markierungMouseClicked(MouseEvent e){
            reporttable.scrollRectToVisible(reporttable.getCellRect(row, 0, false));
            reporttable.changeSelection(row,0,false,false);
        }
        private int row;
    }
 

oschli

Mitglied
ich steh grad voll auf dem Schlauch. Könntest du dir meinen Quellcode man anschauen.



Code:
package gui;



import java.awt.*;
import javax.swing.*;



import java.awt.Color;
import java.awt.event.*;
import java.util.Vector;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot;
import org.jfree.data.general.DefaultPieDataset;


public class MySMTPReport {
	
	public MySMTPReport(){
		pingsucces=0;
		pingfailed=0;
		total=0;
		smtppanel=new JPanel();
		columnNames = new Vector<String>();
		columnNames.add("Date");
		columnNames.add("Time");
		columnNames.add("State");
		columnNames.add("Replytime");
		data = new Vector<Vector>(); 
		markierungsPanel =new JPanel();
		
		
	}
	
	public void analyzePing(String date, String time,boolean succes, String replytime){
		Vector<Object> row = new Vector<Object>(3);
		if(succes){
	  		pingsucces++;
	  		total++;
	  		row.add(date); 
	  		row.add(time);
	  		row.add("Succeded");
	  		row.add(replytime);
		}
	  	 else{
	  		pingfailed++;
	  		total++;
	  		row.add(date); 
	  		row.add(time);
	  		row.add("Failed");
	  		row.add(replytime);
	  	 }
		data.addElement( row );
	}
	
	public void generateSMTPChart(){
		south = new JPanel();
		south.setLayout(new BorderLayout());
        south.setPreferredSize(new Dimension(200,200));
        
        reporttable=new JTable(data, columnNames);
		scroll= new JScrollPane(reporttable);
		scroll.setBackground(Color.GRAY);
	
		south.add(scroll,BorderLayout.CENTER);
		markierungsPanel.setLayout(null);
        markierungsPanel.setPreferredSize(new Dimension(15, 10));
        south.add(markierungsPanel, BorderLayout.EAST);
        
        scanTable();
      
		smtppanel.setLayout(new BorderLayout());
		smtppanel.add(south,BorderLayout.CENTER);
		
		markierungsPanel.revalidate();
        markierungsPanel.repaint();
		smtppanel.revalidate();
		smtppanel.repaint();
	}
	
	
	private void scanTable(){
		markierungsPanel.removeAll();
        for(int row = 0; row<reporttable.getRowCount(); row++){
            String value = reporttable.getValueAt(row,2).toString().trim();
            if(value.equals("Failed")){
                markierungsPanel.add(new Markierung(row));
            }
        }
        markierungsPanel.revalidate();
        markierungsPanel.repaint();
    }

	
	public JPanel getSMTP(){
		
		return  smtppanel;
	}

	
	private JPanel smtppanel;
	
	
	private JPanel south;
	private JPanel markierungsPanel;
	private JScrollPane scroll;
	private JTable reporttable;
	private Vector <String> columnNames;
    private Vector <Vector> data ;
	private JPanel southeast;
	private JScrollBar vsb = new JScrollBar(JScrollBar.VERTICAL);
	
	
	private int pingsucces;
	private int pingfailed;
	private int total;
	
	class Markierung extends JLabel{
        public Markierung(int row){
            this.row = row;
            setBackground(Color.orange);
            setBorder(BorderFactory.createLineBorder(Color.lightGray));
            setOpaque(true);
            setSize(new Dimension(13,5));
            double rowCount = reporttable.getRowCount();
            double factor = row / rowCount;
            double height = markierungsPanel.getSize().getHeight();
            int position = (int)(height * factor);
            Component comp = markierungsPanel.getComponentAt(0,position);
            while(comp != null && comp instanceof Markierung){
                position = position + 5;
                comp = markierungsPanel.getComponentAt(0,position);
            }
            setLocation(0,position);
            int max = (int)(height - 5);
            String text = "Fehler: "+reporttable.getValueAt(row,0).toString();
            setToolTipText(text);
            if(position > max){
                setLocation(0,max);
                comp = markierungsPanel.getComponentAt(0,max);
                if(comp != null && comp instanceof Markierung){
                    comp.setBackground(Color.red);
                    String text1 = ((Markierung)comp).getToolTipText();
                    if(!text1.startsWith("<html>")) text1 = "<html>" + text1 ;
                    ((Markierung)comp).setToolTipText(text1+"
"+text);
                }
            }
            setCursor(new Cursor(Cursor.HAND_CURSOR));
            addMouseListener(new MouseAdapter(){
                public void mouseClicked(MouseEvent e){
                    markierungMouseClicked(e);
                }
            });
        }
        private void markierungMouseClicked(MouseEvent e){
            reporttable.scrollRectToVisible(reporttable.getCellRect(row, 0, false));
            reporttable.changeSelection(row,0,false,false);
        }
        private int row;
    }


}


Außerdem hätte ich noch ne Frage zu deinem Beispiel

Was macht diese Zeile. Da das Programm auch läuft wenn man sie nicht drin hat.

Code:
addComponentListener(new ComponentAdapter(){
            public void componentResized(ComponentEvent e){   
                scanTable();
            }
        });
 

André Uhres

Top Contributor
Hab deine Klasse getestet, läuft problemlos:
Code:
   private void testGUI(){
        for (int i = 0; i < 10000; i++) {
            if(i==500 || i==5000 || i== 7000) {
                analyzePing(i+"  01.01.2006 ", "11:11:00", false, "00:01:00");
            }else{
                analyzePing(i+"  01.01.2006 ", "11:11:00", true, "00:01:00");
            }
        }
        reporttable = new JTable(data, columnNames);
        markierungsPanel.setLayout(null);
        markierungsPanel.setPreferredSize(new Dimension(15, 10));
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        f.add(new JScrollPane(reporttable));
        f.add(markierungsPanel, BorderLayout.EAST);
        f.setSize(400,300);
        f.setLocationRelativeTo(null);
        f.setVisible(true);
        scanTable();
    }
    public static void main(String args[]) {
        MySMTPReport myRep = new MySMTPReport();
        myRep.testGUI();
    }

>Außerdem hätte ich noch ne Frage zu deinem Beispiel
>Was macht diese Zeile. Da das Programm auch läuft wenn man sie nicht drin hat.
Code:
addComponentListener(new ComponentAdapter(){
    public void componentResized(ComponentEvent e){   
        scanTable();
    }
});
Das macht genau das was dasteht: bei einem resize des Frames wird scanTable() aufgerufen
(die Positionen der Markierungen werden so an die neue Grösse angepasst).
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G In JScrollPane nach oben springen AWT, Swing, JavaFX & SWT 7
B An den Anfang in einer JScrollPane springen AWT, Swing, JavaFX & SWT 7
volcanos Scrollen: JScrollPane mit Graphics g und Java-Fonts extends Frame ? AWT, Swing, JavaFX & SWT 5
E JScrollPane mit JPanel verbinden AWT, Swing, JavaFX & SWT 1
B Swing JScrollPane scrollt nicht AWT, Swing, JavaFX & SWT 10
P JTextarea (in JScrollPane) zeigt nur die beiden letzten Einträge an? AWT, Swing, JavaFX & SWT 0
O Swing "Eigenes" JPanel wird dem JScrollPane nicht hinzugefügt AWT, Swing, JavaFX & SWT 5
E Komponenten von JScrollPane werden nicht richtig ermittelt AWT, Swing, JavaFX & SWT 2
E wie in JScrollPane auf JTextArea zugreifen AWT, Swing, JavaFX & SWT 12
N Swing JScrollPane mit Tastatur bedienen? AWT, Swing, JavaFX & SWT 0
F JScrollPane anzeige AWT, Swing, JavaFX & SWT 7
K Swing JScrollPane wird nicht angezeigt wenn man Components darstellt. AWT, Swing, JavaFX & SWT 2
M Swing JPanel in JScrollPane AWT, Swing, JavaFX & SWT 3
M Problem mit Add JScrollPane AWT, Swing, JavaFX & SWT 25
P Swing JEditorPane in Kombination mit JScrollPane AWT, Swing, JavaFX & SWT 29
S Swing jScrollPane - pro Eintrag der Liste, die jCheckBoxes Speichern die in dem Eintrag aktiviert wurden AWT, Swing, JavaFX & SWT 2
T Swing Probleme mit repaint() bzw. JScrollPane AWT, Swing, JavaFX & SWT 7
D JScrollPane in JTabbedPane AWT, Swing, JavaFX & SWT 3
MaxG. Swing JScrollPane AWT, Swing, JavaFX & SWT 10
Soloeco Swing JScrollPane AWT, Swing, JavaFX & SWT 6
A Swing Probleme mit dem adden von JButtons zur JScrollPane AWT, Swing, JavaFX & SWT 2
A JScrollPane soll JPanel mit JButtons enthalten und eine Scollbar anzeigen AWT, Swing, JavaFX & SWT 1
J JScrollPane funktioniert nicht AWT, Swing, JavaFX & SWT 5
B LayoutManager GridBagLayout und JScrollPane AWT, Swing, JavaFX & SWT 5
Thallius JScrollPane Scrollpos setzen nach Neuzeichnen AWT, Swing, JavaFX & SWT 3
P MalProgramm mit JScrollPane und Canvas AWT, Swing, JavaFX & SWT 2
D Swing JScrollPane Tabelle ändern (2 Tabellen) AWT, Swing, JavaFX & SWT 7
U JScrollPane -> JTabbedPane u.A. AWT, Swing, JavaFX & SWT 3
A Layout-Manager, JScrollPane, ... Chaos AWT, Swing, JavaFX & SWT 5
V JScrollPane im zur Laufzeit verändernden JFrame AWT, Swing, JavaFX & SWT 0
W Swing Größenänderung vom JPanel im JScrollPane und anschließendes positionieren AWT, Swing, JavaFX & SWT 2
X Swing JButton's zum JScrollPane hinzufügen geht nicht. Bitte um Hilfe. AWT, Swing, JavaFX & SWT 9
G JTextArea mit JScrollPane wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
K Swing JScrollPane - JScrollBar anzeigen, wenn Frame verkleinert wird AWT, Swing, JavaFX & SWT 3
N Swing Problem beim Scrollen mit JScrollPane AWT, Swing, JavaFX & SWT 6
Bluedaishi JScrollpane AWT, Swing, JavaFX & SWT 0
L JScrollPane scrollt nicht !! AWT, Swing, JavaFX & SWT 3
F JScrollPane Position setzen (x=0, y=0) AWT, Swing, JavaFX & SWT 2
R JScrollPane überdeckt JPanel? AWT, Swing, JavaFX & SWT 7
H JTree in JScrollPane passt sich nicht an Größe von JPanel an AWT, Swing, JavaFX & SWT 2
S JScrollPane und BorderLayout AWT, Swing, JavaFX & SWT 1
M Mehrere Jpanel in einem JScrollPane (Layout) AWT, Swing, JavaFX & SWT 2
W Swing JScrollPane für mein Fenster AWT, Swing, JavaFX & SWT 4
A Swing Probleme mit JScrollPane AWT, Swing, JavaFX & SWT 6
F JTable mit JScrollPane AWT, Swing, JavaFX & SWT 4
I JPanel in JScrollPane verkleinert sich leider nicht .... AWT, Swing, JavaFX & SWT 2
G JScrollPane bricht am Ende der Anzeige nicht um AWT, Swing, JavaFX & SWT 2
J Swing JTextPane mit JScrollPane auf JPanel scrollen nicht AWT, Swing, JavaFX & SWT 6
W Sichtbarer Bereich JScrollPane vs. JList AWT, Swing, JavaFX & SWT 3
B Swing JPanel in JScrollPane einfügen AWT, Swing, JavaFX & SWT 2
S 2D-Grafik Transparentes JScrollPane AWT, Swing, JavaFX & SWT 0
S 3D-Grafik 3d Grafik auf einem JPanel oder im JScrollPane AWT, Swing, JavaFX & SWT 1
R Ändern Default-Verhalten von JScrollpane in einer JScrollpane AWT, Swing, JavaFX & SWT 1
S JScrollPane --> Programm hängt sich beim scrollen auf AWT, Swing, JavaFX & SWT 2
A JScrollPane - ScrollBar Buttongröße verändern AWT, Swing, JavaFX & SWT 1
J Bilder auf JPanel (im JScrollPane) nacheinander laden AWT, Swing, JavaFX & SWT 0
A Swing JScrollPane Problem AWT, Swing, JavaFX & SWT 6
H Swing JScrollPane mit "viel Inhalt" scrollt zu langsam (inkl. See-For-Yourself.jar :D) AWT, Swing, JavaFX & SWT 2
T Swing JScrollPane in JPanel - Breite dynamisch, Höhe fix - wie? AWT, Swing, JavaFX & SWT 2
D Swing JScrollPane in JScrollPane - Problem AWT, Swing, JavaFX & SWT 3
K Bug in JScrollPane? AWT, Swing, JavaFX & SWT 4
T Swing JScrollPane Farbe der Scrollbar AWT, Swing, JavaFX & SWT 3
M JScrollPane Header AWT, Swing, JavaFX & SWT 3
G JScrollPane über JScrollPane AWT, Swing, JavaFX & SWT 2
V LayoutManager JScrollPane verwirft Elementanordnung AWT, Swing, JavaFX & SWT 3
B JScrollPane Problem AWT, Swing, JavaFX & SWT 2
D Swing JScrollPane AWT, Swing, JavaFX & SWT 7
H cardlayout und jscrollpane AWT, Swing, JavaFX & SWT 14
F 2D-Grafik Skalieren der Scrollbars beim Zoomen einer JScrollPane AWT, Swing, JavaFX & SWT 4
B JScrollPane Horizontal klappt nicht. AWT, Swing, JavaFX & SWT 4
G JScrollPane reagiert nicht auf Änderung der JPanel-Größe AWT, Swing, JavaFX & SWT 4
C jPanel auf jScrollPane zentrieren AWT, Swing, JavaFX & SWT 3
M Swing JScrollPane (Parent JTextArea) aktualisieren + neue Zeile AWT, Swing, JavaFX & SWT 5
U Swing JPane und JScrollpane in JSplitpane-Seite: Scrollen funktioniert nicht AWT, Swing, JavaFX & SWT 3
A Swing Korrekte JTable.rowAt(point) für JTable in JScrollPane AWT, Swing, JavaFX & SWT 5
D Label über JScrollPane AWT, Swing, JavaFX & SWT 3
S JScrollPane reagiert nicht AWT, Swing, JavaFX & SWT 3
X JScrollPane zu JTable hinzufügen AWT, Swing, JavaFX & SWT 16
H JScrollPane - JEditorPane und HTML-Tabelle AWT, Swing, JavaFX & SWT 2
D LayoutManager JScrollPane mit dynamischem Inhalt AWT, Swing, JavaFX & SWT 8
P Swing JScrollpane AWT, Swing, JavaFX & SWT 2
B JScrollPane scrollt nicht immer automatisch AWT, Swing, JavaFX & SWT 2
V Swing JScrollPane Viewport verschieben AWT, Swing, JavaFX & SWT 2
J JScrollPane Probleme AWT, Swing, JavaFX & SWT 3
S Swing JScrollPane verliert Scrollbars AWT, Swing, JavaFX & SWT 5
D Swing JTable in JScrollpane beliebig verbreitern AWT, Swing, JavaFX & SWT 5
A Swing Anzeige Text in JScrollpane AWT, Swing, JavaFX & SWT 8
J Swing Unteren Abstand für JTable in JScrollPane festlegen AWT, Swing, JavaFX & SWT 10
xehpuk Swing Line-wrapping von JTextPane (in JScrollPane) AWT, Swing, JavaFX & SWT 3
M JScrollPane Problem AWT, Swing, JavaFX & SWT 6
S Swing JScrollpane und ViewPort AWT, Swing, JavaFX & SWT 4
D JScrollPane funktioniert nicht AWT, Swing, JavaFX & SWT 12
X JScrollPane funzt net... AWT, Swing, JavaFX & SWT 5
H jscrollpane AWT, Swing, JavaFX & SWT 12
RELAXccc Swing JTree + JScrollPane, refresh Problem AWT, Swing, JavaFX & SWT 17
A Problem mit JScrollPane in einer JScrollpane AWT, Swing, JavaFX & SWT 4
B JScrollPane Problem AWT, Swing, JavaFX & SWT 25
T Swing JScrollPane- und Tabelle-Header Problem AWT, Swing, JavaFX & SWT 25
P Swing JScrollPane-Inhalt: Grösse anpassen AWT, Swing, JavaFX & SWT 6
G Swing Höhe des View eines JScrollPane fest auf Höhe des JScrollPane setzen! AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben