0

JDialog で JButton を作成しようとしていますが、ボタンは JDialog 全体をカバーします。これは次のようになります。

ここに画像の説明を入力

これは、JDialog と 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);
    }
}

完全な MrStan.class を投稿するだけです。これは次のとおりです。

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

}

これが私の JDialog 全体をカバーしているのはなぜですか? 基本的な Layout Manager を使用していますが、問題ないはずです。

4

3 に答える 3

4

私にとってはうまくいくようです。ダイアログに対して setLayout(null) を呼び出しましたか?

これは私が試したものです

JDialog dialog = new JDialog();
dialog.setSize(300, 200);
dialog.setLayout(null);



JButton button = new JButton("Testbutton!");
button.setVisible(true);
button.setBounds(10,10,40,40);
dialog.add(button);

//Make dialog visible
dialog.setVisible(true);

通常、レイアウト マネージャーを使用しないことはお勧めできません。物事は非常に急速に複雑になる可能性があります。レイアウト マネージャーは非常に役立ちます。

于 2011-04-29T20:38:40.843 に答える
4

最初に contentPane にボタンを追加し、後で境界を設定してみてください。

Container pane = dialog.getContentPane();
pane.setLayout(null);
JButton button = new JButton("Testbutton!");
pane.add(button);
button.setBounds(10,10,40,40);
于 2011-04-29T20:40:02.953 に答える
4

コードの実際の問題は、ダイアログを表示可能に設定した後で、コンポーネントをダイアログに追加することです。2 番目の setVisible() は、既に表示されているため何もしません。

そのため、Swing チュートリアルの例から学ぶ必要があります。サンプルは、単純な GUI を作成する適切な方法を示しています。

于 2011-04-29T21:52:26.270 に答える