Avatar billede thesun Nybegynder
07. maj 2004 - 12:52 Der er 14 kommentarer

JFileChooser problem

Er der nogen der har en god ide om hvad der skal skrives i denne kode for at få knapperne save og cancel til at virke ? Den er forresten genereret i netbeans.


import javax.swing.JFileChooser;

public class GUI_Eksport extends javax.swing.JPanel {
   
    /** Creates new form GUI_Eksport */
    public GUI_Eksport() {
        initComponents();
    }
   
      private void initComponents() {
        saveFile = new javax.swing.JFileChooser();

        setLayout(new java.awt.BorderLayout());

        setBorder(new javax.swing.border.EtchedBorder());
        setOpaque(false);
        saveFile.setBackground(new java.awt.Color(224, 223, 227));
        saveFile.setDialogType(javax.swing.JFileChooser.SAVE_DIALOG);
        saveFile.setOpaque(true);
        saveFile.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                saveFileActionPerformed(evt);
            }
        });

        add(saveFile, java.awt.BorderLayout.CENTER);

    }

    private void saveFileActionPerformed(java.awt.event.ActionEvent evt) {
             
    }
   
   
    // Variables declaration - do not modify
    private javax.swing.JFileChooser saveFile;
    // End of variables declaration
   
}
Avatar billede aslan Nybegynder
07. maj 2004 - 17:00 #1
Den kode du gerne vil have udført når der bliver trykket save knappen skal være her:

    private void saveFileActionPerformed(java.awt.event.ActionEvent evt) {

              // kode du gerne vil have udført...
    }
Avatar billede mikkelbm Nybegynder
07. maj 2004 - 18:22 #2
Det jeg plejer at gøre er følgende:

JFileChooser chooser = new JFileChooser();
               
int choise = chooser.showSaveDialog(this);
       
if (choise == JFileChooser.APPROVE_OPTION)
{
    // Din kode for hvad der skal laves
}

else
{
    // Hvis der trykkes cancel
}
Avatar billede thesun Nybegynder
07. maj 2004 - 18:37 #3
Jeg er nogenlunde med på hvor jeg skal skrive koden, jeg er mere usikker på hvordan den skal formuleres

Save funktionen skal gemme det "indhold" som jeg ønsker at gemme som en *.txt fil i det dir jeg har markeret i JFileChooser

Cancel funktionen skal bare eks. fjerne det panel som JFileChooser er lagt i

Kan i ikke vise nogle konkrete kodeeksempler der bækker noget af det ovenstående? Så jeg har noget lidt mere konkret at arbejde med??

Hvis i har noget for en en hent ( markere en fil som så hentes) så må i også meget gerne vise den.
Avatar billede thesun Nybegynder
07. maj 2004 - 18:38 #4
dækker skulle der stå *L*
Avatar billede mikkelbm Nybegynder
07. maj 2004 - 19:11 #5
Du kan måske finde lidt inspiration i dette eksempel:

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

import java.io.*;

public class Test extends JFrame
{
    private JTextArea area = new JTextArea();
    private JButton button = new JButton("Gem");
   
    public Test()
    {
        setSize(300, 300);
       
        button.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                save();
            }
        });
       
        this.getContentPane().add(area, BorderLayout.CENTER);
        this.getContentPane().add(button, BorderLayout.SOUTH);
    }
   
    public void save()
    {
        JFileChooser chooser = new JFileChooser();
        int choise = chooser.showSaveDialog(this);
       
        File file = chooser.getSelectedFile();
       
        if (choise == JFileChooser.APPROVE_OPTION && file != null)
        {
            try
            {
                FileWriter writer = new FileWriter(file);
                PrintWriter outfile = new PrintWriter(writer);
               
                String text = area.getText();
                String[] t = text.split("\n");
               
                for (int j = 0; j<t.length; j++)
                    outfile.println(t[j]);
               
                outfile.close();
            }
            catch (Exception ex)
            {
                ex.printStackTrace();
            }   
        }
    }
   
    public static void main(String[] args)
    {
        new Test().show();
    }
}
Avatar billede thesun Nybegynder
08. maj 2004 - 10:54 #6
mikkelbm kigger lige nærmere på dit oplæg

Er der ikke andre der har forslag til samme eller de andre 2 muligheder som er beskrevet tidligere?
Avatar billede _carsten Nybegynder
09. maj 2004 - 14:09 #7
Jeg ville bruge mikkelbm's forslag, derfor skal du alligevel have en lidt sjov en

JFileChooser er jo lavet i java, og bygget op af paneler, knapper og labels, så det er kun et spørgsmål om at finde dem

Her er en anden måde.

import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;

public class JFrame_4 extends javax.swing.JFrame {

