Toon posts:

[Java] - Werkbalk verdwijnt, bestand opent niet

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo Ik ben al een tijdje bezig om een tekstverwerker te bouwen. Eerst had het programma een Jsplitpane als Layout. Die heb ik inmiddels vervangen door een Borderlayout. Sindsdien werkt het programma niet meer na behoren. Als ik een bestand probeer te openen dan verdwijnt de soort van werkbalk en wordt het bestand niet geopent. Ik heb geprobeerd om de JTextArea te vergroten of te verkleinen en verder heb ik de methods readFile en WriteFile private gemaakt. Ik krijg overigens geen compiler errors. Hier is het te downloaden.*zip*
als je het zelf wil uitproberen.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.io.*;
public class tekstverwerker extends JFrame implements ActionListener{
    JButton opslaan = new JButton("Opslaan");
    JLabel bestand = new JLabel("Bestand:",JLabel.CENTER);
    JPanel m = new JPanel();
    JTextField file = new JTextField(20);
    JLabel lettertype = new JLabel("Lettertype",JLabel.CENTER);
    JTextArea edit = new JTextArea(50,50);
    JScrollPane scroll = new JScrollPane(edit);
    JButton exit = new JButton("Exit");
    JComboBox LookAndFeel = new JComboBox();
    JComboBox font = new JComboBox();
        public tekstverwerker(){
            setUndecorated(false);
            Container c = getContentPane();
            c.add(m,BorderLayout.NORTH);
            c.add(scroll,BorderLayout.SOUTH);
            c.add(m);c.add(scroll);
            m.add(bestand);m.add(file);
            m.add(opslaan);m.add(LookAndFeel);
            m.add(exit);
            
            
            // JComboBox addItem
            LookAndFeel.addItem("Metal");
            LookAndFeel.addItem("System");
            LookAndFeel.addItem("Motif");
                
            font.addItem("Times New Roman");
            font.addItem("SansSerif");
            font.addItem("Serif");

            //add ActionListener
            file.addActionListener(this);
            opslaan.addActionListener(this);
            exit.addActionListener(this);
            LookAndFeel.addActionListener(this);
            font.addActionListener(this);
            
            setSize(700,700);
            setVisible(true);
            setDefaultCloseOperation(EXIT_ON_CLOSE);
        }
            public void actionPerformed(ActionEvent e){
                if(e.getSource() == file)
                readFile(file.getText());
                else if(e.getSource() == opslaan)
                saveFile(file.getText());
                else if(e.getSource() == exit)
                System.exit(0);
                if(e.getSource() == font){
                if(font.getSelectedIndex() == 0)
                edit.setFont(new Font("TimesRoman", Font.PLAIN, 12));
                if(font.getSelectedIndex() == 1)
                edit.setFont(new Font("SansSerif",Font.PLAIN, 12));
                if(font.getSelectedIndex() == 2);
                edit.setFont(new Font("Serif",Font.PLAIN, 12));
                }
                if(e.getSource() == LookAndFeel){
                String name = "";
                if(LookAndFeel.getSelectedIndex() == 1)
                name = UIManager.getSystemLookAndFeelClassName();
                else if(LookAndFeel.getSelectedIndex() == 0)
                name = "javax.swing.plaf.metal.MetalLookAndFeel";
                else if(LookAndFeel.getSelectedIndex() == 2) 
                name = "com.sun.java.swing.plaf.motif.MotifLookAndFeel";
                try {
                    UIManager.setLookAndFeel(name);
                    SwingUtilities.updateComponentTreeUI(this);
                }
                catch(Exception ex) {} 
                }
            }
            
        private void readFile(String filename){
            try{
            FileReader r = new FileReader(filename);
            edit.read(r, null);
            }
            catch (IOException e){
            
            }
        }
        private void saveFile(String filename){
            try{
            FileWriter w = new FileWriter(filename);
            edit.write(w);
            }
            catch (IOException e) {}
        }
        
    public static void main(String[]args){
        tekstverwerker t = new tekstverwerker();
    }
}


Alvast Bedankt

keffie91

