Java-Swing GUI在Windows7中呈现不正确

Java-Swing GUI在Windows7中呈现不正确,java,windows,user-interface,swing,Java,Windows,User Interface,Swing,我正在用Java和Swing GUI构建一个Tic-Tac-Toe游戏,它在Ubuntu10.4和WindowsXP中正确呈现。这是Ubuntu中的外观: 当我复制包含所有类文件的bin文件夹并尝试在Windows 7中运行该程序时,它看起来是这样的: 我就是不明白怎么了。正如我所说,它在Ubuntu 10.4和Windows XP中工作得非常完美 如果有人能帮我,我会很高兴的!我将发布与GUI相关的代码,以防需要它来解决问题 以下是我用来初始化GUI的代码: //Initializin

我正在用Java和Swing GUI构建一个Tic-Tac-Toe游戏,它在Ubuntu10.4和WindowsXP中正确呈现。这是Ubuntu中的外观:

当我复制包含所有类文件的bin文件夹并尝试在Windows 7中运行该程序时,它看起来是这样的:

我就是不明白怎么了。正如我所说,它在Ubuntu 10.4和Windows XP中工作得非常完美

如果有人能帮我,我会很高兴的!我将发布与GUI相关的代码,以防需要它来解决问题

以下是我用来初始化GUI的代码:

//Initializing GUI.
    frame = new JFrame();  //Creating the window.
    frame.setTitle("Tic Tac Toe"); //Setting the title of the window.
    frame.addMouseListener(this);
    frame.getContentPane().add(BorderLayout.CENTER, grid.getPanel());  //Adding the grid panel.
    info = new JLabel(" Initializing game...");         //Creating info text.
    frame.getContentPane().add(BorderLayout.SOUTH, info);  //Adding info text.

    //Setting GUI properties.
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(300, 300);
    frame.setVisible(true);
带有网格本身的面板是在我的GameGrid类中创建的,它有一个方法JPanel getPanel。下面是代码属于GameGrid构造函数的面板的初始化:

     GridBox temp;
    layout = new GridLayout(getHeight(), getWidth());
    panel = new JPanel(layout);
    panel.setBorder(
        BorderFactory.createCompoundBorder(
                BorderFactory.createTitledBorder("Click in a box to place a marker:"),
                    BorderFactory.createEmptyBorder(5,5,5,5)));

    //Creating a GridBox for each cell, and adding them to the panel in the right order..
    for(int i = 0; i < getHeight(); i++) {    
        for(int j = 0; j < getWidth(); j++) {
            temp = new GridBox(j, i);
            temp.addMouseListener(listener);
            panel.add(temp);
        }
    }

提前谢谢

在重新绘制组件时更改边框时,会出现明显的问题。这将导致各种各样的问题。

如果在重新绘制组件时更改边框,则会出现明显的问题。这会引起各种各样的问题。

而且,我看不出你在哪里画面板的背景。你应该

super.paintComponent(g);

在方法的顶部。

此外,我看不出在哪里绘制面板的背景。你应该

super.paintComponent(g);

在方法的顶部。

非常感谢!我移动了Border blackline=BorderFactory.createLineBorderColor.black;黑线;到构造函数,现在它工作了!但为什么在我这么做之前它不起作用呢?当然,我意识到,每次绘制组件时都不必设置边框,但我不明白这怎么会造成这么多麻烦。@Greensea它会更改偏移量,并可能使组件树上的布局无效。我想可以肯定地说,在这一点上,所有的赌注都没有了。啊,我想我现在明白了。我想用新的边界替换旧的边界,但显然这不是方法的工作原理。谢谢你的帮助!谢谢!我移动了Border blackline=BorderFactory.createLineBorderColor.black;黑线;到构造函数,现在它工作了!但为什么在我这么做之前它不起作用呢?当然,我意识到,每次绘制组件时都不必设置边框,但我不明白这怎么会造成这么多麻烦。@Greensea它会更改偏移量,并可能使组件树上的布局无效。我想可以肯定地说,在这一点上,所有的赌注都没有了。啊,我想我现在明白了。我想用新的边界替换旧的边界,但显然这不是方法的工作原理。谢谢你的帮助!