Archief - [JAVA] JFrame + JPanel oproepen in programma

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Scr1fle

Legacy Member
Beste ik zit met een probleem waar ik niet direct een oplossing vind op het web en hoopte op hulp van mensen die het beter kunnen dan.

Het zit zo , ik moet een programma coderen voor een bedrijfje (gip opdracht tso) maar ik zit vast met een vervelend probleem. Ik maak namelijk een inlogscherm (nu nog zonder databases , dient puur voor te testen atm) waar ik een gebruikersnaam en wachtwoord invul. Indien deze correct zijn moet deze een ANDER JFrame openen met het bijhorende JPanel. Maar ik vind niet hoe ik deze kan oproepen :crazy:

Dus mijn vraag is kan iemand mij helpen of een tip geven ( wat ook goed is!) want ik vind het niet...

code JFrame inlogscherm

Code:
package gipc.s;

import javax.swing.JFrame;


public class GIPCS extends JFrame {

    
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setSize(400, 500);
        frame.setLocation(100,10);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setTitle("Inlogscherm");
        frame.setContentPane(new Inlogscherm());
        frame.setVisible(true);
        
    }
    
}
code JPanel (Inlogscherm.java)
Code:
package gipc.s;




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


public class Inlogscherm extends JPanel {
      private JTextField username,wachtwoord;
      private JButton inloggen;
      private JLabel tekst1,tekst2,fotoke;
      private JFRAMEMainboard mainboard;
    
     
      
      
      
    public Inlogscherm(){
      
        setLayout(null);
      
        mainboard = new JFRAMEMainboard();
      
        
        username = new JTextField();
        wachtwoord = new JTextField();
        inloggen = new JButton("Log in");
        tekst1 = new JLabel("Gebruikersnaam");
        tekst2 = new JLabel("Wachtwoord");
        
        fotoke = new JLabel("Hier komt een foto");
        
        
        tekst1.setBounds(30, 180, 100, 25);
        tekst2.setBounds(30, 220, 100, 25);
        
        username.setBounds(150, 180, 100, 25);
        wachtwoord.setBounds(150, 220, 100, 25);
        inloggen.setBounds(150,270,100,40);
        
        fotoke.setBounds(150,80,100,100);
       
        inloggen.addActionListener(new kh());
        
        
        add(username);
        add(wachtwoord);
        add(inloggen);
        add(tekst1);
        add(tekst2);
        add(fotoke);
        
        
    }  
    
    
    class kh implements  ActionListener{
      public void actionPerformed(ActionEvent e) {
          
          if(e.getSource() == inloggen){
              if (username.equals("X") && wachtwoord.equals("Y")) {
                  
                  
              }
             
              mainboard.setVisible(true);
              
          }
       
       
       
        
        }
    
    }
    
}
code van 2de JFRAME
Code:
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package gipc.s;

import javax.swing.JFrame;

/**
 *
 * @author servaas
 */
public class JFRAMEMainboard extends JFrame  {
     public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setSize(800, 800);
        frame.setLocation(100,10);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setTitle("Mainboard");
        frame.setContentPane(new Mainboard());
        frame.setVisible(true);
        
    }
    
}

code Mainboard 2de JPanel
Code:
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package gipc.s;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;

/**
 *
 * @author servaas
 */
public class Mainboard extends JPanel {
    private JLabel CS,info, admin;
    private JButton klanten,gegevenszoeken,opnamebestelling,afmelden,leverancierbestelling,beheeraccounts,gegevensbeheren,boekhouden;
    
    
    
    public Mainboard(){
        
        setLayout(null);
        
        CS = new JLabel("Hier komt een foto");
        info = new JLabel("Carpentier en Spiesschaert. De beste klerenwinkel van het hele land!");
        admin = new JLabel("Enkel voor de admindoeleinden");
        
        klanten = new JButton("Klanten toevoegen");
        gegevenszoeken = new JButton("Productgegevens opzoeken");
        opnamebestelling = new JButton("Opname");
        afmelden = new JButton("Afmelden");
        leverancierbestelling = new JButton("Bestelling plaatsen bij leverancier(s)");
        beheeraccounts = new JButton("Accounts beheren");
        gegevensbeheren = new JButton("Productgegevens beheren");
        boekhouden = new JButton("Boekhouden");
        
        info.setBounds(350,140,500,50);
        
        CS.setBounds(60,140,200,50);
        
        
        klanten.setBounds(20,200,200,50);  
        gegevenszoeken.setBounds(20,260,200,50);  
        opnamebestelling.setBounds(20,320,200,50); 
        afmelden.setBounds(20,380,200,50);
        
        admin.setBounds(20,440,200,50);
        leverancierbestelling.setBounds(20,500,200,50);
        beheeraccounts.setBounds(20,560,200,50);
        gegevensbeheren.setBounds(20,620,200,50);
        boekhouden.setBounds(20,680,200,50);
        
        
        add(info);
        add(klanten);
        add(CS);
        add(gegevenszoeken);
        add(opnamebestelling);
        add(afmelden);
        add(admin);
        add(leverancierbestelling);
        add(beheeraccounts);
        add(boekhouden);
        add(gegevensbeheren);
        
        
        
        
    }
}
met deze stukken code krijg ik enkel een leeg jframe bij het inloggen