[ Voor 0% gewijzigd door Creepy op 25-05-2008 22:07 ]


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:13

Creepy

Tactical Espionage Splatterer

En ben je zelf al aan het debuggen geslagen? Zo nee, dan mag je dat toch echt in eerste instantie zelf doen. Je code dumpen en hopen dat wij het voor je gaan oplossen is niet de bedoeling.

Kan je aangeven wat je zelf al hebt geprobeerd en wat daar niet mee lukte? Zie ook Programming Beleid - De Quickstart zodat je weet wat we van je verwachten voordat je een topic opent ;)

Je link naar de download heb ik verwijderd. Code posten is prima maar post alleen de relevante code (dus niet alle!)

[ Voor 12% gewijzigd door Creepy op 25-05-2008 22:07 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 20:06

Robtimus

me Robtimus no like you

Verwijderd schreef op zondag 25 mei 2008 @ 20:02:
Java:
1
2
3
4
5
Container c = getContentPane();
c.add(m,BorderLayout.NORTH);
c.add(scroll,BorderLayout.SOUTH);
c.add(m);
c.add(scroll);
Hier gaat het al mis.

Je voegt eerst de JPanel (wat voor naam is "m" nou weer :?) toe aan de bovenkant van je content pane, gevolgd door de JScrollPane aan de onderkant.
Vervolgens voeg je je JPanel toe nog een keer toe, in het midden. Gevolg: hij verdwijnt aan de bovenkant. Daarna voeg je je JScrollPane nog een keer toe, ook in het midden. Gevolg: je JScrollPane verdwijnt aan de onderkant, je JPanel wordt verwijderd en je JScrollPane blijft over in het midden.

Kijk hier eens goed naar, en beslis eens goed wat je ECHT wilt.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Verwijderd

Topicstarter
Bedankt. Die fout had ik zelf ook al ontdekt en verbeterd. Daarnaast heb ik de complete code gedebugt met Eclipse en nog een keer met de hand. Eclipse vond geen bugs en ik zelf ook niet. Ik begin het idee te krijgen dat het niet aan de code zelf ligt.

Ik heb het stukje relevante code nu zo:
code:
1
2
3
4
5
6
Container c = getContentPane();
c.add(m,BorderLayout.NORTH);
c.add(scroll,BorderLayout.SOUTH);
m.add(bestand);m.add(file);
m.add(opslaan);m.add(LookAndFeel);
m.add(font);m.add(exit);


maar nog steeds hetzelfde probleem.

keffie91

[ Voor 35% gewijzigd door Verwijderd op 26-05-2008 17:15 ]


  • Herko_ter_Horst
  • Registratie: November 2002
  • Niet online
Er is nog wel het een en ander te verbeteren aan je code... Met name die God object ActionListener implementatie doet pijn aan de ogen.

Neem eens een tutorial door over het bouwen van Swing applicaties en het MVC model (de uitkomst zou moeten zijn dat je gedrag en presentatie moet splitsen, over meerdere classes).

Exceptions afvangen zonder op z'n minst de melding te dumpen op System.out is hoe dan ook een BIG no-no. Dit gaat je zeker niet helpen fouten te vinden.

M.b.t. tot debuggen in Eclipse: dit soort programmeerfouten gaat een debugger niet voor je vinden. Met de debugger kun je wél (proberen) na te gaan of de variabelen op een bepaald punt de waardes bevatten die JIJ verwacht dat ze bevatten. Doen ze dat niet, dan weet je iets beter waar je kan kijken.

En nog een Eclipse tip: Ctrl-Shift-F.

Quick-fix voor dit probleem: zet je scrollpane eens in BorderLayout.CENTER.

[ Voor 20% gewijzigd door Herko_ter_Horst op 26-05-2008 17:41 ]

"Any sufficiently advanced technology is indistinguishable from magic."


Verwijderd

Topicstarter
Ik heb nu een goede tut gevonden over het MVC model. Ik ga het programma wel helemaal opnieuw schrijven en hopen dat het nu beter gaat.

bedankt

keffie91
Pagina: 1