Java-Swing GUI在Windows7中呈现不正确
我正在用Java和Swing GUI构建一个Tic-Tac-Toe游戏,它在Ubuntu10.4和WindowsXP中正确呈现。这是Ubuntu中的外观: 当我复制包含所有类文件的bin文件夹并尝试在Windows 7中运行该程序时,它看起来是这样的: 我就是不明白怎么了。正如我所说,它在Ubuntu 10.4和Windows XP中工作得非常完美 如果有人能帮我,我会很高兴的!我将发布与GUI相关的代码,以防需要它来解决问题 以下是我用来初始化GUI的代码: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
//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它会更改偏移量,并可能使组件树上的布局无效。我想可以肯定地说,在这一点上,所有的赌注都没有了。啊,我想我现在明白了。我想用新的边界替换旧的边界,但显然这不是方法的工作原理。谢谢你的帮助!