alles in netbeans gecodeerd trouwens (allee poging tot coderen :lol: )

Link naar layout van het programma zodat je het kan bekijken ;) http://sdrv.ms/1cAQCJ6

Prior

Legacy Member
Ik zou opteren voor een Model - View - Controller (MVC) waar je inlogscherm en mainbord dienst doet als een controller (extends JPanel is hier oké) en waar je enkel 1 View (extends JFrame) gebruikt om te switchen van schermen (mainboard < of > inlogscherm) die als kaarten worden ingesteld met behulp van een CardLayout.

Er staat geen limiet op de controllers in een mvc framework met een cardlayout.

Meer info over een Cardlayout : How to Use CardLayout (The Java&#8482; Tutorials > Creating a GUI With JFC/Swing > Laying Out Components Within a Container)

View:
public class View extends JFrame {
// maak een hoofdvenster aan (frame) en ken een titel toe aan dit venster
JFrame jf = new JFrame("Jframe");

// een hoofdpaneel voor een CardLayout
static JPanel hoofdpaneel = new JPanel(new CardLayout());

// inlogscherm en mainboard als subpaneel
JPanel inlogscherm = new Inlogscherm();
JPanel mainboard = new Mainboard();

public View(){
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setSize(600, 300);

// bevestig subpanelen aan het hoofdpaneel
hoofdpaneel.add(inlogscherm);
hoofdpaneel.add(mainboard);

// bevestig het hoofdpaneel aan het hoofdvenster (frame)
jf.add(hoofdpaneel);

// centreert het hoofdvenster (frame) op het scherm
jf.setLocationRelativeTo(null);

// toon het hoofdvenster (frame) met zijn gekoppelde hoofdpaneel en subpanelen op het scherm
jf.setVisible(true);

// zorgt ervoor dat het hoofdvenster (frame) niet meer geresized kan worden qua grootte
jf.setResizable(false);
}

Dan je Inlogscherm klasse (Controller) koppelen aan Cardlayout:
public class Inlogscherm extends JPanel {

private JButton knop1;

public Inlogscherm(){
knop1= new JButton("eerste knop");

knop1.addActionListener(this);

// methode voor ActionListener
public void actionPerformed(ActionEvent e)
{
// kijk of de knop1 ingedrukt werd
if(e.getSource()== knop1)
{
// roep het hoofdpaneel "hoofdpaneel" aan, uit onze "View" met bijhorende CardLayout
CardLayout cardLayout = (CardLayout)View.hoofdpaneel.getLayout();

// schakel over naar de volgende kaart, oftewel het subpaneel dat aan het hoofdpaneel is bevestigt
// in deze applicatie zijn er maar 2 kaarten als subpanelen
// die elk hun eigen controller hebben
cardLayout.next(View.hoofdpaneel);
}
}
}

Ook je Mainboard klasse (Controller) koppelen aan Cardlayout:
public class Mainboard extends JPanel {

private JButton knop2;

public Mainboard ()
{
knop2= new JButton("tweede knop");

knop2.addActionListener(this);

// methode voor ActionListener
public void actionPerformed(ActionEvent e)
{
// kijk of de knop2 ingedrukt werd
if(e.getSource()== knop2)
{
// roep het hoofdpaneel "hoofdpaneel" aan, uit onze "View" met bijhorende CardLayout
CardLayout cardLayout = (CardLayout)View.hoofdpaneel.getLayout();

// schakel over naar de volgende kaart, oftewel het subpaneel dat aan het hoofdpaneel is bevestigt
// in deze applicatie zijn er maar 2 kaarten als subpanelen
// die elk hun eigen controller hebben
cardLayout.next(View.hoofdpaneel);
}
}
}

Ik denk dat het ongeveer klopt, maar de rest van je logische code van je controller(s) moet je zelf maar eens doen.

Scr1fle

Legacy Member
Bedankt voor de tip , ga dit eens samen met mijn partner bekijken/bespreken ;)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan