качать Java: отображать кнопку и изображение отдельно на экране - PullRequest
1 голос
/ 28 февраля 2011

Привет, все, что я пытаюсь сделать, это добавить кнопку на экран, так что, когда пользователь нажимает на кнопку, в другом месте экрана появляется случайная картинка в кости.это мой код, как я пытался это сделать ... хотя, кажется, я не могу получить кнопки с изображением.это либо один, либо другой.Что я делаю не так?

Любая помощь будет оценена.Также я уверен, что я использую слишком много кода, чтобы получить желаемый результат.

ava.util.Random;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;

class MyComponent extends JComponent {
  public void paint(Graphics g) {

    ImageIcon icon = new ImageIcon("dice1.png");
    int x = 0;
    int y = 0;
    icon.paintIcon(this, g, x, y);
  }

}


class Dice extends Panel
{
    BufferedImage image;
    public Dice(){

        JFrame frame = new JFrame("Test");
        JPanel panel = new JPanel();


        frame.add(panel);

        JButton button2 = new JButton("Roll Die");
        button2.addActionListener(new ActionListener(){

            public void actionPerformed(ActionEvent e){
                //execute when button is pressed
                Random r= new Random();
                System.out.println(r.nextInt(6)+1);
            }
        });
        panel.add(button2);

        frame.add(new MyComponent());
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500,500);
    }

    public void paint(Graphics g){
        g.drawImage(image, 0, 0, 50,50, null);
    }

    public static void main(String[] args)
    {
    Random r= new Random();
    System.out.println(r.nextInt(6)+1); 

        new Dice();

    }   
}

1 Ответ

1 голос
/ 28 февраля 2011

Проблема в том, что contentPane JFrame по умолчанию имеет BorderLayout, а BorderLayout добавляет компоненты в его область CENTER по умолчанию. BorderLayout поддерживает только один компонент в каждом из своих регионов, поэтому, когда вы добавляете в фрейм как yourJPanel, так и пользовательский компонент, отображается только один компонент. Решение состоит в том, чтобы настроить contentPane JFrame для использования другого макета (возможно, FlowLayout?):

frame.getContentPane().setLayout(new FlowLayout());

или для добавления одного компонента в другой регион BorderLayout:

frame.getContentPane.add(new MyComponent(), BorderLayout.West);
...