hoe maak ik n 'download pdf' button?

Status
Niet open voor verdere reacties.

LisaAlberta

Gebruiker
Lid geworden
9 aug 2012
Berichten
73
Hoi,

ik ben bezig een programmaatje te maken waarin men kan kiezen uit 2 comboboxen, waarbij de beide uitkomsten gecombineerd worden tot de naam van een PDf bestand. Dat stuk werkt.
Maar hoe maak ik een button waarmee je dit bestand ook kunt downloaden? Ik heb gezocht op internet maar ik kom er niet echt uit, de oplossingen zijn meetal javascript ipv java.

Mijn code tot nu toe:

package rapportage;

Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import static javax.swing.JFrame.EXIT_ON_CLOSE;

public class Rapportage extends JFrame 
    implements ActionListener {
    
    private JComboBox combo;
    private JComboBox combo2;
    private JTextField textField;
    private JTextField textField2;
    private JTextField textField3;
    private JButton download;
    private JButton afsluiten;
    private JLabel kiesGemeente;
    private JLabel kiesOnderwerp;
    private JLabel gekozenBestand;
    
    public static void main(String[] args) {
        Rapportage frame = new Rapportage();
        frame.setSize(550,200);
        frame.createGUI();
        frame.setVisible(true);
    }
    private void createGUI(){
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        Container window = getContentPane();
        window.setLayout(new FlowLayout() );
        
        /* maken van de eerste combobox: kiezen uit de gemeentes
         * 
         */
        kiesGemeente = new JLabel("Kies uw gemeente");
        window.add(kiesGemeente);
        
        combo = new JComboBox();
        
        combo.addItem("Best");
        combo.addItem("Boxtel");
        combo.addItem("Haaren");
        combo.addItem("Nuenen");
        
        combo.addActionListener(this);
        window.add(combo);
        
        textField = new JTextField(20);
        window.add(textField);
        
        /* maken van de tweede combobox: kiezen van het onderwerp
         * 
        */
        
        kiesOnderwerp = new JLabel("Kies het onderwerp");
        window.add(kiesOnderwerp);
        
        combo2 = new JComboBox();
        
        combo2.addItem("WSD totaal");
        combo2.addItem("WSW");
        combo2.addItem("WWB");
        combo2.addItem("alles");
        
        combo2.addActionListener(this);
        window.add(combo2);
        
        textField2 = new JTextField(20);
        window.add(textField2);
        
        gekozenBestand = new JLabel("U heeft het volgende bestand gekozen");
        window.add(gekozenBestand);
        
        textField3 = new JTextField (40);
        window.add(textField3);
        
        download = new JButton("download");
        afsluiten = new JButton("afsluiten ");
        window.add(download);
        download.addActionListener(this);
        window.add(afsluiten);
 
    }
    
    public void actionPerformed(ActionEvent event) {
        Object src = event.getSource();
        int index = combo.getSelectedIndex();
        String item = (String) combo.getSelectedItem();    
        int index2 = combo2.getSelectedIndex();
        String item2 = (String) combo2.getSelectedItem();   
        
        if (src == combo){
        textField.setText("geselecteerd: " + item); 
        }
        else if (src == combo2){
        textField2.setText("geselecteerd: " + item2);
        }
        String hyperlink;
        textField3.setText("Kwartaalrapportage" + item + item2 + ".pdf");
        hyperlink = "http://www.test.nl/" + textField3;

    }

}

alvast bedankt,
Lisa
 
Laatst bewerkt door een moderator:
Hoi Gamefreak23,
wat ik niet voor elkaar krijg is dat ie de file opent met de naam die ik eerder in de code heb samengesteld. Dus een file met een reeds gedefinieerde naam ipv een filechooser. Ik hoef geen file meer te kiezen ik wil m gewoon openen...
het is vast heel simpel maar het is me nog niet gelukt :/
gr Lisa
 
Het openen van een bestand kan sinds java 1.6 met behulp van de Desktop klasse.

Code:
File file = new File("mijnpdf.pdf");
Desktop.getDesktop().open(file);

Als je een bestand van het internet wilt halen zul je deze eerst moeten opslaan (binnen halen met behulp van de URL klasse en een FileWriter) daarna kan je hem openen met behulp van de bovenstaande functie.

Groet,
NewbiProgrammer
 
