20. november 2003 - 19:31Der er
4 kommentarer og 1 løsning
skifte vindue i frame
Jeg er ved at lave GUI til et biludlejningssystem og har følgende panel som jeg gerne vil sætte ind i mit hovedvindue som er et frame:
public class ReservationAdministration extends JPanel {
public ReservationAdministration() {
I constructuren oprettes et hovedpanel, hvor der indsættes andre paneler, en masse knapper, tekstfelter osv.
I mit hovedvindue er der en menubar og afhængig af hvilken menupunkt der trykkes på skal hovedvinduet under menuen skifte.
koden for hovedvinduet ser sådan ud:
public class CarRentSystem extends JFrame implements ActionListener {
boolean inAnApplet = true; JPanel test = new JPanel();
public CarRentSystem() { // Setting up a listener for closing the Window addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { if (inAnApplet) { dispose(); } else { System.exit(0); } } });
//This section builds the menu bar. mb = new MenuBar(); setMenuBar(mb);
Menupunkter laves og følgende switch styrer kald af menupanelerne som skal vises i hovedvinduet:
public void actionPerformed(ActionEvent e) { String st = e.getActionCommand(); char s = st.charAt(0);
switch(s) { case 'a': test.removeAll(); test.add(new ReservationAdministration()); test.setVisible(true); test.repaint(); // redraw the area test.validate();
Og klassen aflsuttes med følgende:
// The main that starts the program public static void main(String[] args) { CarRentSystem window = new CarRentSystem();
// Setting up the window window.inAnApplet = false; window.setTitle("Car Rent System V 1.0"); window.setSize(800, 600); window.setVisible(true); }
Problemet er bare at denne kode ikke virker, når jeg kører programmet kommer hovedvinduet godt nok frem, men når jeg trykker på den tilsvarende knap til et nyt vindue, sker der ingenting.
Håber der er nogen der kan give mig udførlig vejledning!!! Jeg er ret ny i GUI kodning.
Faktisk er jeg voldsomt i tvivl om hvad der er dit egentlige problem - hvis jeg forstår dig ret, er det et CardLayout du skal bruge for at opnå hvad du ønsker, prøv køre nedenstående eksempel - måske en løsning.
Mere kan jeg ikke bidrage med i dag.
import java.awt.*; public class CarRent extends javax.swing.JFrame {
public CarRent() { initComponents(); setSize(400,400); }
private void initComponents() { jPanel1 = new javax.swing.JPanel(); jLabel1 = new javax.swing.JLabel(); jPanel2 = new javax.swing.JPanel(); jPanel3 = new javax.swing.JPanel(); jPanel4 = new javax.swing.JPanel(); jPanel5 = new javax.swing.JPanel(); jMenuBar1 = new javax.swing.JMenuBar(); jMenu1 = new javax.swing.JMenu(); jMenuItem1 = new javax.swing.JMenuItem(); jMenuItem2 = new javax.swing.JMenuItem(); jMenuItem3 = new javax.swing.JMenuItem();
Har set lidt på eksemplet og selvom den umiddelbart har samme effekt som jeg ønsker er det lidt forvirrende. Det jeg ønsker er blot at vide hvordan man sætter et panel fra en klasse over i et JFrame i en anden klasse. Jeg troede egentlig at denne kode ville gøre dette:
test.add(new ReservationAdministration());
hvor test er det panel i JFrame hovedvinduet som det eksterne panel skal tilføjes til. new ReservationAdministration laver et objekt af denne klasse og det indsættes i panelet.
Du kan godt gøre det på den måde. Problemet skyldes formentlig layoutet i dit test panel. Default layout i JPanel's er FlowLayout, prøv at sætte test til BorderLayout, så virker det sikkert.
case 'a': test.removeAll(); test.add(new ReservationAdministration()); test.setVisible(true); test.repaint(); // redraw the area og saa: test.revalidate();
Synes godt om
Ny brugerNybegynder
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.