Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPanel定位不正确_Java_Image_Swing_Jpanel_Jlabel - Fatal编程技术网

Java JPanel定位不正确

Java JPanel定位不正确,java,image,swing,jpanel,jlabel,Java,Image,Swing,Jpanel,Jlabel,我用Java做了一个游戏,你应该猜一个随机生成的整数,在1-100之间。如果您猜得太低,文本字段将填充一个文字,上面写着“太低”,但是瑞典语。如果你猜得太高也一样 当答案正确时,问题就出现了,然后我调用一个方法使一个不可见的JPanel可见。这很好,但是Jpanel本身不会达到它应该达到的最高点。因为它只是背景的一张经过Photoshop处理的图片,所以它需要完美贴合。背景的属性为:1920 x 1080。经光处理的GG WP的特性为1920 x 297。Jpane被称为“grattis” 我希

我用Java做了一个游戏,你应该猜一个随机生成的整数,在1-100之间。如果您猜得太低,文本字段将填充一个文字,上面写着“太低”,但是瑞典语。如果你猜得太高也一样

当答案正确时,问题就出现了,然后我调用一个方法使一个不可见的JPanel可见。这很好,但是Jpanel本身不会达到它应该达到的最高点。因为它只是背景的一张经过Photoshop处理的图片,所以它需要完美贴合。背景的属性为:1920 x 1080。经光处理的GG WP的特性为1920 x 297。Jpane被称为“grattis”

我希望我没有错过一些重要的事情,我感谢所有能得到的帮助,因为我现在陷入困境

抱歉英文和格式不好

package slumpatal;

import java.util.Random;

//This class runs the program, the main method is here.
public class SlumpaTal extends callback1 {
    private int randomTal;
    Random random = new Random();

    @Override
    public int SetValue(int value) {
        if (value < randomTal)
            return -1;
        else if (value == randomTal)
            return 0;
        else
            return 1;

    }

    //private JFrame1 frame;
    SlumpaTal() {
        GenerateRandomNumber();
        JFrame1.createWindow(this);
    }

    public void GenerateRandomNumber() {
        randomTal = random.nextInt(100) + 1;
    }

    public static void main(String[] args) {
        new SlumpaTal();
    }
}
package;
导入java.util.Random;
//这个类运行程序,主要方法在这里。
公共类回调1{
私家车;
随机=新随机();
@凌驾
公共整数设置值(整数值){
如果(值<随机数)
返回-1;
else if(值==随机总数)
返回0;
其他的
返回1;
}
//私有JFrame1框架;
(){
GeneratorDomainNumber();
JFrame1.createWindow(这个);
}
public void GenerateRandomNumber(){
randomTal=random.nextInt(100)+1;
}
公共静态void main(字符串[]args){
新技术();
}
}

package;
导入java.awt.*;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.image.buffereImage;
导入java.io.IOException;
导入java.net.URL;
导入javax.imageio.imageio;
导入javax.swing.*;
公共类JFrame1{
//公共静态int-ditsvar;
公共静态void createWindow(callback1 callbackArg){
//Font Font=新字体(“Verdana”,字体粗体,28);
JFrame=新JFrame(“Gissa ett Tal mellan 1-100”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel contentPane=新的JPanel();
contentPane.set不透明(true);
setboorder(BorderFactory.createMatteBorder(5,5,5,5,Color.WHITE));
contentPane.setBackground(颜色:白色);
setLayout(新的BorderLayout(10,10));
ImagePanel ImagePanel=新的ImagePanel(callbackArg);
//框架属性
添加(imagePanel,BorderLayout.CENTER);
frame.setContentPane(contentPane);
框架设置尺寸(1000600);
frame.setVisible(true);
}
}
类ImagePanel扩展了JPanel
{
回调1回调;
公共int dittSvar;
私有缓冲图像;
JButton restartApp;
JTextField dittSvarText1;
JTextField dittRes1;
BufferedImage-myPicture;
公共杰帕内尔·格拉蒂斯;
公共图像面板(callback1 callbackArg){
试一试{
myPicture=ImageIO.read(新URL(“https://imagizer.imageshack.us/v2/1375x213q90/843/r7f8.jpg"));
}捕获(例外情况除外){
系统错误打印(“无奖励图像”);
}
callback=callbackArg;
set不透明(true);
setboorder(BorderFactory.createLineBorder(Color.BLACK,5));
试一试{
image=ImageIO.read(新URL(“http://imageshack.com/a/img835/193/v8k3.jpg"));
}
//如果不起作用,请编写一条错误消息printStackTrace。
捕获(IOE异常){
System.err.printf(“%s”,例如toString());
e、 printStackTrace();
}
createGUI();
createGUI2();
dittSvarText1.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e){
dittSvar=Integer.parseInt(dittSvarText1.getText());
int res=callback.SetValue(dittSvar);
如果(res<0)
编辑1.setText(“För lågt”);
else if(res==0){
dittRes1.setText(“Rätt Svar!!!!”);
使其可见();
}否则
编辑1.setText(“För Högt”);
dittSvarText1.setText(“”);
}
});
restartApp.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e){
callback.GenerateRandomNumber();
dittSvarText1.setText(空);
ditres1.setText(空);
grattis.setVisible(假);
}
});
}
public void使其可见(){
系统输出打印(“显示奖励图像”);
grattis=新的JPanel();
grattis.set不透明(假);
grattis.setLayout(新的FlowLayout(FlowLayout.LEFT));
if(myPicture!=null){
JLabel picLabel=新JLabel(新图像图标(myPicture));
//picLabel.设置位置(新点(0,0));
picLabel.setLocation(新点(0,0));
//picLabel.setSize(1000297);
//grattis.setLocation(0,0);
picLabel.设置垂直对齐(宽度);
grattis.setVisible(真);
grattis.setSize(1000600);
grattis.add(picLabel);
添加(grattis);
updateUI();
}否则{
System.err.print(“未创建图片!”);
}
}
public void createGUI(){
setLayout(新的GridBagLayout());
JPanel panel1=新的JPanel();
面板1.设置不透明(假);
面板1.设置布局(新的网格布局(2,2,2,2));
JLabel skrivdingissning=新JLabel(“Skriv din gissning här:”);
设置前景(颜色:白色);
dittSvarText1=新的JTEXTFORD(10);
JLabel VadBlevDet=新JLabel(“Vad blev det:”);
设置前景(颜色为白色);
dittRes1=新的JTextField(10);
面板1.添加(skrivdingissning);
面板1.添加(dittSva)
package slumpatal;


import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.*;


public class JFrame1 {
    //public  static int dittSvar;
    public static void createWindow(callback1 callbackArg) {

        //Font font = new Font("Verdana", Font.BOLD,28);

        JFrame frame = new JFrame("Gissa ett Tal mellan 1-100");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel contentPane = new JPanel();
        contentPane.setOpaque(true);
        contentPane.setBorder(BorderFactory.createMatteBorder(5, 5, 5, 5, Color.WHITE));
        contentPane.setBackground(Color.WHITE);
        contentPane.setLayout(new BorderLayout(10, 10));

        ImagePanel imagePanel = new ImagePanel(callbackArg);


        //frame properties


        contentPane.add(imagePanel, BorderLayout.CENTER);
        frame.setContentPane(contentPane);
        frame.setSize(1000, 600);
        frame.setVisible(true);
    }
}


class ImagePanel extends JPanel

{
    callback1 callback;
    public int dittSvar;
    private BufferedImage image;
    JButton restartApp;
    JTextField dittSvarText1;
    JTextField dittRes1;
    BufferedImage myPicture;
    public JPanel grattis;

    public ImagePanel(callback1 callbackArg) {
        try {
            myPicture = ImageIO.read(new URL("https://imagizer.imageshack.us/v2/1375x213q90/843/r7f8.jpg"));
        } catch (Exception ex) {
            System.err.print("No reward image");
        }
        callback = callbackArg;
        setOpaque(true);
        setBorder(BorderFactory.createLineBorder(Color.BLACK, 5));
        try {
            image = ImageIO.read(new URL("http://imageshack.com/a/img835/193/v8k3.jpg"));
        }
        //If it doesn't work, write an error message, printStackTrace.
        catch (IOException e) {
            System.err.printf("%s", e.toString());
            e.printStackTrace();
        }
        createGUI();
        createGUI2();

        dittSvarText1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                dittSvar = Integer.parseInt(dittSvarText1.getText());
                int res = callback.SetValue(dittSvar);
                if (res < 0)
                    dittRes1.setText("För lågt");
                else if (res == 0) {
                    dittRes1.setText("Rätt Svar!!!!");
                    makeItVisible();
                } else
                    dittRes1.setText("För Högt");
                dittSvarText1.setText("");
            }
        });
        restartApp.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                callback.GenerateRandomNumber();
                dittSvarText1.setText(null);
                dittRes1.setText(null);
                grattis.setVisible(false);

            }
        });
    }

    public void makeItVisible() {
        System.out.print("Showing reward image");
        grattis = new JPanel();
        grattis.setOpaque(false);
        grattis.setLayout(new FlowLayout(FlowLayout.LEFT));


        if (myPicture != null) {
            JLabel picLabel = new JLabel(new ImageIcon(myPicture));

            //picLabel.setLocation(new Point(0,0));
            picLabel.setLocation(new Point(0, 0));
            // picLabel.setSize(1000,297);
            // grattis.setLocation(0, 0);
            picLabel.setVerticalAlignment(WIDTH);
            grattis.setVisible(true);
            grattis.setSize(1000, 600);

            grattis.add(picLabel);
            add(grattis);
            updateUI();
        } else {
            System.err.print("No picture created!");
        }


    }

    public void createGUI() {
        setLayout(new GridBagLayout());
        JPanel panel1 = new JPanel();

        panel1.setOpaque(false);
        panel1.setLayout(new GridLayout(2, 2, 2, 2));
        JLabel skrivdingissning = new JLabel("Skriv din gissning här : ");
        skrivdingissning.setForeground(Color.WHITE);
        dittSvarText1 = new JTextField(10);
        JLabel VadBlevDet = new JLabel("Vad blev det : ");
        VadBlevDet.setForeground(Color.WHITE);
        dittRes1 = new JTextField(10);


        panel1.add(skrivdingissning);
        panel1.add(dittSvarText1);
        panel1.add(VadBlevDet);
        panel1.add(dittRes1);

        add(panel1);

    }

    public void createGUI2() {

        JPanel panel2 = new JPanel();

        panel2.setLocation(100, 500);
        panel2.setOpaque(false);
        restartApp = new JButton("Starta om");
        restartApp.setLocation(100, 500);
        restartApp.setBackground(Color.WHITE);

        panel2.add(restartApp);

        // add(panel2);
    }


    @Override
    public Dimension getPreferredSize() {
        return (new Dimension(300, 300));
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        //g.drawImage(image, 0,0,this);
    }
}

abstract class callback1 {
    abstract int SetValue(int value);

    abstract void GenerateRandomNumber();

}
package com.ggl.guessing.game;

import javax.swing.SwingUtilities;

import com.ggl.guessing.game.model.GuessingGameModel;
import com.ggl.guessing.game.view.GuessingGameFrame;

public class GuessingGame implements Runnable {

    @Override
    public void run() {
        new GuessingGameFrame(new GuessingGameModel(1, 100));

    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new GuessingGame());
    }

}
package com.ggl.guessing.game.model;

import java.util.Random;

public class GuessingGameModel {

    private int lowerLimit;
    private int upperLimit;
    private int randomNumber;
    private int numberOfGuesses;


    private Random random;

    public GuessingGameModel(int lowerLimit, int upperLimit) {
        this.random = new Random();
        init(lowerLimit, upperLimit);
    }

    public void init(int lowerLimit, int upperLimit) {
        this.lowerLimit = lowerLimit;
        this.upperLimit = upperLimit;
        this.numberOfGuesses = 0;
        this.randomNumber = random.nextInt(upperLimit - lowerLimit + 1) 
                + lowerLimit;
    }

    public int guess(int guess) {
        this.numberOfGuesses++;
        if (guess < randomNumber) {
            return -1;
        } else if (guess > randomNumber) {
            return 1;
        } else {
            return 0;
        }
    }

    public int getNumberOfGuesses() {
        return numberOfGuesses;
    }

    public String getFrameTitle() {
        return "Gissa ett Tal mellan " + lowerLimit + " - "
                + upperLimit;
    }
}
package com.ggl.guessing.game.view;

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.JPanel;

import com.ggl.guessing.game.model.GuessingGameModel;

public class GuessingGameFrame {

    private GameImages gameImages;

    private GuessingGameModel model;

    private GuessingGamePanel ggPanel;

    private JFrame frame;

    public GuessingGameFrame(GuessingGameModel model) {
        this.model = model;
        this.gameImages = new GameImages();
        createPartControl();
    }

    private void createPartControl() {
        frame = new JFrame();
        frame.setTitle(model.getFrameTitle());
        frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent event) {
                exitProcedure();
            }
        });

        Dimension d = sizeGuessesPanel();

        ggPanel = new GuessingGamePanel(this, model, gameImages, d);
        JPanel mainPanel = new JPanel();
        mainPanel.setLayout(new FlowLayout());
        mainPanel.add(ggPanel);

        frame.setLayout(new FlowLayout());
        frame.add(mainPanel);
//      frame.setSize(640, 480);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    private Dimension sizeGuessesPanel() {
        GuessesPanel guessesPanel = new GuessesPanel(this, model);
        frame.setLayout(new FlowLayout());
        frame.add(guessesPanel.getPanel());
        frame.pack();
        Dimension d = guessesPanel.getPanel().getSize();
        guessesPanel.setPreferredSize(d);
        frame.remove(guessesPanel.getPanel());
        return d;
    }

    public void exitProcedure() {
        frame.dispose();
        System.exit(0);
    }

    public void setGuessed(boolean guessed) {
        ggPanel.setGuessed(guessed);
    }

}
package com.ggl.guessing.game.view;

import java.awt.Dimension;
import java.awt.Image;
import java.io.IOException;
import java.net.URL;

import javax.imageio.ImageIO;

public class GameImages {

    private Image backgroundImage;
    private Image victoryImage;

    public GameImages() {
        readBackgroundImage();
        readVictoryImage();
    }

    private void readBackgroundImage() {
        Image image = null;
        try {
            URL url = getClass().getResource("/v8k3reduced.jpg");
            image = ImageIO.read(url);
        } catch (IOException e) {
            e.printStackTrace();
        }
        this.backgroundImage = image;
    }

    private void readVictoryImage() {
        Image image = null;
        try {
            URL url = getClass().getResource("/r7f8reduced.jpg");
            image = ImageIO.read(url);
        } catch (IOException e) {
            e.printStackTrace();
        }
        this.victoryImage = image;
    }

    public Image getBackgroundImage() {
        return backgroundImage;
    }

    public Dimension getPreferredSize() {
        return new Dimension(backgroundImage.getWidth(null),
                backgroundImage.getHeight(null));
    }

    public Image getVictoryImage() {
        return victoryImage;
    }

}
package com.ggl.guessing.game.view;

import java.awt.Dimension;
import java.awt.Graphics;

import javax.swing.JPanel;

import com.ggl.guessing.game.model.GuessingGameModel;

public class GuessingGamePanel extends JPanel {

    private static final long   serialVersionUID    = 
            -2429103448910749064L;

    private boolean guessed;

    private Dimension guessesPanelDimension;

    private GameImages gameImages;

    private GuessesPanel guessesPanel;

    private GuessingGameFrame frame;

    private GuessingGameModel model;

    public GuessingGamePanel(GuessingGameFrame frame,
            GuessingGameModel model, GameImages gameImages, 
            Dimension guessesPanelDimension) {
        this.frame = frame;
        this.model = model;
        this.gameImages = gameImages;
        this.guessesPanelDimension = guessesPanelDimension;
        this.guessed = false;

        createPartControl();
    }

    private void createPartControl() {
        this.setLayout(null);
        this.setPreferredSize(gameImages.getPreferredSize());

        guessesPanel = new GuessesPanel(frame, model);
        Dimension gp = guessesPanelDimension;
        Dimension tp = gameImages.getPreferredSize();
        int x = (tp.width - gp.width) / 2;
        int y = (tp.height - gp.height) / 2;
        guessesPanel.getPanel().setBounds(x, y, gp.width, gp.height);
        this.add(guessesPanel.getPanel());
    }

    public void setGuessed(boolean guessed) {
        this.guessed = guessed;
        repaint();
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        g.drawImage(gameImages.getBackgroundImage(), 0, 0, null);
        if (guessed) {
            g.drawImage(gameImages.getVictoryImage(), 0, 0, null);
        }
    }
}
package com.ggl.guessing.game.view;

import java.awt.Color;
import java.awt.Component;
import
 java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

import com.ggl.guessing.game.model.GuessingGameModel;

public class GuessesPanel {

    private static final Insets finalInsets = 
            new Insets(6, 6, 6, 6);

    private Dimension preferredSize;

    private GuessingGameFrame frame;

    private GuessingGameModel model;

    private JPanel panel;

    private JTextField dittSvarText1;
    private JTextField dittRes1;
    private JTextField guessesField;

    public GuessesPanel(GuessingGameFrame frame,
            GuessingGameModel model) {
        this.frame = frame;
        this.model = model;
        createPartControl();
    }

    private void createPartControl() {
        panel = new JPanel();
        panel.setBackground(Color.YELLOW);
        panel.setLayout(new FlowLayout());

        JPanel insidePanel = new JPanel();
        insidePanel.setLayout(new GridBagLayout());

        int gridy = 0;

        JLabel guessLabel = new JLabel("Skriv din gissning här:");
        addComponent(insidePanel, guessLabel, 0, gridy, 1, 1,
                finalInsets, GridBagConstraints.LINE_START,
                GridBagConstraints.NONE);

        dittSvarText1 = new JTextField(10);
        dittSvarText1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent event) {
                int guess = Integer.valueOf(dittSvarText1.getText());
                int lowHigh = model.guess(guess);
                if (lowHigh < 0) {
                    dittRes1.setText("För lågt");
                } else if (lowHigh > 0) {
                    dittRes1.setText("För Högt");
                } else {
                    dittRes1.setText("Rätt Svar!!!!");
                    frame.setGuessed(true);
                }
                guessesField.setText(Integer.toString(
                        model.getNumberOfGuesses()));
                dittSvarText1.setSelectionStart(0);
                dittSvarText1.setSelectionEnd(
                        dittSvarText1.getText().length());
            }   
        });
        addComponent(insidePanel, dittSvarText1, 1, gridy++, 1, 1,
                finalInsets, GridBagConstraints.LINE_START,
                GridBagConstraints.NONE);

        JLabel responseLabel = new JLabel("Vad blev det:");
        addComponent(insidePanel, responseLabel, 0, gridy, 1, 1,
                finalInsets, GridBagConstraints.LINE_START,
                GridBagConstraints.NONE);

        dittRes1 = new JTextField(10);
        dittRes1.setEditable(false);
        addComponent(insidePanel, dittRes1, 1, gridy++, 1, 1,
                finalInsets, GridBagConstraints.LINE_START,
                GridBagConstraints.NONE);

        JLabel guessesLabel = new JLabel("Number of guesses:");
        addComponent(insidePanel, guessesLabel, 0, gridy, 1, 1,
                finalInsets, GridBagConstraints.LINE_START,
                GridBagConstraints.NONE);

        guessesField = new JTextField(10);
        guessesField.setEditable(false);
        addComponent(insidePanel, guessesField, 1, gridy++, 1, 1,
                finalInsets, GridBagConstraints.LINE_START,
                GridBagConstraints.NONE);

        panel.add(insidePanel);
    }

    private void addComponent(Container container, Component component,
            int gridx, int gridy, int gridwidth, int gridheight, 
            Insets insets, int anchor, int fill) {
        GridBagConstraints gbc = new GridBagConstraints(gridx, gridy,
                gridwidth, gridheight, 1.0D, 1.0D, anchor, fill, 
                insets, 0, 0);
        container.add(component, gbc);
    }

    public void setPreferredSize(Dimension preferredSize) {
        panel.setPreferredSize(preferredSize);
        panel.setMaximumSize(preferredSize);
        panel.setMinimumSize(preferredSize);
        this.preferredSize = preferredSize;
    }

    public Dimension getPreferredSize() {
        return preferredSize;
    }

    public JPanel getPanel() {
        return panel;
    }

}