摇摆闪烁

时间:2019-07-02 13:17:18

标签: java swing flicker

我在使用Swing时遇到问题,我正在尝试制作日历,并且由于我将JLabel放在了JPanel中以及调用函数时显示了日期, setText可以更改显示日期,以使图像闪烁几毫秒,所有组件均放置在不合适的位置,然后一切正常显示。

即使在我启动应用程序时,图像也会闪烁,并且我注意到每个组件的paintComponent函数都被调用了三次...

总而言之,我做了一个名为Jpanel的{​​{1}},其中包含所有ContainerJLabel,我确实重写了它们的Jtextfield来调用{{1} }。 然后,我将容器添加到框架内并显示它。

课堂抽奖:

paintComponent

示例类

setBounds

感谢您的帮助

1 个答案:

答案 0 :(得分:-1)

我找到了解决问题的方法。我将解释如果有人遇到与我相同的问题,我将如何解决。

首先,如果要使用setBounds,请确保已将框架的布局设置为null,在我的情况下,我创建了一个JPanel,在其中添加了所有组件,因此将其布局设置为null。

JPanel Container = new JPanel();
JFrame frame = new JFrame("Name of your APP");
Container.setLayout(null);
frame.setLayout(null);

然后编写一个类,扩展您要使用的组件,因此在我的情况下,我编写了以下类

class label extends JLabel{
        int x;
        int y;
        int width;
        int height;
        public label(String text,int x, int y, int width, int height) {
            this.x = x;
            this.y = y;
            this.width = width;
            this.height = height;
            this.setText(text);
            this.setBounds(x, y, width,height);
            this.setHorizontalAlignment(SwingConstants.CENTER);

        }
}


class button extends JButton{
        public button(String text,int x, int y,int width,int height){
            this.setText(text);
            this.setBounds(x, y, width, height);

        }


} 
class textField extends JTextField{

        public textField(int col,int x,int y ,int width,int height){
            this.setBounds(x, y, width,height);
            this.setColumns(col);

        }

}       

如果您想控制框架中的所有内容并设置绝对位置,这种方法效果很好。

希望它会有所帮助:)