# Browserfenster aus Java heraus mit   einer Seite aus dem Internet  starten



## handballhandbal (9. Januar 2014)

Hallo zusammen,

ich hab hier eine Klasse, ich wollte gerne wenn man auf eine Zelle der Tabelle klickt, dass sich dann ein Browser Fenster öffnet. Ich hab das mit der Methode if (isCellselected.....      versucht aber dort öffnet sich der Browser mehrmals. Hat einer Idee wie ich das verändern kann damit die Seite nur einmal geöffnet wird.

Ich danke sehr für eine Hilfe.


```
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Desktop;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.URI;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.table.TableCellRenderer;
 



public class DozentenPanel extends JPanel {

		private JTable table;
		private JScrollPane pane;
		private JLabel lblhead;
		private JButton zurueck;
		private JPanel pnlNorth;
		private CardLayout c10;
		private JPanel containerpanel;
		public DozentenPanel(CardLayout c10, JPanel containerpanel) 
		{
			this.c10 = c10;
			this.containerpanel = containerpanel;
			createDwidgets();
			layoutDwidgets();
		}
		private void createDwidgets()   {
			 
			pnlNorth = new JPanel ();
			pnlNorth.setBackground(Color.GREEN);
			
			lblhead = new JLabel ("Dozenten");
			lblhead.setFont(new Font("Cooper black", Font.PLAIN, 72));
			lblhead.setForeground(Color.black);
			lblhead.setBackground(Color.green);
			lblhead.setOpaque(true);
			lblhead.setHorizontalAlignment(SwingConstants.CENTER);
			//browse.setDesktop(newURI);
			
			try {
				zurueck = new JButton();
				Image rueck  = ImageIO.read(getClass().getResource("back.png"));
				zurueck.setIcon(new ImageIcon(rueck));
				zurueck.setBorder(null);
				zurueck.setContentAreaFilled(false);
				/* try {
					   String url = "http://www.hshl.de";
					   new ProcessBuilder("rundll32", "url.dll,FileProtocolHandler", url).start();
					}
					   catch (IOException e)
					   {
						   e.printStackTrace();
						   } */
					
			String [] columns =  { "Dozenten" , "Kontaktdaten"};
			
			String [] [] data = {
					{"Prof. Susanne Lengyel" , "susanne.lengyel@hshl.de"},
					{"Prof. Rainer Baum", "rainer.baum@hshl.de"},
					{"Prof. Katja Becker", "katja.becker@hshl.de"},
					{"Prof. Dr. Kai Gehrs","kai.gehrs@hshl.de"},
					{"Prof. Dr. Merijam Gotzes", "merijam.gotzes@hshl.de"},
					{"Prof. Dr. -Ing. Frank Hauper", "frank.haupert@hshl.de"},
					{"Prof. Christine Latein","christine.latein@hshl.de"},
					{"Prof. Dr. Christian Sturm	","christian.sturm@hshl.de"},
					{"Prof. Dr. Jörg Wenz", "joerg.wenz@hshl.de"},
					{"Prof. Dr. -Ing Karsten Lehn", "karsten.lehn@hshl.de"},
					{"Prof. Dr. Simon Nestler","simon.nestler@hshl.de"}};
			
		 	table = new JTable(data , columns)
		 	{
				public boolean isCellEditable (int data, int columns)
				{
					return false;
				}
			
				public Component prepareRenderer ( TableCellRenderer r , int data , int columns)
				{
					Component c = super.prepareRenderer(r, data, columns);
					
					if (data % 2 == 0)
						c.setBackground(Color.WHITE);
						
					else
						
						c.setBackground(Color.LIGHT_GRAY);
					
					if (isCellSelected(data%1, columns)){
					   c.setBackground(Color.GREEN);
					   
					   try {
						    
						  
					     String url = "http://hshl.de/vita-prof-susanne-lengyel-cvd/";
					   new ProcessBuilder(new String[]{"rundll32", "url.dll,FileProtocolHandler",url}).start();
					}
					   catch (IOException e)
					   {
						   e.printStackTrace();
						   }
					   }
					
					return c;
					
				}
			
			};
			
			
			table.setRowHeight(50);
			table.setFont(new Font("Cooper black", Font.PLAIN ,16));
			table.setPreferredScrollableViewportSize(new Dimension(900, 500));
			table.setFillsViewportHeight(true);
			
			pane = new JScrollPane(table);
			} catch (IOException e) {
				e.printStackTrace();
			}
			
			
		}

		private void layoutDwidgets() {
			
		pnlNorth.setLayout(new BorderLayout());
		pnlNorth.add(zurueck,BorderLayout.WEST);
		pnlNorth.add(lblhead,BorderLayout.CENTER);
			
			
			
		setLayout(new BorderLayout(5,0));
		add(BorderLayout.NORTH,pnlNorth);
		add(BorderLayout.CENTER,pane);
				
		
		
		zurueck.addActionListener(new ActionListener(){
			
			@Override
			public void actionPerformed(ActionEvent arg0){
				
				
				CardLayout cl = (CardLayout)containerpanel.getLayout();
				cl.show(containerpanel, "9");
				
				
			}
			   
			       
			    
		});
		
		
		    }
		
		
		}
```


----------



## benhaze (9. Januar 2014)

schau mal:

```
if (Desktop.isDesktopSupported()) {
   Desktop.getDesktop().browse(new URI("http://www.google.de"));
}
```

siehe:
http://docs.oracle.com/javase/7/docs/api/java/awt/Desktop.html#browse(java.net.URI)


----------



## handballhandbal (9. Januar 2014)

Und wie mache ich das, dass beim einzelnen Klicken der Tabellen Zeilen, ein anderer Link dann herausgegeben wird ?


----------



## benhaze (9. Januar 2014)

der CellRenderer dient *nur* der Darstellung!
Es werden *keine* Events ausgelöst.
Ergo wird dein Klick nicht registriert.

*isCellEditable* muss TRUE für die Spalte des Link-Buttons liefern.
Dann brauchst du noch für diese Spalte einen CellEditor.
Das könnte ein Button sein.


----------

