Java JPanel定位不正确
我用Java做了一个游戏,你应该猜一个随机生成的整数,在1-100之间。如果您猜得太低,文本字段将填充一个文字,上面写着“太低”,但是瑞典语。如果你猜得太高也一样 当答案正确时,问题就出现了,然后我调用一个方法使一个不可见的JPanel可见。这很好,但是Jpanel本身不会达到它应该达到的最高点。因为它只是背景的一张经过Photoshop处理的图片,所以它需要完美贴合。背景的属性为:1920 x 1080。经光处理的GG WP的特性为1920 x 297。Jpane被称为“grattis” 我希望我没有错过一些重要的事情,我感谢所有能得到的帮助,因为我现在陷入困境 抱歉英文和格式不好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” 我希
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;
}
}