JAVA 一个关于JPanel的问题
我在编写一个小程序的时候,遇到了一个问题.为了减少代码量.给出下面一段代码.在TetrisFrame类中有3句代码:代码一,代码二,代码三.如果启用代码二和代码三,面板上...
我在编写一个小程序的时候,遇到了一个问题.为了减少代码量.给出下面一段代码.
在TetrisFrame类中有3句代码:代码一,代码二,代码三. 如果启用代码二和代码三,面板上的字体就会模糊不清;但如果启用代码一,面板就显示正常.
这是为什么呢?我想知道原因.
import java.awt.*;
import javax.swing.*;
public class KeyListener
{
public static void main(String[] agrs)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
TetrisFrame frame = new TetrisFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
class TetrisFrame extends JFrame
{
public TetrisFrame()
{
setSize(300, 200);
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
SwingUtilities.updateComponentTreeUI(this);
}
catch (Exception e)
{
e.printStackTrace();
}
//add(new MessagePanel(), BorderLayout.EAST);//代码一
//add(messagePanel, BorderLayout.EAST);//代码二
}
//private MessagePanel messagePanel = new MessagePanel();//代码三
}
class MessagePanel extends JPanel
{
public MessagePanel()
{
JPanel infoPanel = new JPanel(new GridLayout(4, 1));
infoPanel.add(new JLabel("得分"));
infoPanel.add(new JTextField(" 0"));
infoPanel.add(new JLabel("消行"));
infoPanel.add(new JTextField(" 0"));
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new GridLayout(2, 1));
buttonPanel.add(new JButton("没有的按钮"));
buttonPanel.add(new JButton("没有的按钮"));
setLayout(new GridLayout(2, 1, 0, 4));
add(infoPanel);
add(buttonPanel);
}
}
我使用的是JAVA SE 6u16 Eclipse3.5 展开
在TetrisFrame类中有3句代码:代码一,代码二,代码三. 如果启用代码二和代码三,面板上的字体就会模糊不清;但如果启用代码一,面板就显示正常.
这是为什么呢?我想知道原因.
import java.awt.*;
import javax.swing.*;
public class KeyListener
{
public static void main(String[] agrs)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
TetrisFrame frame = new TetrisFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
class TetrisFrame extends JFrame
{
public TetrisFrame()
{
setSize(300, 200);
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
SwingUtilities.updateComponentTreeUI(this);
}
catch (Exception e)
{
e.printStackTrace();
}
//add(new MessagePanel(), BorderLayout.EAST);//代码一
//add(messagePanel, BorderLayout.EAST);//代码二
}
//private MessagePanel messagePanel = new MessagePanel();//代码三
}
class MessagePanel extends JPanel
{
public MessagePanel()
{
JPanel infoPanel = new JPanel(new GridLayout(4, 1));
infoPanel.add(new JLabel("得分"));
infoPanel.add(new JTextField(" 0"));
infoPanel.add(new JLabel("消行"));
infoPanel.add(new JTextField(" 0"));
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new GridLayout(2, 1));
buttonPanel.add(new JButton("没有的按钮"));
buttonPanel.add(new JButton("没有的按钮"));
setLayout(new GridLayout(2, 1, 0, 4));
add(infoPanel);
add(buttonPanel);
}
}
我使用的是JAVA SE 6u16 Eclipse3.5 展开
3个回答
展开全部
应该是程序的UI风格不统一造成的吧.
使用代码一的情况下,
先用
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
SwingUtilities.updateComponentTreeUI(this);
设置了系统的UI表现风格,而后才用
add(new MessagePanel(), BorderLayout.EAST); // MessagePanel 使用设置的风格
创建一个MessagePanel并把它加到主面板上.
在使用代码二+代码三的情况下,在设置UI表现风格时,MessagePanel已经利用默认的UI风格建立完毕了.然后把它再加到主面板上.
private MessagePanel messagePanel = new MessagePanel();//这时,使用默认的风格,因为还没有执行设置UI风格的语句
由于风格不统一,所以感觉怪怪的.
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
SwingUtilities.updateComponentTreeUI(this);
这两句应该在所有的组件建立前执行.
使用代码一的情况下,
先用
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
SwingUtilities.updateComponentTreeUI(this);
设置了系统的UI表现风格,而后才用
add(new MessagePanel(), BorderLayout.EAST); // MessagePanel 使用设置的风格
创建一个MessagePanel并把它加到主面板上.
在使用代码二+代码三的情况下,在设置UI表现风格时,MessagePanel已经利用默认的UI风格建立完毕了.然后把它再加到主面板上.
private MessagePanel messagePanel = new MessagePanel();//这时,使用默认的风格,因为还没有执行设置UI风格的语句
由于风格不统一,所以感觉怪怪的.
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
SwingUtilities.updateComponentTreeUI(this);
这两句应该在所有的组件建立前执行.
展开全部
的确很费解,我也研究下
不过好像是全局变量的问题 把messagePanel定义放进复合语句就没问题了。
楼主有发现也分享下,相互学习!
iceliushuai 正解
可能是类的对象在定义时没有来的及 定义UI风格
不过好像是全局变量的问题 把messagePanel定义放进复合语句就没问题了。
楼主有发现也分享下,相互学习!
iceliushuai 正解
可能是类的对象在定义时没有来的及 定义UI风格
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
netBeans里一切正常!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询