Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.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 JFrame显示为灰色,空白_Java_Swing - Fatal编程技术网

Java JFrame显示为灰色,空白

Java JFrame显示为灰色,空白,java,swing,Java,Swing,我有一个问题,我的框架显示为灰色,但几秒钟后,它显示的图像作为我的for循环正在完成。我需要使它能够在打开后正确显示图像,以便显示循环。这是我的全部代码,长度很抱歉: import java.awt.*; import javax.swing.*; public class MainFrame extends JFrame{ public void MainFrame() { setTitle("Game"); setSize(1300, 650);

我有一个问题,我的框架显示为灰色,但几秒钟后,它显示的图像作为我的for循环正在完成。我需要使它能够在打开后正确显示图像,以便显示循环。这是我的全部代码,长度很抱歉:

import java.awt.*;
import javax.swing.*;

public class MainFrame extends JFrame{
    public void MainFrame() {
        setTitle("Game");
        setSize(1300, 650);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        setBackground(Color.WHITE);
        Dice diceObject = new Dice();
        add(diceObject);
    }
}
import java.awt.*;
import java.util.Random;
import javax.swing.*;


public class Dice extends JPanel {

 public static int pause(int n)
    {
        try {
            Thread.sleep(n);
            } catch(InterruptedException e) {
        }
        return n;
    }

public void Dice() {
    setDoubleBuffered(true);
}

@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    int width = getWidth();    
    int height = getHeight(); 

    int num = 0;
    for (int i = 0; i < 7; i++) {
        Random generator= new Random();
        int number = generator.nextInt(6)+1;
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, width, height);
        g.setColor(Color.BLACK);
        g.drawRoundRect(550, 150, 200, 200, 50, 50);
        System.out.println("Test");
        if (number == 1) {                  //Roll one
            num = 1;
            g.setColor(new Color (0, 0, 0));
            g.fillOval(640, 240, 20, 20);
            pause(100);
        } if (number == 2) {                //Roll two
            num = 2;
            g.setColor(new Color (0, 0, 0));
            g.fillOval(590, 290, 20, 20);
            g.fillOval(690, 190, 20, 20);
            pause(100);
        } if (number == 3) {                //Roll three
            num = 3;
            g.setColor(new Color (0, 0, 0));
            g.fillOval(590, 290, 20, 20);
            g.fillOval(640, 240, 20, 20);
            g.fillOval(690, 190, 20, 20);
            pause(100);
        } if (number == 4) {                //Roll four
            num = 4;
            g.setColor(new Color (0, 0, 0));
            g.fillOval(590, 290, 20, 20);
            g.fillOval(590, 190, 20, 20);
            g.fillOval(690, 290, 20, 20);
            g.fillOval(690, 190, 20, 20);
            pause(100);
        } if (number == 5) {                //Roll five
            num = 5;
            g.setColor(new Color (0, 0, 0));
            g.fillOval(590, 290, 20, 20);
            g.fillOval(590, 190, 20, 20);
            g.fillOval(640, 240, 20, 20);
            g.fillOval(690, 290, 20, 20);
            g.fillOval(690, 190, 20, 20);
            pause(100);
        } if (number == 6) {                //Roll six
            num = 6;
            g.setColor(new Color (0, 0, 0));
            g.fillOval(590, 190, 20, 20);
            g.fillOval(590, 240, 20, 20);
            g.fillOval(590, 290, 20, 20);
            g.fillOval(690, 190, 20, 20);
            g.fillOval(690, 240, 20, 20);
            g.fillOval(690, 290, 20, 20);
            pause(100);
        }
    }
    g.setFont(new Font("TimesRoman", Font.PLAIN, 20));
    g.drawString("You rolled a " + num, 590, 100);
    pause(1000);
}
}
import java.awt.*;
导入javax.swing.*;
公共类大型机扩展JFrame{
公共虚拟主机(){
片名(“游戏”);
设置大小(1300650);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(真);
挫折地面(颜色:白色);
骰子骰子对象=新骰子();
添加(对象);
}
}
导入java.awt.*;
导入java.util.Random;
导入javax.swing.*;
公共类骰子扩展JPanel{
公共静态整数暂停(整数n)
{
试一试{
睡眠(n);
}捕捉(中断异常e){
}
返回n;
}
公共无效骰子(){
setDoubleBuffered(真);
}
@凌驾
公共组件(图形g){
超级组件(g);
int width=getWidth();
int height=getHeight();
int num=0;
对于(int i=0;i<7;i++){
随机生成器=新随机();
int编号=发电机。nextInt(6)+1;
g、 setColor(Color.WHITE);
g、 fillRect(0,0,宽度,高度);
g、 设置颜色(颜色为黑色);
g、 drawRoundRect(550、150、200、200、50、50);
系统输出打印(“测试”);
如果(数字==1){//滚动一次
num=1;
g、 setColor(新颜色(0,0,0));
g、 圆形(640240,20,20);
暂停(100);
}如果(数字==2){//滚动二次
num=2;
g、 setColor(新颜色(0,0,0));
g、 圆形(59029020);
g、 圆形(69019020);
暂停(100);
}如果(数字==3){//滚动三次
num=3;
g、 setColor(新颜色(0,0,0));
g、 圆形(59029020);
g、 圆形(640240,20,20);
g、 圆形(69019020);
暂停(100);
}如果(数字==4){//滚动四次
num=4;
g、 setColor(新颜色(0,0,0));
g、 圆形(59029020);
g、 圆角(590190,20,20);
g、 圆形(690,290,20,20);
g、 圆形(69019020);
暂停(100);
}如果(数字==5){//滚动五次
num=5;
g、 setColor(新颜色(0,0,0));
g、 圆形(59029020);
g、 圆角(590190,20,20);
g、 圆形(640240,20,20);
g、 圆形(690,290,20,20);
g、 圆形(69019020);
暂停(100);
}如果(数字==6){//滚动六次
num=6;
g、 setColor(新颜色(0,0,0));
g、 圆角(590190,20,20);
g、 圆角(590240,20,20);
g、 圆形(59029020);
g、 圆形(69019020);
g、 圆形(690,240,20,20);
g、 圆形(690,290,20,20);
暂停(100);
}
}
g、 setFont(新字体(“TimeRoman”,Font.PLAIN,20));
g、 抽绳(“你掷了一个”+num,590100);
暂停(1000);
}
}