Hoi Newbi,
ik vrees dat ik ergens iets essentieels mis... wil je me helpen? het is inderdaad een pdf van internet. Ik heb altijd ruzie met java als ik meer dan 1 klasse heb. Hoe moet ik dat doen?
alvast ontzettend bedankt,
Lisa
 
hoi,
ik ben een stapje verder, ik heb n klasse gevonden waarin een browser wordt geopend. Hieronder staat de klasse die de browser opent, maar mijn grote vraag is hoe ik dat ding aan moet roepen in mijn hoofdklasse rapportage. De te openen pagina staat in de variabele hyperlink in de klasse rapportage. ik heb deze nieuwe klasse onder mijn project opgeslagen als aparte klasse OpenURI.java
Kan iemand mij helpen?

thx Lisa

import java.net.URI;
import java.awt.Desktop;

public class OpenURI {

public static void main(String [] args) {

if( !java.awt.Desktop.isDesktopSupported() ) {

System.err.println( "Desktop is not supported (fatal)" );
System.exit( 1 );
}

if ( args.length == 0 ) {

System.out.println( "Usage: OpenURI [URI [URI ... ]]" );
System.exit( 0 );
}

java.awt.Desktop desktop = java.awt.Desktop.getDesktop();

if( !desktop.isSupported( java.awt.Desktop.Action.BROWSE ) ) {

System.err.println( "Desktop doesn't support the browse action (fatal)" );
System.exit( 1 );
}

for ( String arg : args ) {

try {

java.net.URI uri = new java.net.URI( arg );
desktop.browse( uri );
}
catch ( Exception e ) {

System.err.println( e.getMessage() );
}
}
}
}
 
Laatst bewerkt:
Beste Lisa,

Ik denk dat je een paar stapjes hebt overgeslagen met betrekking tot OO-programmeren (Object Oriented) http://nl.wikipedia.org/wiki/Objectgeoriënteerd#Het_concept.

Ik kan je alles proberen uit te leggen, maar dit zal veel tijd kosten. Ik raad je dan ook aan om een basis java boek te kopen of tutorials te volgen (kijk eens op www.thenewboston.com), daar staan veel beginner java-tutorials.

Ik kan je in ieder geval helpen met je vraag.

Zoals je zelf zegt is jouw hoofdklasse, de klasse rapportage. Deze klasse zal in mijn ogen dan ook de main methode bevatten; dus niet de klasse OpenURI. Een programma heeft nooit meer dan één main methode. De main methode
Code:
 public static void main(String[] args){}
is dan ook het startpunt van de applicatie. Vanuit deze methode worden objecten aangemaakt met behulp van klasses (de blauwdrukken van objecten om het zo maar even te noemen).

Je kan jouw variabele hyperlink meegeven aan de klasse door middel van parameters. Als een klasse wordt aangemaakt wordt zijn constructor aangeroepen. Dit is een methode met dezelfde naam als de klasse en geeft geen waarde terug (return value).

Even terugkomend op jouw probleem. Jij initialiseert de hyperlink-variabele als jij een actie uitvoert. Nu zou je daar een nieuw object van de OpenURI klasse kunnen aanmaken, maar dit zal betekenen dat, elke keer dat jij op die knop drukt, er een nieuw object wordt aangemaakt.

Code:
   public void actionPerformed(ActionEvent event) {
        .....
        String hyperlink;
        textField3.setText("Kwartaalrapportage" + item + item2 + ".pdf");
        hyperlink = "http://www.test.nl/" + textField3;
        new OpenURI(hyperlink);   //we geven de hyperlink mee aan de constructor van de OpenURI klasse.
    }

Om dit te laten werken moeten we natuurlijk een parameter in de openuri klasse definiëren.

OpenURI.java
Code:
public class OpenURI {
    private String hyperlink;

    public OpenURI(String mijnHyperlink) {
         hyperlink = mijnHyperlink;
    }
    ....
}

Zoals ik hierboven al heb gezegd lijkt mij dit niet de meest mooie manier. Daarom zou ik er zelf voor gaan om een methode in de openuri klasse te maken die de hyperlink variabele initialiseert. Als je googled naar de termen: getters and setters zul je veel resultaten vinden. Dit is precies waar ik het over heb. http://www.coderanch.com/t/463484/java/java/explanation-getter-setter-methods-difference

Een acceptabele implementatie zou dan ook kunnen zijn om het openuri object één maal te creëren, dit kan gedaan worden in de constructor van de Reportage klasse. Daarna als er op de knop wordt gedrukt zetten we de hyperlink en vragen wij de OpenURI klasse om iets uit te voeren.