    public JFrame_4() {
        initComponents();
       
        cancel = new JButton();
        Component[] comp = jFileChooser1.getComponents();
       
        JPanel panel = (JPanel)comp[3];
        comp = panel.getComponents();
       
        panel = (JPanel)comp[3];
        comp = panel.getComponents();
       
        cancel = (JButton)comp[1];
        cancel.setText("Rolig, jeg styrer 'Cancel'");
        cancel.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                jPanel1.remove(jFileChooser1);
                repaint();
            }
           
        });
    }
   
    private void initComponents() {
        jPanel1 = new javax.swing.JPanel();
        jFileChooser1 = new javax.swing.JFileChooser();

        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });

        jPanel1.setLayout(new java.awt.BorderLayout());

        jPanel1.add(jFileChooser1, java.awt.BorderLayout.CENTER);

        getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);

        pack();
    }

    private void exitForm(java.awt.event.WindowEvent evt) {
        System.exit(0);
    }
   
    public static void main(String args[]) {
        new JFrame_4().show();
    }
    private javax.swing.JFileChooser jFileChooser1;
    private javax.swing.JPanel jPanel1;
    private JButton cancel;
}


Men brug mikkelbm's model, det er nemmere - du for et problem hvis SUN pludselig ændrer i JFileChooser
Avatar billede mikkelbm Nybegynder
10. maj 2004 - 17:42 #8
Kommet videre?
Avatar billede thesun Nybegynder
10. maj 2004 - 22:34 #9
_carsten: den kommer med fejl for følgende linie

JPanel panel = (JPanel)comp[3];

java.lang.ArrayIndexOutOfBoundsException: 3
        at JFrame_4.<init>(JFrame_4.java:25)
        at JFrame_4.main(JFrame_4.java:66)

------------------------------------------------------------
mikkelbm: det er et fint eks. du har givet der, men jeg mangler noget på de knapper jeg skal bruge, sådan som jeg har forstået, skal det saææet op som en form for if-else sætning, hvor man først har koden for en eks. save eller load funktion, og dernæst noget kode for en cancel funktion.(din beskrivelse fra tidligere)

Jeg har prøvet at kigge i div. bøger, og på nettet, men det lykkes ikke rigtigt at få det til at virke i min kode (se tidligere).

jeg skal bruge til 2 JFilechooser, derfor både save og load.
Avatar billede _carsten Nybegynder
10. maj 2004 - 22:49 #10
Prøv med JPanel panel = (JPanel)comp[2];

Hvilken java version bruger du ivørigt ??
Avatar billede mikkelbm Nybegynder
10. maj 2004 - 23:01 #11
Følgende eksempel kan både åbne og gemme - og der er også den der if sætning du efterlyser :)

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

import java.io.*;

public class Test extends JFrame
{
    private JTextArea area = new JTextArea();
    private JButton button = new JButton("Gem");
    private JButton open = new JButton("Åbn");
   
    public Test()
    {
        setSize(300, 300);
       
        this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
       
        button.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                save();
            }
        });
       
        open.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                open();
            }
        });
       
        JPanel panel = new JPanel(new BorderLayout());
        panel.add(button, BorderLayout.WEST);
        panel.add(open, BorderLayout.EAST);
       
        this.getContentPane().add(new JScrollPane(area), BorderLayout.CENTER);
        this.getContentPane().add(panel, BorderLayout.SOUTH);
    }
   
    public void open()
    {
        JFileChooser chooser = new JFileChooser();
        chooser.setMultiSelectionEnabled(false);
        int choise = chooser.showOpenDialog(this);
       
        File file = chooser.getSelectedFile();   
       
        if (choise == JFileChooser.APPROVE_OPTION && file != null)
        {
            try
            {
                FileReader writer = new FileReader(file);
                BufferedReader infile = new BufferedReader(writer);
               
                String line;
               
                while ((line = infile.readLine()) != null)
                {
                    area.append(line + "\n");   
                }
            }
            catch (Exception ex)
            {
                ex.printStackTrace();
            }   
        }
       
        else if (choise == JFileChooser.CANCEL_OPTION)
        {
            JOptionPane.showMessageDialog(this, "Du har ikke valgt nogen fil - nu lukkes programmet!");
            this.dispose();
            System.exit(1);   
        }
    }
   
    public void save()
    {
        JFileChooser chooser = new JFileChooser();
        int choise = chooser.showSaveDialog(this);
       
        File file = chooser.getSelectedFile();
       
        if (choise == JFileChooser.APPROVE_OPTION && file != null)
        {
            try
            {
                FileWriter writer = new FileWriter(file);
                PrintWriter outfile = new PrintWriter(writer);
               
                String text = area.getText();
                String[] t = text.split("\n");
               
                for (int j = 0; j<t.length; j++)
                    outfile.println(t[j]);
               
                outfile.close();
            }
            catch (Exception ex)
            {
                ex.printStackTrace();
            }   
        }
       
        else if (choise == JFileChooser.CANCEL_OPTION)
        {
            JOptionPane.showMessageDialog(this, "Du har ikke valgt nogen fil - nu lukkes programmet!");
            this.dispose();
            System.exit(1);   
        }
    }
   
    public static void main(String[] args)
    {
        new Test().show();
    }
}


Men jeg kan nu ikke se hvorfor du skal have fat i de forskellige knapper, når du kan spørge på hvilken en der er trykket på???
Avatar billede mikkelbm Nybegynder
15. maj 2004 - 02:37 #12
Hmmm. Er det bare mig, eller mangler der ikke nogle indlæg i denne tråd?
Avatar billede mikkelbm Nybegynder
18. maj 2004 - 17:37 #13
Lukketid?
Avatar billede mikkelbm Nybegynder
01. juli 2004 - 18:30 #14
???
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester