Ajouter des boutons pour un JDialog?

Je suis en train de faire un JButton sur un JDialog, mais, le bouton de couvrir l'ensemble de la JDialog, toute aide à ce sujet? C'est à quoi il ressemble:

Ajouter des boutons pour un JDialog?

C'est comment j'ai créer le JDialog et la 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);
    }
}

Je vais juste poster mon plein MrStan.class, elle est ici:

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();
}
}

Pourquoi est-ce couvrant la TOTALITÉ de mon JDialog? Je suis en utilisant la structure de base que Manager, il faut juste être bien.

  • Pourquoi êtes-vous toujours à l'aide d'un "null" mise en page. Tout est de passer du temps giveing vous ce même conseil! Vous avez été informé de la bonne façon de créer une interface graphique pour utiliser la mise en page des gestionnaires de sorte que vous n'avez pas à réinventer la roue et de résoudre les problèmes de mise en page sur votre propre. Code Swing programmes de la façon dont ils sont conçus pour être codés et vous n'aurez pas ces problèmes. Aussi, pourquoi êtes-vous l'extension Composite? Il n'est pas nécessaire pour ce faire. Lire la Balançoire tutoriel, suivez les exemples et apprendre à les utiliser Swing correctement de sorte que vous ne vous posez pas toutes ces questions!
  • Camickr, je suis d'accord que le @l'OP n'a pas writte Swing classique code, mais en fait, exteding JPanel peut être utile, par exemple si vous souhaitez distribuer la même application à la fois comme un autonome fichier jar pour l'usage de bureau et d'une Applet (il suffit d'ajouter le même panneau à une JFrame et une JApplet). J'ai vu ce modèle appliqué avant.
  • Accioly, oui l'extension Composite est la façon dont vous devriez créer une interface utilisateur graphique. Regardez tous les exemples dans le Swing tutoriel. Cependant, l'extension Composite est fait lorsque vous ajoutez les composants dans le panneau de sorte que vous pouvez ensuite ajouter le panneau de l'interface graphique plus tard. Cette classe est utilisé strictement pour créer un JDialog et il ne fait rien d'autre. Il n'a absolument rien à voir avec un Composite. Il devrait vraiment être juste une méthode que vous pouvez appeler.
  • pour l'extension Composite juste pour convience: c'est censé être un béton contenant pour enfants. Chaque sous-classe qui n'ajoute rien à la fonctionnalité de base est la mauvaise utilisation de l'héritage. Toujours.
  • Un contre-point. Il n'est pas possible de créer une applet sans l'extension (J)de l'Applet, même si aucune des méthodes supplémentaires sont nécessaires.
  • Qu'est-ce que la prime pour l'? Si tu avais suivi les conseils de camickr & kleopatra (le reste de l'avis était de la merde), tu aurais résolu ce jours.
  • Je l'ai fait d'une autre manière n'est pas, et cela ne fonctionne toujours pas, il sera toujours couvrir l'ensemble de la JDialog. J'ai mis à jour mon OP à nouveau avec le code que j'utilise actuellement.
  • de toute façon regarder (comme trois JavaGurus conseillé) download.oracle.com/javase/tutorial/uiswing/components/... voici download.oracle.com/javase/7/docs/api/javax/swing/...

InformationsquelleAutor Stan | 2011-04-29