Code:
public class Raportage {
    private OpenURI openURI; //we definiëren een OpenURI variabele.
 
    public Raportage() {
        openURI = new OpenURI(); //we initialiseren deze variabele. (Let op: de constructor wordt maar één keer aangeroepen, namelijk als het object wordt gecreëerd.
    }

    //in de actionPerformed methode moeten we de hyperlink natuurlijk wel zetten.
    public void actionPerformed(ActionEvent event) {
        .....
        String hyperlink;
        textField3.setText("Kwartaalrapportage" + item + item2 + ".pdf");
        hyperlink = "http://www.test.nl/" + textField3;
        [b]openURI.setHyperlink(hyperlink);[/b]
    }

Het laatste wat we nu nog moeten doen is een set-methode in de OpenURI klasse maken.
Code:
public class OpenURI {
   private String hyperlink;
   ....


    public void setHyperlink(String newHyperlink) { //deze methode wordt aangeroepen vanuit de reportage klasse. De newHyperlink parameter wordt geïnitialiseerd met de waarde die wordt meegegeven bij de aanroep. In jouw geval is dit de waarde van de variabele hyperlink in de klasse Raportage.
         hyperlink = newHyperlink;
    }
}

Je openURI klasse wordt dan als volgt:
Code:
import java.net.URI;
import java.awt.Desktop;

public class OpenURI {
   private String hyperlink;

   public OpenURI() {  //onze constructor!
       hyperlink = null; //we initialiseren de variabele later.
   }

   public boolean checkDesktopSupported() {
       if( !java.awt.Desktop.isDesktopSupported() ) {

           System.err.println( "Desktop is not supported (fatal)" );
           return false;
       }

       if ( hyperlink == null ) { //ik denk dat je hier wilt kijken of je hyperlink gezet is? Dit zou je mooier in een nieuwe methode kunnen stoppen.

           System.out.println( "Usage: OpenURI [URI [URI ... ]]" );
           return false;
       }

        java.awt.Desktop desktop = java.awt.Desktop.getDesktop();

        if( !desktop.isSupported( java.awt.Desktop.Action.BROWSE ) ) {

            System.err.println( "Desktop doesn't support the browse action (fatal)" );
            return false;
       }
       return true;
   }

   public void browse() throws Exception { // ik had hier ook jouw try-catch kunnen laten staan, maar ik vang dit liever op in de hoofdklasse. Dan houd je alles mooi bij elkaar.
           java.net.URI uri = new java.net.URI( arg );
           desktop.browse( uri );
   }

   public void setHyperlink(String newHyperlink) {
        hyperlink = newHyperlink;
   }
}

Toevoeging aan onze Rapportage actionPerformed methode (naast de toevoegingen die ik hierboven heb vermeld).
Code:
 public void actionPerformed(ActionEvent event) {
        .....
        String hyperlink;
        textField3.setText("Kwartaalrapportage" + item + item2 + ".pdf");
        hyperlink = "http://www.test.nl/" + textField3;
        [b]openURI.setHyperlink(hyperlink);
        if(!openURI.checkDesktopSupported()) {
             System.exit(1); //zelf zou ik deze manier nooit gebruiken, maar ik ga even uit van jouw manier om het programma af te sluiten.
        } else {
             openURI.browse(); //we laten het openuri object eens werken :D
        }[/b]
}


Hopelijk heb je hier iets aan.

Met vriendelijke groet,
NewbiProgrammer
 
Laatst bewerkt:
Hoi Newbi,

volgens mij ben jij helemaal geen newbiprogrammeur, volgens mij doe jij dit al veel langer :)
Heel erg bedankt voor de uitleg. eindelijk iemand die uitlegt waarom iets waar staat en wat het doet. Ik ben nieuw met java en heb meer ervaring met VB, dus ik heb nog niet alles door met OO dat klopt, hehe. Ik heb een boek, maar ik vind dit stuk met 2 of meerdere klassen niet goed genoeg uitgelegd.
Ik heb de aanpassingen gedaan en snap het als ik het lees. Het zelf bedenken of toepassen is een ander verhaal.

Ik heb even de eerste methode geprobeerd en om een of andere reden zegt ie "new instance ignored"
new OpenURI(hyperlink);
Hoe kan ik dat oplossen?

In ieder geval al heel erg bedankt voor de uitleg, dat heeft al heel veel geholpen en wordt zeer gewaardeerd!
gr Lisa
 
