Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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 奇怪的提神行为_Java_User Interface - Fatal编程技术网

Java 奇怪的提神行为

Java 奇怪的提神行为,java,user-interface,Java,User Interface,我做了一个网格,你可以在那里放置标记。我的问题是,当我调整窗口大小时,这些标记有时会出现,有时不会出现。此外,当我遮住窗口的一部分时,我会丢失该区域的标记 代码非常简单: import javax.swing.*; 导入java.lang.Math; 导入java.awt.*; 导入java.awt.event.*; 枚举标记颜色{ 红色,绿色,没有 }; 公共类tictactoe扩展JFrame{ 私有类Plansza扩展了JPanel{ 私有整数x0,y0,网格大小,步长; 专用图形; 专用

我做了一个网格,你可以在那里放置标记。我的问题是,当我调整窗口大小时,这些标记有时会出现,有时不会出现。此外,当我遮住窗口的一部分时,我会丢失该区域的标记

代码非常简单:

import javax.swing.*;
导入java.lang.Math;
导入java.awt.*;
导入java.awt.event.*;
枚举标记颜色{
红色,绿色,没有
};
公共类tictactoe扩展JFrame{
私有类Plansza扩展了JPanel{
私有整数x0,y0,网格大小,步长;
专用图形;
专用markerColor[][]网格;
公共计划(a){
网格=新的markerColor[29][29];
for(inti=0;i=gridSize)返回;
int X=X/步,Y=Y/步;
placeMarker(X,Y,markerColor.green);
栅格[X][Y]=标记颜色绿色;
}
});
}
公共组件(图形g){
超级组件(g);
int width=getWidth();
int height=getHeight();
gridSize=数学最小值(宽度、高度);
步长=网格大小/29;
gridSize=步骤*29;
x0=(宽度网格尺寸)/2;
y0=(高度网格大小)/2;
graph=getGraphics();
g、 设置颜色(颜色为黑色);

对于(inti=1,pointer=step;i我试图用它制作一个SSCCE,它工作正常

public class SSCCE extends JPanel {

    enum markerColor {
        red, green, none
    };

    markerColor grid [][];
    int gridSize = 29;
    int x0 = 0;
    int y0=0;
    int step = 1;
    Graphics graph;
    public SSCCE() {
        grid = new markerColor[29][29];
        for(int i = 0; i<29;i++)
            for(int j = 0; j<29;j++)
                grid[i][j] = markerColor.none;

        addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                int x = e.getX(), y = e.getY();
                x-=x0; y-=y0;

                int X = x/step, Y = y/step;

                //Changed here
                if(X>=gridSize || Y>=gridSize || X < 0 || Y < 0) return;

                placeMarker(X,Y, markerColor.green);
                grid[X][Y] = markerColor.green;

                //Call repaint in the mouse click 
                repaint();
            }
        });
    }
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        int width = getWidth();
        int height = getHeight();
        int gridSize = Math.min(width,height);
        step = gridSize/29;
        gridSize = step*29;
        x0 = (width-gridSize)/2;
        y0 = (height-gridSize)/2;
        graph = g;

        graph.setPaintMode();
        g.setColor(Color.black);
        for(int i = 1, pointer=step; i<=28; i++, pointer+=step) {
            g.drawLine(x0+pointer,y0,x0+pointer,y0+gridSize);
            g.drawLine(x0,y0+pointer,x0+gridSize,y0+pointer);
        }

        g.fillOval(10, 10, 40, 50);
        for(int i = 0; i<29;i++)
            for(int j = 0; j<29;j++)
                if(grid[i][j] != markerColor.none)
                    placeMarker(i,j,grid[i][j]);
    }
    public void placeMarker(int X, int Y, markerColor m) {
        int x = X*step+2*step/10, y = Y*step+2*step/10;
        switch(m) {
        case red:
            graph.setColor(Color.red);
            break;
        case green:
            graph.setColor(Color.green);
            break;
        default :
            graph.setColor(Color.blue);
        }
        graph.fillOval(x0+x,y0+y, step*6/10, step*6/10);

    }


    public static void main(String arg[]){
        JFrame frame = new JFrame();
        frame.add(new SSCCE(), BorderLayout.CENTER);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);

    }
}
公共类SSCCE扩展了JPanel{
枚举标记颜色{
红色,绿色,没有
};
markerColor网格[];
int gridSize=29;
int x0=0;
int y0=0;
int步长=1;
图形;
公共服务{
网格=新的markerColor[29][29];
对于(int i=0;i=gridSize | | X<0 | | Y<0)返回;
placeMarker(X,Y,markerColor.green);
栅格[X][Y]=标记颜色绿色;
//在鼠标单击中调用“重新绘制”
重新油漆();
}
});
}
公共组件(图形g){
超级组件(g);
int width=getWidth();
int height=getHeight();
int gridSize=Math.min(宽度、高度);
步长=网格大小/29;
gridSize=步骤*29;
x0=(宽度网格尺寸)/2;
y0=(高度网格大小)/2;
图=g;
setPaintMode();
g、 设置颜色(颜色为黑色);

对于(int i=1,pointer=step;如果要更快地获得帮助,请发布一条。
for(int i=0;我刚刚在鼠标单击中尝试了重新绘制(),效果非常糟糕:(。如果只是我,这一定是操作系统相关的问题:C@lord.didger也可以使用
paintComponent(graphics g)
的图形对象,而不是getGraphics