Добавление JComponent поверх полноэкранной графики - PullRequest
3 голосов
/ 02 июня 2011

У меня есть полноэкранная программа, которая рисует много вещей для игры, которую я делаю.Полотно это все окно, каким оно и должно быть.Теперь я хочу добавить кнопку или текстовое поле (JButton, JTextField и т. Д.) В мое окно.Однако, когда я добавляю кнопку или что-то еще, они начинаются с холста.

У вас есть идея, как заставить кнопку отображаться на холсте, чтобы я мог щелкнуть по ней?

Редактировать: Код чертежа:

public synchronized void draw(Graphics2D g) {
        if (!welcome)
            g.drawImage(background,0,0,null);

        if (welcome) {
            g.drawImage(new ImageIcon (getClass().getResource("images/backgroundWelcome.jpg")).getImage(), 0,0, null);
        }
        else if (gettingName) {
            setFont (new Font("Verdana", Font.ITALIC, 40));

            g.draw3DRect(center.x -325, center.y -50, 650, 100, true);
            g.drawString("Please enter your name", center.x -250, center.y -120);
            g.drawString(name, center.x -315, center.y);
        }
        if (game) {
            for (Player p: player) {
                int x = center.x;
                int y = center.y;

                switch (p.getID()) {
                case 1:
                    x -= name.length()*10;
                    y *= 1.4;
                    break;
                case 2:
                    x -= name.length()*10;
                    y /= 1.4;
                    break;
                case 3:
                    x *= 1.4;
                    x -= name.length()*10;
                    break;
                case 4:
                    x *= 0.6;
                    x -= name.length()*10;
                    break;
                default:
                    System.out.println("Error 2");
                }
                g.drawString(p.getName(),x,y);
            }
            for (int x = 0; x<13; x++) {
                g.drawImage(diamonds[x].getImage(), (int) diamonds[x].getX(), (int) diamonds[x].getY(), null);
                g.drawImage(clubs[x].getImage(), (int) clubs[x].getX(), (int) clubs[x].getY(), null);
                g.drawImage(hearts[x].getImage(), (int) hearts[x].getX(), (int) hearts[x].getY(), null);
                g.drawImage(spades[x].getImage(), (int) spades[x].getX(), (int) spades[x].getY(), null);
            }
            g.drawImage(put.getImage(), (int) put.getX(), (int) put.getY(), null);
        }

        if (won) {
            g.drawImage(new ImageIcon (getClass().getResource("images/backgroundWelcome.jpg")).getImage(), 0,0, null);
        }
        else if (lost) {
            g.drawImage(new ImageIcon (getClass().getResource("images/backgroundWelcome.jpg")).getImage(), 0,0, null);
        }
    }

Edit2: Моя рамка - это JFrame.

Ответы [ 2 ]

2 голосов
/ 02 июня 2011

Трудно сказать многое из фрагмента кода (рассмотрите возможность публикации SSCCE в будущем), но:

  1. Не используйте AWT в этом тысячелетии.
  2. Не смешивайте Swing с AWT (по крайней мере, до Java 7)
  3. Не загружайте изображения в методе draw() (который предположительно вызывается из метода paintComponent()).
  4. Обратите внимание, что пользовательское рисование в Swing может быть выполнено в JComponent или JPanel и что, если класс является последним, он может иметь макет с добавлением других компонентов.
2 голосов
/ 02 июня 2011

Вы рисуете холст самостоятельно, поэтому вам нужно добавить кнопку в другом месте или нарисовать область, похожую на кнопку, и проверить, попадают ли события мыши в область кнопки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...