Laatst bewerkt:
Is jouw OpenURI klasse toevallig static?

Code:
public static class OpenURI {
...
}

De term static geeft aan dat er geen object nodig is om een bepaald object of een bepaalde variabele te benaderen. Dit klinkt een beetje vaag, daarom een voorbeeldje.
Code:
public class OpenURI {
    ..


   private static final int MIJN_NUMMER = 400;

}

In het bovenstaande voorbeeld hebben wij een variabele met de naam MIJN_NUMMER in de klasse OpenURI gedefinieerd. Zonder het woord static moeten wij eerst een instantie (object) van de klasse maken (met behulp van het new keyword) om de variabele te benaderen. Indien wij het woord static gebruiken zoalsh hierboven kunnen wij de variabele benaderen zonder een object van de klasse te maken.

Deze variabele in een andere klasse dan de OpenURI klasse, op de volgende manier worden aangeroepen.
Code:
int openUriNummer = OpenURI.MIJN_NUMMER;

Zoals je ziet maken wij hier geen nieuw object aan van de openuri klasse, maar benaderen wij de variabele direct.

Terugkomend op jouw vraag. Als jouw klasse static is betekent dit dat er geen noodzaak is om het 'new'-keywoord te gebruiken, dit zorgt er namelijk voor dat je een nieuw object maakt. Dan gaat de compiler klagen, want waarom zou je een object van een klasse aanmaken als je hem ook gewoon direct kan benaderen?

TL;DR (Too long, didn't read): verwijder het woordje static in de declaratie van je OpenURI klasse.

Over het NewbiProgrammer gedeelte, ik was een 'NewbiProgrammer' toen ik me ingeschreven had op dit forum. Ik ben nu bijna klaar met m'n bachelor informatica dus een beetje java moet ik dan toch wel kunnen haha.

Veel succes met coderen en 'Happy coding'.

p.s. wil je de volgende keer, tussen [ code ] [ / code ]-tags je code bij je vraag plaatsen. Nu is het een beetje gokken wat je probleem kan zijn.
p.s.s. Ik vond net nog even een leuk stukje over wanneer je static wel en niet moet gebruiken http://tnbforum.com/viewtopic.php?f=119&t=45250 (lees de laatste twee berichten, daarin wordt handige informatie gegeven).

Met vriendelijke groet,
NewbiProgrammer
 
Laatst bewerkt:
Hoi,

ik voel me echt mega blond maar ik kom er niet uit. Als ik static toevoeg aan de openUri klasse dan mag dat niet:'modifier static not allowed here'.

Ik heb de volgende hoofdklasse:
Code:
package rapportage;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.*;
import static javax.swing.JFrame.EXIT_ON_CLOSE;

public class Rapportage extends JFrame 
implements ActionListener {

	private JComboBox combo;
	private JComboBox combo2;
	private JTextField textField;
	private JTextField textField2;
	private JTextField textField3;
	private JButton download;
	private JButton openButton;
	private JLabel kiesGemeente;
	private JLabel kiesOnderwerp;
	private JLabel gekozenBestand;
	
	public static void main(String[] args) {
		Rapportage frame = new Rapportage();
		frame.setSize(550,200);
		frame.createGUI();
		frame.setVisible(true);

	}
	private void createGUI(){
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setLocationRelativeTo(null);
		Container window = getContentPane();
		window.setLayout(new FlowLayout() );

		/* maken van de eerste combobox: kiezen uit de gemeentes
		 * 
		 */
		kiesGemeente = new JLabel("Kies uw gemeente");
		window.add(kiesGemeente);

		combo = new JComboBox();

		combo.addItem("Best");
		combo.addItem("Boxtel");
		combo.addItem("Haaren");
		combo.addItem("Nuenen");

		combo.addActionListener(this);
		window.add(combo);

		textField = new JTextField(20);
		window.add(textField);

		/* maken van de tweede combobox: kiezen van het onderwerp
		 * 
		 */

		kiesOnderwerp = new JLabel("Kies het onderwerp");
		window.add(kiesOnderwerp);

		combo2 = new JComboBox();

		combo2.addItem("WSD totaal");
		combo2.addItem("WSW");
		combo2.addItem("WWB");
		combo2.addItem("alles");

		combo2.addActionListener(this);
		window.add(combo2);

		textField2 = new JTextField(20);
		window.add(textField2);

		gekozenBestand = new JLabel("U heeft het volgende bestand gekozen");
		window.add(gekozenBestand);

		textField3 = new JTextField (40);
		window.add(textField3);

		openButton = new JButton("openen");
		openButton.addActionListener(this);
		window.add(openButton);

	}

	public void actionPerformed(ActionEvent event) {
		Object src = event.getSource();
		int index = combo.getSelectedIndex();
		String item = (String) combo.getSelectedItem();    
		int index2 = combo2.getSelectedIndex();
		String item2 = (String) combo2.getSelectedItem();   
                        
		if (src == combo){
			textField.setText("geselecteerd: " + item); 
		}
                
		else if (src == combo2){
			textField2.setText("geselecteerd: " + item2);
		}
                
		else if (src == openButton){
                        String hyperlink;
                        textField3.setText("Kwartaalrapportage" + item + item2 + ".pdf");
                        hyperlink = "http://www.test.nl/" + textField3;
                        openURI.setHyperlink(hyperlink);
                        if(!openURI.checkDesktopSupported()) {
                            System.exit(1); 
                        } else {
                        openURI.browse(); 
                        }
                        OpenURI(hyperlink); 
                    }    
                }
	}

en de OpenURI klasse aangemaakt in hetzelfde project:
Code:
package rapportage;

public class openURI {

   private String hyperlink;

   public OpenURI() {  
       hyperlink = null; 
   }

   public boolean checkDesktopSupported() {
       if( !java.awt.Desktop.isDesktopSupported() ) {

           System.err.println( "Desktop is not supported (fatal)" );
           return false;
       }

       if ( hyperlink == null ) { 

           System.out.println( "Usage: OpenURI [URI [URI ... ]]" );
           return false;
       }

        java.awt.Desktop desktop = java.awt.Desktop.getDesktop();

        if( !desktop.isSupported( java.awt.Desktop.Action.BROWSE ) ) {

            System.err.println( "Desktop doesn't support the browse action (fatal)" );
            return false;
       }
       return true;
   }

   public void browse() throws Exception { 
           java.net.URI uri = new java.net.URI( arg );
           desktop.browse( uri );
   }

   public void setHyperlink(String newHyperlink) {
        hyperlink = newHyperlink;
   }
}

de foutmelding kopieer ik ook maar even, want ik weet echt niet waar ik het moet zoeken
run:
Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: Uncompilable source code - non-static method setHyperlink(java.lang.String) cannot be referenced from a static context
at rapportage.Rapportage.actionPerformed(Rapportage.java:108)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2028)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2351)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6382)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3275)
at java.awt.Component.processEvent(Component.java:6147)
at java.awt.Container.processEvent(Container.java:2083)
at java.awt.Component.dispatchEventImpl(Component.java:4744)
at java.awt.Container.dispatchEventImpl(Container.java:2141)
at java.awt.Component.dispatchEvent(Component.java:4572)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4619)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4280)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4210)
at java.awt.Container.dispatchEventImpl(Container.java:2127)
at java.awt.Window.dispatchEventImpl(Window.java:2489)
at java.awt.Component.dispatchEvent(Component.java:4572)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:710)
at java.awt.EventQueue.access$400(EventQueue.java:82)
at java.awt.EventQueue$2.run(EventQueue.java:669)
at java.awt.EventQueue$2.run(EventQueue.java:667)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
at java.awt.EventQueue$3.run(EventQueue.java:683)
at java.awt.EventQueue$3.run(EventQueue.java:681)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:680)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

ik hoop dat iemand me kan en wil helpen, want ik kom er niet uit... :/

alvast ontzettend bedankt,
Lisa
 
Maak een object van de openURI klasse aan en roep daar de methodes op aan, zoals ik in mijn posts had aangegeven ;)

In de constructor van jouw rapportage klasse maak je een object aan van de openuri klasse

Code:
//we maken een variabele openuri.
private OpenURI openURI;

public Rapportage() {
     openURI = OpenURI(); //we initialiseren deze variabele met een nieuw object van de klasse OpenURI.
}

Nu kunnen we de methodes aanroepen in onze actionPerformed methode.
Code:
openURI.setHyperlink(hyperlink);
if(!openURI.checkDesktopSupported()) {
       System.exit(1); 
} else {
       openURI.browse(); 
}


Hier de volledige code. Je moet snappen wat ik zojuist heb gezegd, lees de voorgaande posts nog een keer door. Je moet het idee snappen, niet de kant en klare code.