提前感谢。

第一个问题是,在添加任何内容之前,您正在将框架设置为可见

相反,请尝试最后调用
setVisible

public class MainFrame extends JFrame{
    public void MainFrame() {
        setTitle("Game");
        setSize(1300, 650);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBackground(Color.WHITE);
        Dice diceObject = new Dice();
        add(diceObject);
        setVisible(true);
    }
}
您还应该避免直接从
JFrame
扩展,因为您没有向类添加任何新功能,需要考虑并确保在事件调度线程的上下文中启动主UI

你的其他问题与你的工作有关

使用工作示例更新

因为我很懒,所以我使用了图形2D API来绘制点。我这样做是因为许多点出现在许多数字的相同位置

import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Ellipse2D;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class DiceRoller {

    public static void main(String[] args) {
        new DiceRoller();
    }

    public DiceRoller() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new Die());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class Die extends JPanel {

        private int number = 1;

        public Die() {
            Timer timer = new Timer(500, new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    number = (int) (Math.round((Math.random() * 5) + 1));
                    repaint();
                }
            });
            timer.setRepeats(true);
            timer.setInitialDelay(0);
            timer.start();
        }

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

        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2d = (Graphics2D) g.create();
            int width = getWidth();
            int height = getHeight();

            g2d.setColor(Color.WHITE);
            g2d.fillRect(0, 0, width, height);
            g2d.setColor(Color.BLACK);
            g2d.drawRoundRect(10, 10, width - 20, height - 20, 50, 50);

            List<Shape> dots = new ArrayList<>(6);

            if (number == 1 || number == 3 || number == 5) {
                int x = (width - 20) / 2;
                int y = (height - 20) / 2;
                dots.add(new Ellipse2D.Float(x, y, 20, 20));
            }

            if (number == 2 || number == 3 || number == 4 || number == 5 || number == 6) {

                int x = ((width / 2) - 20) / 2;
                int y = ((height / 2) - 20) / 2;
                dots.add(new Ellipse2D.Float(x, y, 20, 20));
                dots.add(new Ellipse2D.Float(x + (width / 2), y + (height / 2), 20, 20));

            }

            if (number == 4 || number == 5 || number == 6) {

                int x = (width / 2) + (((width / 2) - 20) / 2);
                int y = ((height / 2) - 20) / 2;
                dots.add(new Ellipse2D.Float(x, y, 20, 20));
                dots.add(new Ellipse2D.Float(x - (width / 2), y + (height / 2), 20, 20));

            }

            if (number == 6) {

                int x = (((width / 2) - 20) / 2);
                int y = (height - 20) / 2;
                dots.add(new Ellipse2D.Float(x, y, 20, 20));
                dots.add(new Ellipse2D.Float(x + (width / 2), y, 20, 20));

            }

            for (Shape dot : dots) {
                g2d.fill(dot);
            }

            g2d.dispose();
        }
    }
}
导入java.awt.Color;
导入java.awt.Dimension;
导入java.awt.EventQueue;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入java.awt.Shape;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.geom.Ellipse2D;
导入java.util.ArrayList;
导入java.util.List;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.Timer;
导入javax.swing.UIManager;
导入javax.swing.UnsupportedLookAndFeelException;
公营掷骰机{
公共静态void main(字符串[]args){
新滚筒();
}
公众掷骰子(){
invokeLater(新的Runnable(){
@凌驾
公开募捐{
试一试{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}catch(ClassNotFoundException |实例化Exception | IllegalacessException |不支持ookandfeelException ex){
}
JFrame=新JFrame(“测试”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
添加(新模具());
frame.pack();
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
});
}
公共类扩展JPanel{
私有整数=1;
公众死亡(){
计时器计时器=新计时器(500,新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
number=(int)(Math.round((Math.random()*5)+1));
重新油漆();
}
});
timer.setRepeats(真);
timer.setInitialDelay(0);
timer.start();
}
@凌驾
公共维度getPreferredSize(){
返回新维度(220、220);
}