Panel sichtbar/unsichtbar machen im ActionListener

Hi,
mit meiner Tabelle bin ich inzwischen schon ziemlich weit.
Danke nochmal an alle die mir bisher geholfen haben.

Jetzt wollte ich noch so eine Art Startbild einfügen,
vor dem ersten Aufrufen der Tabelle.
Das bild soll aber unsichtbar werden, wenn ich die Tabelle aufrufe und die Tabelle dementsprechend sichtbar.

Hier erstmal der ganze Code

Java:
//imports input output
import java.io.*;
import java.io.File;
import java.io.Reader;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.LineNumberReader;
import java.io.IOException;
//imports Buttons, panels etc
import javax.swing.JFrame;
import java.awt.Container;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.AbstractAction;
import javax.swing.Icon;
//imports JTable 
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
//imports JTable sortieren
import javax.swing.table.TableRowSorter;
import javax.swing.table.TableModel; 
//Action
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
//safety import 
import java.awt.*;
import javax.swing.*;
import java.util.*;


public class RfidFinder3 extends JFrame {
    private static final long serialVersionUID = 1L;
   
    private static final String[] TABLE_COLUMN_NAMES = new String[] {
        "Name", "Ort", "Nummer", "Barcode"
    };
    
    
 	
    private JTable table;
    private DefaultTableModel model;
 
    //Konstruktor
    public RfidFinder3() {
    	;
    	
        model = new DefaultTableModel(TABLE_COLUMN_NAMES, 0);
        table = new JTable(model);
        // icons einfügen
        Icon bildbuch = new ImageIcon("buch.png");			
        Icon bilddiskette = new ImageIcon("diskette.png");
        Icon bildRfid = new ImageIcon("RFID-Finder.png");
        
        enableSorting(table); //   aufruf methode   fürs sortieren
        
        Container contentPane = getContentPane();
        
        //JTable auf panel und container legen
        JPanel centerPanelTable = new JPanel(new BorderLayout());
        centerPanelTable.add(new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER));
        centerPanelTable.setVisible(true);
        //Hier sollte jetzt eigentlich centerPanelTable.setVisible(false);  stehen
        
        contentPane.add(centerPanelTable);
        
        /*RFID BIld hinzufügen
        JPanel centerPanelPicture = new JPanel(new BorderLayout());
        centerPanelPicture.add(new JLabel(bildRfid));
        centerPanelPicture.setVisible(true);
        contentPane.add(centerPanelPicture);
        */
       
        
        JPanel southPanel = new JPanel(new GridLayout(1,4));
        
        // Button für Bibliothek anzeigen
        JButton showAllObjectsButton = new JButton(new ShowAllObjectsAction(" Alle Objekte anzeigen", bildbuch));
        southPanel.add(showAllObjectsButton);
        showAllObjectsButton.setEnabled( true );
        
        JButton showFoundObjekteButton = new JButton("Gefundende Objekte anzeigen");
        southPanel.add(showFoundObjekteButton);
        showFoundObjekteButton.setEnabled( true );
        
       // Button fürs zeilen hinzufügen
        JButton newLineButton = new JButton(new newLineAction("neue Zeile"));
        southPanel.add(newLineButton);
        newLineButton.setEnabled( true );
        
        // Button fürs speichern
        JButton saveButton = new JButton(new saveAction(" Speichern",bilddiskette));
        southPanel.add(saveButton);
        saveButton.setEnabled( true );
        