Code:
package rapportage;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.*;
import static javax.swing.JFrame.EXIT_ON_CLOSE;

public class Rapportage extends JFrame 
implements ActionListener {

	private JComboBox combo;
	private JComboBox combo2;
	private JTextField textField;
	private JTextField textField2;
	private JTextField textField3;
	private JButton download;
	private JButton openButton;
	private JLabel kiesGemeente;
	private JLabel kiesOnderwerp;
	private JLabel gekozenBestand;
        private OpenURI openURI;	
[B]
//Dit is de start methode van de applicatie, niet de methode die wordt aangeroepen als je een object van de klasse maakt!![/B]
	public static void main(String[] args) {
		Rapportage frame = new Rapportage();
		frame.setSize(550,200);
		frame.createGUI();
		frame.setVisible(true);

	}
  
[B]//Deze methode wordt aangeroepen als wij een instantie van deze klasse aanmaken! (Object)[/B]
        public Rapportage() {
              openURI = new OpenURI();
        }

	private void createGUI(){
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setLocationRelativeTo(null);
		Container window = getContentPane();
		window.setLayout(new FlowLayout() );

		/* maken van de eerste combobox: kiezen uit de gemeentes
		 * 
		 */
		kiesGemeente = new JLabel("Kies uw gemeente");
		window.add(kiesGemeente);

		combo = new JComboBox();

		combo.addItem("Best");
		combo.addItem("Boxtel");
		combo.addItem("Haaren");
		combo.addItem("Nuenen");

		combo.addActionListener(this);
		window.add(combo);

		textField = new JTextField(20);
		window.add(textField);

		/* maken van de tweede combobox: kiezen van het onderwerp
		 * 
		 */

		kiesOnderwerp = new JLabel("Kies het onderwerp");
		window.add(kiesOnderwerp);

		combo2 = new JComboBox();

		combo2.addItem("WSD totaal");
		combo2.addItem("WSW");
		combo2.addItem("WWB");
		combo2.addItem("alles");

		combo2.addActionListener(this);
		window.add(combo2);

		textField2 = new JTextField(20);
		window.add(textField2);

		gekozenBestand = new JLabel("U heeft het volgende bestand gekozen");
		window.add(gekozenBestand);

		textField3 = new JTextField (40);
		window.add(textField3);

		openButton = new JButton("openen");
		openButton.addActionListener(this);
		window.add(openButton);

	}

	public void actionPerformed(ActionEvent event) {
		Object src = event.getSource();
		int index = combo.getSelectedIndex();
		String item = (String) combo.getSelectedItem();    
		int index2 = combo2.getSelectedIndex();
		String item2 = (String) combo2.getSelectedItem();   
                        
		if (src == combo){
			textField.setText("geselecteerd: " + item); 
		}
                
		else if (src == combo2){
			textField2.setText("geselecteerd: " + item2);
		}
                
		else if (src == openButton){
                        String hyperlink;
                        textField3.setText("Kwartaalrapportage" + item + item2 + ".pdf");
                        hyperlink = "http://www.test.nl/" + textField3;
[B]//we refereren hier naar de variabele die wij in onze constructor hebben gezet (een object, oftewel instantie, van de klasse openuri).[/B]
                        openURI.setHyperlink(hyperlink);
                        if(!openURI.checkDesktopSupported()) {
                            System.exit(1); 
                        } else {
                               openURI.browse(); 
                        }
                    }    
                }
	}

Lees even enkele artikelen over constructoren. http://en.wikipedia.org/wiki/Constructor_(object-oriented_programming)#Java

p.s. blond hoef je je niet te voelen, want ik ben zelf ook blond hoor haha ;)

Groet,
NewbiProgrammer
 
Laatst bewerkt:
Hey,

ik kom steeds een stapje verder. Hoofdletters en kleine letters is bijvoorbeeld ook iets waar je op moet letten (erg irritant!).
Als ik het lees snap ik het allemaal prima, hoewel ik wel vind dat je veel dingen dubbel moet doen in java, voor mijn gevoel dan in ieder geval. Zelf doen is echt nog stap 2. Ik geloof dat ik groot voorstander ben van pairprogramming. Afkijken bij iemand die het wel snapt en uit kan leggen wat ie doet :)
De hoofdklasse is nu helemaal foutloos, die doet het ( :thumb: ). Nou blijft ie hangen op in de OpenURI klasse. Met name dit stukje:
Code:
   public void browse() throws Exception { 
           java.net.URI uri = new java.net.URI(arg);
           desktop.browse(uri);
   }
beide regels vindt ie niet kunnen: 'cannot find symbol' maar die heb ik toch geimporteerd met
Code:
import java.net.URI;
import java.awt.Desktop;
aan het begin van de klasse?

Het spijt me, ik begin me echt zo'n ouwe zeur te voelen. Zoiets dat volgens mij zo simpel zou moeten zijn (in html (ik weet het, dat is geen echte taal :P) is het 1 regeltje om een nieuwe browser te openen, hier heb je er ineens bijna 50 voor nodig :/) ...
Als ik er vaker mee bezig ga, zal dat vast beter worden hehe

groetjes Lisa
 
Over de hoofd- en kleine letters ik houd de standaard java conventie aan: http://www.oracle.com/technetwork/java/javase/documentation/codeconvtoc-136057.html

Over jouw error. Imports zijn niet hetzelfde als variabelen. Een import geeft een referentie naar een bepaalde klasse of eigenlijk bestand, maar zijn geen verwijzing naar objecten op zich; variabelen verwijzen naar objecten (eigenlijk plekken in het geheugen waar de objecten zich bevinden, maar laten we niet in de details treden).

Code:
MijnKlasse object1 = new MijnKlasse();

object1 is in het bovenstaande stukje code de variabele. Deze variabele wijst naar een object. In dit geval een object, oftewel instantie, van de klasse MijnKlasse.

Je error bij desktop ontstaat doordat je de variabele desktop aanroept terwijl je die niet hebt gedeclareerd noch geïnitialiseerd. Je kan een desktop-object van de Desktop klasse krijgen (door de static 'getDesktop'-methode die zich in de Desktop klasse bevindt). Je gebruikt deze methode ook in de checkDesktopSupported methode, echter is de scope van de variabele die je daar initialiseert de methode. (Informatie over scope: http://www.comptechdoc.org/independent/web/java/object/javascope.html). Kort gezegd: deze variabele is binnen de methode gedefinieerd en heeft dan ook de methode als scope. Het object valt te bereiken vanuit andere methodes.

Ik zal jouw klasse even aanpassen. Let goed op wat er met de desktop variabele gebeurd, ik verander zijn scope door hem in de klasse te definiëren en niet in de methode! De uri error ontstaat omdat jij 'args' meegeeft aan deze methode. Wat is args? Waar is het gedefinieerd? Wil je hier niet een uri object met behulp van de hyperlink maken?

Code:
package rapportage;

import java.net.URI;
import java.awt.Desktop;

public class openURI {

   private String hyperlink;
   private Desktop desktop;

   public OpenURI() {  
       hyperlink = null;
       desktop = Desktop.getDesktop(); //door onze import hoeven wij niet het gehele pad naar de Desktop-klasse te vermelden. De compiler weet waar hij de Desktop-klassse vinden kan door de import.
   }

   public boolean checkDesktopSupported() {
       if( !java.awt.Desktop.isDesktopSupported() ) {

           System.err.println( "Desktop is not supported (fatal)" );
           return false;
       }

       if ( hyperlink == null ) { 

           System.out.println( "Usage: OpenURI [URI [URI ... ]]" );
           return false;
       }

        if( !desktop.isSupported( java.awt.Desktop.Action.BROWSE ) ) {

            System.err.println( "Desktop doesn't support the browse action (fatal)" );
            return false;
       }
       return true;
   }

   public void browse() throws Exception { 
           java.net.URI uri = new java.net.URI( hyperlink );
           desktop.browse( uri );
   }

   public void setHyperlink(String newHyperlink) {
        hyperlink = newHyperlink;
   }
}
 
Laatst bewerkt:
HIJ DOET T!!!! ik doe echt een vreugde dansje :)
ik heb bovenstaande dingen aangepast en ik moest nog een textfield naar string converteren voor de hyperlink en nou doet ie t!!!
Echt superbedankt Newbi :love:, ik was hier never nooit niet in mn eentje uitgekomen.
/zucht van verlichting....
gr en superbedankt Lisa

voor de volledigheid nog ff de code, ik zie dat ik nog wel wat imports mag verwijderen.
Code:
package rapportage;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import static javax.swing.JFrame.EXIT_ON_CLOSE;
import java.net.URI;
import java.awt.Desktop;

public class Rapportage extends JFrame 
implements ActionListener {

	private JComboBox combo;
	private JComboBox combo2;
	private JTextField textField;
	private JTextField textField2;
	private JTextField textField3;
	private JButton download;
	private JButton openButton;
	private JLabel kiesGemeente;
	private JLabel kiesOnderwerp;
	private JLabel gekozenBestand;
        private OpenURI openURI;
	
	public static void main(String[] args) {
		Rapportage frame = new Rapportage();
		frame.setSize(550,200);
		frame.createGUI();
		frame.setVisible(true);
        }
        
        public Rapportage(){
               openURI = new OpenURI();

	}
	private void createGUI(){
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setLocationRelativeTo(null);
		Container window = getContentPane();
		window.setLayout(new FlowLayout() );

		/* maken van de eerste combobox: kiezen uit de gemeentes
		 * 
		 */
		kiesGemeente = new JLabel("Kies uw gemeente");
		window.add(kiesGemeente);

		combo = new JComboBox();

		combo.addItem("best");
		combo.addItem("Boxtel");
		combo.addItem("Haaren");
		combo.addItem("Nuenen");

		combo.addActionListener(this);
		window.add(combo);

		textField = new JTextField(20);
		window.add(textField);

		/* maken van de tweede combobox: kiezen van het onderwerp
		 * 
		 */

		kiesOnderwerp = new JLabel("Kies het onderwerp");
		window.add(kiesOnderwerp);

		combo2 = new JComboBox();

		combo2.addItem("wsd-totaal");
		combo2.addItem("WSW");
		combo2.addItem("WWB");
		combo2.addItem("alles");

		combo2.addActionListener(this);
		window.add(combo2);

		textField2 = new JTextField(20);
		window.add(textField2);

		gekozenBestand = new JLabel("U heeft het volgende bestand gekozen");
		window.add(gekozenBestand);

		textField3 = new JTextField (40);
		window.add(textField3);

		openButton = new JButton("openen");
		openButton.addActionListener(this);
		window.add(openButton);

	}

	public void actionPerformed(ActionEvent event) {
		Object src = event.getSource();
		int index = combo.getSelectedIndex();
		String item = (String) combo.getSelectedItem();    
		int index2 = combo2.getSelectedIndex();
		String item2 = (String) combo2.getSelectedItem();   
                        
		if (src == combo){
			textField.setText("geselecteerd: " + item); 
		}
                
		else if (src == combo2){
			textField2.setText("geselecteerd: " + item2);
		}
                
		else if (src == openButton){
                        String hyperlink;
                        textField3.setText("http://lisaalberta.files.wordpress.com/2013/05/kwartaalrapportage" + item + item2 + ".pdf");
                        hyperlink = textField3.getText();
                        openURI.setHyperlink(hyperlink);
                        if(!openURI.checkDesktopSupported()) {
                            System.exit(1); 
                        } else {
                            try { 
                                openURI.browse();
                            } catch (Exception ex) {
                                Logger.getLogger(Rapportage.class.getName()).log(Level.SEVERE, null, ex);
                            }
                        }
                    }    
                }
	}
Code:
/*
 * met heel veel dank aan NewbiProgrammer van Helpmij.nl
 * als je er zelf niet uit komt moet je het vragen!
 */
package rapportage;
import java.net.URI;
import java.awt.Desktop;

public class OpenURI {

   private String hyperlink;
   private Desktop desktop;

   public OpenURI() {  
       hyperlink = null; 
       desktop = Desktop.getDesktop();
   }

   public boolean checkDesktopSupported() {
       if( !java.awt.Desktop.isDesktopSupported() ) {

           System.err.println( "Desktop is not supported (fatal)" );
           return false;
       }

       if ( hyperlink == null ) { 

           System.out.println( "Usage: OpenURI [URI [URI ... ]]" );
           return false;
       }

        java.awt.Desktop desktop = java.awt.Desktop.getDesktop();

        if( !desktop.isSupported( java.awt.Desktop.Action.BROWSE ) ) {

            System.err.println( "Desktop doesn't support the browse action (fatal)" );
            return false;
       }
       return true;
   }

   public void browse() throws Exception { 
           java.net.URI uri;
       uri = new java.net.URI(hyperlink);
           desktop.browse(uri);
   }

   public void setHyperlink(String newHyperlink) {
        hyperlink = newHyperlink;
   }

}
 
ik merk wel dat je mee bezig moet blijven, anders ben je het zo weer vergeten. eens kijken of ik nog wat leuks kan bedenken :)
gr Lisa
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan