JFrame - 手动调整大小问题

时间:2016-04-05 21:19:20

标签: java swing awt layout-manager

晚上好,

我创建了一个带有costum布局和JPanel的窗口。当我手动调整大小时,它会闪烁,因为Java会将JPanel绘制为false,以便在正确的位置再次绘制它。

我做了一个简短的示例程序,包括我的问题:

public class Starter {

   private static TestWindow testWindow;

   public static void main(String[] args) {
     testWindow = new TestWindow();
   }
}
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class TestWindow {

    private JFrame frame;

    public TestWindow() {
        frame = new JFrame();
        frame.setBounds(100, 100, 765, 599);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        frame.setLayout(new OwnLayout());

        JPanel pnl = new JPanel();
        pnl.setBackground(Color.BLUE);
        frame.add("", pnl);
    }
}
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.LayoutManager;

import javax.swing.JPanel;

public class OwnLayout implements LayoutManager {

    JPanel pnl;

    public OwnLayout() {
    }

    @Override
    public void addLayoutComponent(String name, Component comp) {
        pnl = (JPanel) comp;
    }

    @Override
    public void layoutContainer(Container parent) {
        if (pnl != null)
            pnl.setBounds((int) parent.getWidth() - 50, 0, 50, (int) parent.getHeight());
    }

    @Override
    public Dimension minimumLayoutSize(Container parent) {
        return null;
    }

    @Override
    public Dimension preferredLayoutSize(Container parent) {
        return null;
    }

    @Override
    public void removeLayoutComponent(Component comp) {
        pnl = null;
    }
 }

拖动框架的左边框时,仅显示闪烁。 该问题可能链接到:

  

由于本机事件处理的异步性质,结果   由getBounds,getLocation,getLocationOnScreen和getSize返回   可能无法在屏幕上反映窗口的实际几何形状   最后一个请求已被处理。在处理过程中   后续请求这些值可能会相应地改变   窗口管理系统满足要求。

(引自https://docs.oracle.com/javase/7/docs/api/java/awt/Window.html

我需要一个防止闪烁的解决方案。有没有人有想法?

0 个答案:

没有答案