        contentPane.add(southPanel, BorderLayout.SOUTH); 
    }
    
    //ActionListener für "Alles Anzeigen Button
    private class ShowAllObjectsAction extends AbstractAction {
        public ShowAllObjectsAction() {
            this(null);
        }
        public ShowAllObjectsAction(String text) {
            this(text, null);
        }
        public ShowAllObjectsAction(String text, Icon icon) {
            super(text, icon);
        }
        public void actionPerformed(ActionEvent e) {
            File file = new File("texttabelle.txt");//texttabelle.txt
            if(!file.exists()) {
                JOptionPane.showMessageDialog(null, "Die Angegebene TextdateiDatei existiert nicht.\nKann nicht fortfahren.", 
                		null, JOptionPane.ERROR_MESSAGE);
                return;
            }
            
            /*Hier habe ich mir gedacht die Panels sichtbar bzw unsichtbar zu machen
            centerPanelPicture.setVisible(false);
            centerPanelTable.setVisible(true);
            validate();
            */
            
            
            model.setRowCount(0);
            
            BufferedReader br = null;
            try{
                FileReader fr = new FileReader(file);
                br = new BufferedReader(fr);
                
                String[][] fileContent = readANSIFileToArray(br);
                
                for(String[] line:fileContent) {
                    model.addRow(line);
                }
                table.revalidate();
            }
            catch(IOException ex) {
                JOptionPane.showMessageDialog(null, "Beim lesen der Datei ist ein Fehler aufgetreten:\n" + ex.getMessage(), 
                		null,JOptionPane.ERROR_MESSAGE);
                
            } finally {
                try {
                    if(br != null) {
                        br.close(); 
                    }
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
            //
            
            }
    }
    
  //ActionListener für "Neue Zeile" Button
    private class newLineAction extends AbstractAction {
    	public newLineAction() {
            this(null);
        }
    	public newLineAction(String text) {
            this(text, null);
        }
    	public newLineAction(String text, Icon icon) {
            super(text, icon);
        }
    	public void actionPerformed(ActionEvent e) {
    		
    		String leereZeile [] = new String []
    				{"", "", "", ""};
    		model.addRow(leereZeile);
    		
    		}
    }
    
    //ActionListener für Speichern der angezeigten Tabelle
    private class saveAction extends AbstractAction{
    	public saveAction() {
            this(null);
        }
    	public saveAction(String text) {
            this(text, null);
        }
    	public saveAction(String text, Icon icon) {
            super(text, icon);
        }
    	
    	public void actionPerformed(ActionEvent e) {
    		
    		try{
    			save();} //methode save zum speichern in datei
    		catch( FileNotFoundException ez )  // Datei gibt’s nich’
    	    {
    			//System.err.println( "Datei gibt’s nicht!" );
    			JOptionPane.showMessageDialog(null, "Die Angegebene TextdateiDatei existiert nicht.\nKann nicht fortfahren.", 
                null, JOptionPane.ERROR_MESSAGE);
    		}
    		catch ( IOException ez )            // Schreib- Leseprobleme
    	    {
    			// System.err.println( "Schreib- Leseprobleme!" );
    			JOptionPane.showMessageDialog(null, "Fehler beim feststellen, der größe der Arrays!", 
                null, JOptionPane.ERROR_MESSAGE);
    	    }
    		
    	}
    }
    	
    //Methode zum speichern
    private void save() throws IOException {
       
    	FileWriter fw = new FileWriter("texttabelle.txt");
        BufferedWriter bw = new BufferedWriter(fw);
        int rowCount = 0;
        int columnCount = 0;
        int rowSize = model.getRowCount();
		int columnSize = model.getColumnCount();
        String field;
        
        while (rowSize >= (rowCount+1))
			{
			columnCount = 0;
			while (columnSize >= (columnCount+1)){
				//getValueAt ausprobiert
				//String t = (String)model.getValueAt(0, 0); 
				for (int x = 0; x<=2; x++)
				{
	    		field = (String)model.getValueAt(rowCount, columnCount);
	    		if(field == null)
	    		{field = "";}
	    		System.out.println(field);
	    		bw.write(field);
				bw.write(";");
				columnCount = columnCount + 1;
				
				}
				field = (String)model.getValueAt(rowCount, columnCount);
				if(field == null){
				field = "";
				}
				
				System.out.println(field);
				bw.write(field);
				bw.newLine();
				columnCount = columnCount + 1;
				}
			
			rowCount = rowCount +1;
			}
        bw.close();
        }
    
    
    //readANSIFILE methode
    
    private String[][] readANSIFileToArray(Reader reader) throws IOException {
        if(!(reader instanceof BufferedReader)) {
            return(readANSIFileToArray(new BufferedReader(reader)));
        }
        
        
        
        //Selber die größe des arrays festlegen
        LineNumberReader f;
        String line;
        int sizeANSIFile = 1;             //für die größe des arrays
        
        	f = new LineNumberReader(new FileReader("texttabelle.txt"));

        	while ((line = f.readLine()) != null) {
        	sizeANSIFile= f.getLineNumber();
        	}
        	f.close();	
        	
        
        BufferedReader br = (BufferedReader) reader;
        
        String[][] values = new String[sizeANSIFile][0];
        
        int lineCounter = 0;
        for(String s = null; (s = br.readLine()) != null; lineCounter++) {
            String[] lineContent = s.split(";");
            
            for(int y = 0, size = lineContent.length; y < size; y++) {
            	values[lineCounter] = lineContent;//Verbessert   values[lineCounter][y] = lineContent[y]; //Hm, values[lineCounter] = lineContent[y]; funktioniert leider nicht. Nie getestet, aber denke so müsste es auch klappen.
            }
        }
        return(values);
    }
    
    //Methode zum größe feststellen
    private int arraySize(int  readersize) throws IOException {
    	LineNumberReader g;
        String line;
        readersize = 1;             //für die größe des arrays
        
        try {
        	g = new LineNumberReader(new FileReader("texttabelle.txt"));

        	while ((line = g.readLine()) != null) {
        		readersize= g.getLineNumber();
        	}
        	g.close();	
        	} 
        catch (IOException e) {
        	JOptionPane.showMessageDialog(null, "Fehler beim feststellen, der größe der Arrays!", 
            		null, JOptionPane.ERROR_MESSAGE);
        	}
    return readersize;
    }
    
    //Methode zum Sortieren
    public void enableSorting(JTable table) { 
        DefaultTableModel model = (DefaultTableModel) table.getModel(); 
        if (model == null) 
            return; 

            TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(); 
            table.setRowSorter(sorter); 
            sorter.setModel(model); 
            // Filter zum anzeigen von nur bestimmten zeichenkombinationen
            // zur Aktivierung entkommentieren 
            //sorter.setRowFilter(RowFilter.regexFilter(".*1.*")); 
    } 
    
    
    //Testmethode
    private int test(int test){
    	return test +3;
    }
    
    //main
    public static void main (String []args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                JFrame fenster = new RfidFinder3();
                
                fenster.setTitle("RFID Finder Tabellenansicht");
                fenster.setSize(780,610);
                fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                
                fenster.setVisible(true);
                
            }
        }); 
    } 
}
//Ende RfidFinder

In Zeile 63-75
wollte ich die panels Sichtbar bzw unsichtbar setzten.

Java:
//JTable auf panel und container legen
        JPanel centerPanelTable = new JPanel(new BorderLayout());
        centerPanelTable.add(new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER));
        centerPanelTable.setVisible(true);
        //Hier sollte jetzt eigentlich centerPanelTable.setVisible(false);  stehen
        contentPane.add(centerPanelTable);
        
        /*RFID BIld hinzufügen
        JPanel centerPanelPicture = new JPanel(new BorderLayout());
        centerPanelPicture.add(new JLabel(bildRfid));
        centerPanelPicture.setVisible(true);
        contentPane.add(centerPanelPicture);
        */

unten im ActionListener (ab Zeile 113) habe ich mir gedacht
das ich einfacht false und true austausche und mit validate() das neu beschreiben "befehle"


Java:
public void actionPerformed(ActionEvent e) {
            File file = new File("texttabelle.txt");//texttabelle.txt
            if(!file.exists()) {
                JOptionPane.showMessageDialog(null, "Die Angegebene TextdateiDatei existiert nicht.\nKann nicht fortfahren.", 
                		null, JOptionPane.ERROR_MESSAGE);
                return;
            }
            
            /*Hier habe ich mir gedacht die Panels sichtbar bzw unsichtbar zu machen
            centerPanelPicture.setVisible(false);
            centerPanelTable.setVisible(true);
            validate();
            */

Hier bekomme ich aber schon die Fehlermeldung.
Alle anderen implementierten Sachen funktionieren.
Java:
centerPanelPicture.setVisible(false);
Fehler ist
centerPanelPicture cannot be resolved

Was hab ich den vergessen?

Wie immer großes Danke im voraus.
 

Volvagia

Top Contributor
Das Problem hatten wir doch schon.
Du kannst aus einer anderen Klasse nicht auf Methodenvariablen zugreifen. (Nichtmal aus einer anderen Methode der selben Klasse.)
Entweder du machst es zu einen Feld oder übergibst es per Konstruktor (und machst in der Action zu einen Feld).

Außerdem kannst du keine 2 Container an die selbe Position eins BorderLayouts hinzufügen.
 
Das Problem hatten wir doch schon.
Du kannst aus einer anderen Klasse nicht auf Methodenvariablen zugreifen. (Nichtmal aus einer anderen Methode der selben Klasse.)

Also, irgendwie ist mir das auch klar, dann aber manchmal auch nicht.
Also ich verstehe das ich nicht drauf zugreifen kann, weil es im Konstruktor steht und die Variable nicht übergeben wird. Aber wie ich das jetzt übergebe verstehe ich grade nicht.

Entweder du machst es zu einen Feld oder übergibst es per Konstruktor (und machst in der Action zu einen Feld).
Das "zu einem Feld machen" verstehe ich nicht.

Außerdem kannst du keine 2 Container an die selbe Position eins BorderLayouts hinzufügen.

Habe ich grade auch gemerkt.:D


Also ich bin jetzt eben hingegangen und habe mir das
Java:
JPanel centerPanelPicture = new JPanel(new BorderLayout());
JPanel centerPanelTable = new JPanel(new BorderLayout());

aus dem Konstruktor nach oben in die Klasse gehohlt.
Wo ja auch der ActionListener drin steht bzw. eine methode zum "switchen", die ich mir grade noch geschrieben habe.
Java:
//Methode zum Startbild tauschen
    public void switchLayout(JPanel panel1, JPanel panel2){
    	panel1.setVisible(false);
    	panel2.setVisible(true);
    }

Dann habe ich noch das "panel auf container" legen korrigiert. Danke für den Hinweis!
Java:
contentPane.add(centerPanelTable, BorderLayout.CENTER);
contentPane.add(centerPanelPicture, BorderLayout.NORTH);

Jetzt funktioniert es eigentlich so, wie ich es mir vorgestellt habe.
Aber wenn mir noch jemand das etwas elegantere
"Action zu einen Feld" machen erklären möchte, würde mich das vermutlich was für die Zukunft bringen.
Ich kann mir da jetzt grade nicht so viel drunter vorstellen. Oder stehe ich wieder auf dem Schlauch?
 

Volvagia

Top Contributor
Ein Source sagt mehr als tausend Wort:

Java:
public void methode() {
	String s = "Ich werden von einer Methodenvariable referenziert";
}
Java:
private String s;

public void methode() {
	s = "Ich werden von einer Instanzvariable/Feld referenziert";
}

Aber nur Variablen zu Instanzvariablen machen, die du auch wirklich in 2 Methoden, die sich nicht gegenseitig aufrufen brauchst. Sonst verwirrt das am Ende nur.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Soloeco JList/DefaultListModel: Wie kann ich ein Panel hinzufügen? Java Basics - Anfänger-Themen 1
P Herausfinden, auf welchem Panel des CardLayouts man gerade ist? Java Basics - Anfänger-Themen 12
CptK Interface 2 von einander unabhängige Frames mit Panel gleichzeitig nutzen Java Basics - Anfänger-Themen 66
O Klappt nicht: Ein Panel neu zeichnen Java Basics - Anfänger-Themen 3
L Panel verkleinert sich unerklärlicherweise Java Basics - Anfänger-Themen 7
N Mehrere Forms auf einem Panel Java Basics - Anfänger-Themen 6
M Panel erstellen, welches ein Control erhält. Ausgabe soll über einen Stream erfolgen. Java Basics - Anfänger-Themen 0
J Panel auf Hintergrund Java Basics - Anfänger-Themen 5
J Panel und Menü Java Basics - Anfänger-Themen 6
S timer funktion mit javax panel Java Basics - Anfänger-Themen 3
D Hintergrund jpg auf Panel Java Basics - Anfänger-Themen 3
D Bild zum Panel hinzufügen Java Basics - Anfänger-Themen 8
A Frage zu einer Methode - Panel arbeitet nicht ordnungsgemäß Java Basics - Anfänger-Themen 2
F Neues Panel und Button unsichtbar Java Basics - Anfänger-Themen 10
S Image in Panel laden Java Basics - Anfänger-Themen 12
D Panel von unten herausfahren Java Basics - Anfänger-Themen 2
S mehrere Rechtecke in ein Panel Java Basics - Anfänger-Themen 2
L panel verschmiert beim draggen! Java Basics - Anfänger-Themen 2
J Panel + Label anzeigen - Ich kriege es nicht hin Java Basics - Anfänger-Themen 3
S Swing, Gridbaglayout Panel in Panel;funzt nicht!! Java Basics - Anfänger-Themen 3
S Swing, Panel über Hintergrundbild!! Java Basics - Anfänger-Themen 6
C Panel und Label überdecken sich Java Basics - Anfänger-Themen 2
J JLabels in Panel Aktualisieren Java Basics - Anfänger-Themen 5
H Panel in Variable setzen möglich? Java Basics - Anfänger-Themen 10
M Spezielles Panel fade in / out Java Basics - Anfänger-Themen 5
C Panel Hintergrundfarbe per AdjustmenListenmer ändern Java Basics - Anfänger-Themen 4
D GUI: Panel in Panel laden Java Basics - Anfänger-Themen 10
R Eingefärbtes Panel wird in Frame nicht angezeigt Java Basics - Anfänger-Themen 10
eLogic Panel hinzufügen Java Basics - Anfänger-Themen 4
Nic.o Panel während Ladevorgang einblenden Java Basics - Anfänger-Themen 12
B PacMan: Panel aktualisieren Java Basics - Anfänger-Themen 2
D Eingabe aus Dialog, Ergebnis an Panel Java Basics - Anfänger-Themen 2
Z JFileChooser/ Panel + Menüproblem Java Basics - Anfänger-Themen 3
J GridLayout auf Panel zentrieren? Java Basics - Anfänger-Themen 2
G Aus eigenem Panel dieses Löschen Java Basics - Anfänger-Themen 2
J Panel-übergreifende Kommunikation Java Basics - Anfänger-Themen 3
M Panel ersetzen funktioniert nicht Java Basics - Anfänger-Themen 2
M BorderLayout zickt! Ein Panel versteckt das andere! Java Basics - Anfänger-Themen 6
K Panel fixieren und nicht zentrieren Java Basics - Anfänger-Themen 2
F Zeichnen auf einem Panel Java Basics - Anfänger-Themen 2
N Panel entfernen Java Basics - Anfänger-Themen 2
B Zugriff auf JTextPane in einem anderen Panel Java Basics - Anfänger-Themen 2
H TabbedPane: wie schalte ich auf ein bestimmtes panel? Java Basics - Anfänger-Themen 2
G Bild in Panel oder canvas einfügen Java Basics - Anfänger-Themen 3
kulturfenster Panel in Frame integrieren Java Basics - Anfänger-Themen 5
H Paint Methode malt nicht im Panel Java Basics - Anfänger-Themen 4
J Probleme mit Visual Editor Komponenten auf Panel legen Java Basics - Anfänger-Themen 4
M Panel ausgrauen (disable) Java Basics - Anfänger-Themen 2
K Component vom einem Panel löschen ? Java Basics - Anfänger-Themen 14
C Panel wird nicht übermalt Java Basics - Anfänger-Themen 6
P Swing Textarae so groß wie Panel? Java Basics - Anfänger-Themen 2
G Rekursives aufrufen führt zu StackOverflowError Panel durchl Java Basics - Anfänger-Themen 5
T JMenuItems werden von Komponente in Panel verdeckt Java Basics - Anfänger-Themen 11
G Auf ein Panel malen Java Basics - Anfänger-Themen 16
D Event mit n-Button8s) von einem Panel Java Basics - Anfänger-Themen 9
Z Wie übergebe ich einer MyFrame-Klasse ein Panel? Java Basics - Anfänger-Themen 8
A g=panel.getGraphics() im Thread => Nullpointer Java Basics - Anfänger-Themen 9
S Bilder bleiben auf einem Panel nicht gezeichnet Java Basics - Anfänger-Themen 6
L Java Control Panel Java Basics - Anfänger-Themen 5
A Swing Schriftfarbe für komplettes Panel ändern Java Basics - Anfänger-Themen 2
G Panel Java Basics - Anfänger-Themen 4
B Kann man mit XMl ein Panel erstelln Java Basics - Anfänger-Themen 2
R Einfügen einer eigenen methode in ein Panel Java Basics - Anfänger-Themen 5
E Komponenten auf Panel positionieren Java Basics - Anfänger-Themen 3
G aus Thread auf Panel zeichnen Java Basics - Anfänger-Themen 22
G Text in Panel anordnen Java Basics - Anfänger-Themen 6
M Ein Panel in ein Panel laden Java Basics - Anfänger-Themen 3
S Graphic im Panel änder durch JSlider Java Basics - Anfänger-Themen 2
P Ball auf Panel hüpfen lassen Java Basics - Anfänger-Themen 4
T Panel entfernen Java Basics - Anfänger-Themen 4
T Panel entfernen, neues hinzufügen Java Basics - Anfänger-Themen 2
A Probleme mit Panel und GUI Java Basics - Anfänger-Themen 4
D Warum färbt er das unter Panel nicht ein? Java Basics - Anfänger-Themen 3
V Panel durchsichtig machen Java Basics - Anfänger-Themen 4
D Desktop auf nem Panel Java Basics - Anfänger-Themen 6
B Panel bei Mausklick färben Java Basics - Anfänger-Themen 3
S Keyevent in Panel Java Basics - Anfänger-Themen 5
C Add / Remove Panel Java Basics - Anfänger-Themen 2
C zweites Panel auf Knopfdruck anzeigen Java Basics - Anfänger-Themen 2
O größe von panel mit gridlayout Java Basics - Anfänger-Themen 9
G Panel in Methode erneut aufrufen Java Basics - Anfänger-Themen 5
B Panel mit Radiobuttons als eigene Klasse Java Basics - Anfänger-Themen 4
G aktueller Panel, der in BorderLayout.SOUTH angeordnet ist Java Basics - Anfänger-Themen 11
A Panel und getContentPane() ? Java Basics - Anfänger-Themen 2
S panel leeren Java Basics - Anfänger-Themen 2
S Panel / setbounds Java Basics - Anfänger-Themen 3
R Image lässt sich nicht in ein Panel einfügen Java Basics - Anfänger-Themen 3
G Paint auf Panel Java Basics - Anfänger-Themen 4
G JPG in einem Panel anzeigen lassen Java Basics - Anfänger-Themen 3
A Panel überschreiben Java Basics - Anfänger-Themen 4
X GUI: neues Panel in einer Applikation anzeigen lassen Java Basics - Anfänger-Themen 2
G Panel in Container einfügen Java Basics - Anfänger-Themen 7
N need help in panel Java Basics - Anfänger-Themen 8
B Panel mit Bild wird nicht angzeigt Java Basics - Anfänger-Themen 16
M Inhalt Panel,Frame löschen Java Basics - Anfänger-Themen 8
S Image von einem Panel erzeugen! Java Basics - Anfänger-Themen 2
A Komponenten im Panel ausrichten Java Basics - Anfänger-Themen 5
G Panel zur Laufzeit laden/entladen Java Basics - Anfänger-Themen 2
S Neues Fenster/Panel nach Knopfdruck Java Basics - Anfänger-Themen 2
C Grafik in einem Panel als Bild exportieren Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben