Avatar billede dasch87 Nybegynder
09. juni 2008 - 22:00 Der er 4 kommentarer og
1 løsning

Close JPanel, hvordan?

Hej Eksperter

Jeg har lavet en dialog boks som et JPanel da jeg skulle have en scroll bar ind. Men nu vil jeg gerne have det således at vinduet bliver lukket når man trykker på "OK" knappen. Men jeg kan simpelthen ikke finde en funktion til dette. Når man extende JDialog kan man bare bruge dispose(), men det dur ikke med JPanel. Og jeg kan ikke bare lave det om til en JDialog da jeg ikke kan lave en scrollbar deri. Nogen der kan hjælpe mig med hvordan jeg lukker dette JPanel eller evt. kan lave det som en JDialog?

Her er min kode:

package gui;

import javax.swing.*;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class RulesDialog extends JPanel {
    private JPanel labelPane;

    public RulesDialog() {
        super(new BorderLayout()); 
       
        //The rules in a label
        JLabel rulesLabel = new JLabel("en hel masse tekst...");
       
        JButton okButton = new JButton("OK");
        okButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                //TODO luk vindue
            }
        });

        //Set up the labelPanel area.
        labelPane = new JPanel();
        labelPane.setLayout(new BorderLayout());
        labelPane.add(rulesLabel, BorderLayout.NORTH);
        labelPane.add(okButton, BorderLayout.CENTER);
       
        //Put the label area in a scroll pane.
        JScrollPane scroller = new JScrollPane(labelPane);
        scroller.setPreferredSize(new Dimension(750,650));

        //Layout of this dialog.
        add(scroller, BorderLayout.CENTER);
    }

    /**
    *  The component inside the scroll pane.
    */
    public class LabelPanel extends JPanel {
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
        }
    }

    private static void createAndShowGUI() {
        //Create and set up the window.
        JFrame frame = new JFrame("Regler");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Create and set up the content pane.
        JComponent newContentPane = new RulesDialog();
        newContentPane.setOpaque(true); //content panes must be opaque
        frame.setContentPane(newContentPane);

        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }       
}
Avatar billede snoop_one Nybegynder
10. juni 2008 - 08:29 #1
Det kan du kun gøre på vinduer. Du skal sætte dispose() på den frame eller dialog som du tilføjer dit RulesDialog til.
Derfor bliver du også nødt til at haven en mekanisme, så RulesDialog fortæller den komponent (frame/dialog) den tilhøre, at der er trykket på ok og at vinduet så skal lukkes.
Avatar billede dasch87 Nybegynder
10. juni 2008 - 09:26 #2
kan du forklare det lidt nærmere snoop_one? evt. ændre lidt i min kode så det passer? for jeg tror ikke jeg er helt med..?
Avatar billede dasch87 Nybegynder
10. juni 2008 - 12:00 #3
Det lykkedes mig at lave det om til en JDialog. Og nu virker det... Min kode ser således ud:
package gui;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.UIManager;

public class RulesDialog extends JDialog {
    private static JFrame owner; //TODO static pga. midlertidig main-metode
    private JButton okButton;
    private JPanel labelPane, buttonPane;
   
    public RulesDialog(JFrame owner) {
        super(owner, "Regler", true);
        this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        this.owner = owner;
        Container pane = this.getContentPane();
        BorderLayout blayout = new BorderLayout();
        pane.setLayout(blayout);
       
        JLabel nameLabel = new JLabel("en masse tekst");
        pane.add(nameLabel, BorderLayout.NORTH);
       
        okButton = new JButton("OK");
        Dimension d = new Dimension(70, 30);
        okButton.setPreferredSize(d);
        okButton.setMaximumSize(d);
        okButton.setMinimumSize(d);
        okButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                dispose();
            }
        });
        pane.add(okButton, BorderLayout.SOUTH);
       
        //Set up the labelPanel area.
        labelPane = new JPanel();
        buttonPane = new JPanel();
        labelPane.setLayout(new BorderLayout());
        buttonPane.setLayout(new FlowLayout());
        labelPane.add(nameLabel, BorderLayout.NORTH);
        buttonPane.add(okButton);
        labelPane.add(buttonPane, BorderLayout.SOUTH);
       
        //Put the label area in a scroll pane
        JScrollPane scroller = new JScrollPane(labelPane);
        scroller.setPreferredSize(new Dimension(750,650));

        //Layout of this dialog.
        pane.add(scroller, BorderLayout.CENTER);
       
        this.pack();
        this.setLocation((int)(0.5*owner.getSize().getWidth()-0.5*this.getSize().getWidth()), (int)(0.5*owner.getSize().getHeight()-0.5*this.getSize().getHeight()));
        this.setResizable(false);
        this.setVisible(true);
    }
   
    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
        } catch(Exception e) {}
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new RulesDialog(owner);
            }
        });
    }
}

Var det noget af det du var inde på snoop_one?
Avatar billede dasch87 Nybegynder
01. juli 2008 - 10:15 #4
Var det noget af det du var inde på snoop_one?
Avatar billede dasch87 Nybegynder
05. august 2008 - 09:53 #5
Jeg lukker...
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