Hinzufügen von Schaltflächen zu einem JDialog?

Ich versuche, mich ein JButton auf einem JDialog, aber der button decken den gesamten JDialog, jede Hilfe auf diesem? Dies ist, wie es aussieht:

Hinzufügen von Schaltflächen zu einem JDialog?

Dies ist, wie erstelle ich den JDialog und der JButton:

class MenuStoreHandler implements ActionListener{
    public void actionPerformed(ActionEvent e){

        Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
        int screenWidth = (int) dim.getWidth();
        int screenHeight = (int) dim.getHeight();

        JDialog g = new JDialog();
        g.setTitle("The Store");
        g.setSize(200, 200);
        g.setLocation(screenWidth / 2 - 150, screenHeight / 2 - 150);

        JButton b = new JButton("Buy");
        b.addActionListener( new StoreItem1Handler() );
        b.setVisible(true);
        g.add(b);

        g.setVisible(true);
    }
}

Werde ich nur nach meinen vollen MrStan.class hier ist es:

package Progress;

public class MrStan extends JPanel{

    private Timer timer = new Timer();
    public static int points;
    static File h = new File("text.txt");
    public ImageIcon bg = new ImageIcon("D:/MrStan/bg.png");
    static JMenuBar menubar;
    Formatter x;
    JMenu menu;
    JMenuItem menuitem;

    double version = 0.3;

    class todoTask extends TimerTask{
        public void run(){ 
            points += 1;
            repaint();
        }
    }

    public int getPoints(){
        return points;
    }

    public void setPoints( int points ){
        this.points = points;
    }

    public MrStan(){
        setIgnoreRepaint(true);

        menubar = new JMenuBar();
        menu = new JMenu("Menu");
        menu.setMnemonic(KeyEvent.VK_F);
        menu.getAccessibleContext().setAccessibleDescription("Menu");
        menubar.add(menu);

        menuitem = new JMenuItem("Store (S)", new ImageIcon("coins.png"));
        menuitem.setMnemonic(KeyEvent.VK_S);
        menuitem.addActionListener( new MenuStoreHandler() );
        menu.add(menuitem);

        menuitem = new JMenuItem("Reset Points (R)", new ImageIcon("delete.png"));
        menuitem.setMnemonic(KeyEvent.VK_R);
        menuitem.addActionListener( new MenuResetPointHandler() );
        menu.add(menuitem);

        //add a separator
        menu.addSeparator();

        menuitem = new JMenuItem("Exit (E)", new ImageIcon("cross.png"));
        menuitem.setMnemonic(KeyEvent.VK_E);
        menuitem.addActionListener( new MenuExitHandler() );
        menu.add(menuitem);

        timer.schedule(new todoTask(), 0, 2000);

    }

    class MenuStoreHandler implements ActionListener{
        public void actionPerformed(ActionEvent e){

            Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
            int screenWidth = (int) dim.getWidth();
            int screenHeight = (int) dim.getHeight();

            JDialog g = new JDialog();
            g.setTitle("The Store");
            g.setSize(200, 200);
            g.setLocation(screenWidth / 2 - 150, screenHeight / 2 - 150);

            JButton b = new JButton("Buy");
            b.addActionListener( new StoreItem1Handler() );
            b.setVisible(true);
            g.add(b);

            g.setVisible(true);
        }
    }

    class StoreItem1Handler implements ActionListener{
        public void actionPerformed(ActionEvent e){
            System.out.println("Store-Button 1 pressed.");
        }
    }

    class MenuExitHandler implements ActionListener{
        public void actionPerformed(ActionEvent e){
            System.exit(1);
        }
    }

    class MenuResetPointHandler implements ActionListener{
        public void actionPerformed(ActionEvent e){
            points = 0;
            repaint();
            JOptionPane.showMessageDialog(null, "Points have been reset.");
        }
    }

    public void paint(Graphics g){
        g.setColor(Color.WHITE);
        bg.paintIcon(this,g,0,0);
        g.setColor(Color.BLACK);
        g.drawString("Points: " + points, 75, 95);
        g.drawString("Version: " + version, 2, 10);
    }

    public static void main(String[] args){

        final MrStanCreateFile g = new MrStanCreateFile();

        Runtime.getRuntime().addShutdownHook(new Thread(new Runnable(){
            public void run(){
                if(h.exists()){
                    g.openFile();
                    g.addRecords();
                    g.closeFile();
                }else{
                    System.out.println(h.getName() + "does not exist, not saving.");
                }
            }
        }, "Shutdown-thread"));

        readIt();

        //Create new JFrame
        JFrame frame = new JFrame();
        frame.setTitle("MrStan");
        frame.setSize(200, 200);
        frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        frame.setJMenuBar(menubar);

        //Set location of JFrame
        Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
        int screenWidth = (int) dim.getWidth();
        int screenHeight = (int) dim.getHeight();
        frame.setLocation(screenWidth / 2 - 200, screenHeight / 2 - 200);

        //Set ContentPane to JPanel
        MrStan panel = new MrStan();
        frame.setContentPane(panel);

        //Make the user not be able to resize
        frame.setResizable(false);

        //Make the JFrame visible
        frame.setVisible(true);
    }

    public static void readIt(){
        MrStanReadFile r = new MrStanReadFile();
        r.openFile();
        r.readFile();
        r.closeFile();
    }

}

Warum ist dies für meine GESAMTE JDialog? Ich bin mit dem basic-Layout-Manager, es sollte nur in Ordnung sein.

  • Warum sind Sie immer noch mit einer "null-layout". Jeder verbringt Zeit giveing Sie diese gleichen Rat! Sie wurden beraten, der richtige Weg, um erstellen Sie eine GUI ist die Verwendung von layout Managern, so dass Sie nicht haben, das Rad neu zu erfinden und lösen-layout-Probleme auf Ihrem eigenen. Code von Swing-Programmen die Weise, die Sie entworfen, codiert werden, und du wirst diese Probleme nicht. Auch, warum sind Sie JPanel erweitern? Es gibt keine Notwendigkeit, dies zu tun. Lesen Sie die Swing-tutorial, Folgen die Beispiele, und lernen, wie Sie mit Schwung richtig, sodass Sie nicht zu Fragen, all diese Fragen!
  • Camickr, ich bin damit einverstanden, dass die @OP hat nicht writte konventionelle Swing code, aber eigentlich exteding JPanel kann beispielsweise nützlich sein, wenn Sie verteilen möchten, die gleiche Anwendung sowohl als standalone-jar-Datei für die desktop-Anwendung und ein Applet (fügen Sie einfach die gleiche Platte zu einem JFrame und JApplet). Ich habe gesehen, dass dieses Muster angewendet wird, vor.
  • Accioly, ja erweitern JPanel ist der Weg erstellen Sie eine GUI. Schau dir all die Beispiele, die in der Swing-tutorial an. Jedoch erweitern JPanel ist fertig, wenn Sie tatsächlich fügen Komponenten auf das panel, so können Sie fügen Sie dann das Bedienfeld, um die GUI später auf. Diese Klasse wird verwendet, streng zu schaffen, ein JDialog und es tut sich sonst nichts. Es hat absolut nichts mit einem JPanel. Es sollte eigentlich nur eine Methode, die Sie aufrufen können.
  • für die Erweiterung von JPanel nur für convience: es soll ein Beton-container für die Abhaltung von Kindern. Jede Unterklasse, die nichts hinzufügt, dass die Basis-Funktionalität ist mis-mit der Vererbung. Immer.
  • Ein Zähler-Punkt. Es ist nicht möglich, erstellen Sie ein applet ohne Verlängerung (J)Applet, auch wenn keine zusätzlichen Methoden notwendig sind.
  • Was ist das Kopfgeld für? Wenn Sie ' D folgte dem Rat von camickr & kleopatra (der rest von der Beratung Mist war), Sie würden gelöst haben dieser Tage gemeldet.
  • Ich habe es in einer anderen Art und Weise nicht, und es immer noch nicht funktionieren, es wird immer noch decken die gesamte JDialog. Ich aktualisierte mein OP wieder mit dem code, den ich verwende jetzt.
  • trotzdem einen Blick (als drei JavaGurus empfohlen) download.oracle.com/javase/tutorial/uiswing/components/... und auch hier download.oracle.com/javase/7/docs/api/javax/swing/...

InformationsquelleAutor Stan | 2011-04-29
Schreibe einen Kommentar