JScrollPane的Java视图只显示了一半的时间

时间:2012-12-02 05:16:29

标签: java swing jscrollpane repaint

刚开始使用Swing,我选择了null布局,因为我来自Flash世界,我习惯于指定每个像素和大小。我稍后会接受布局。

现在的问题是作为JScrollPane视图的JTextArea只出现在我运行程序的一半时间。我不能选择它或键入它,因为它不存在。该窗格100%的时间出现。如果我按Tab键几次,焦点将落在文本区域,然后它就会出现。

我删除了与问题无关的大量代码。这就是为什么有些代码看起来很奇怪,比如MenuItemSelected。

在PathsPanel的构造函数结束时有很多重绘,因为这是我解决这个问题的“最后一次努力”,因为我在许多线程中读到重绘通常会修复未显示的内容。

此外,如果我在重新绘制之上注释掉setText,文本区域的显示频率会更低。

DayPlanner

public DayPlanner () {
    //win is a JFrame
    win.setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE);
    win.setLayout (null);
    win.setResizable (false);
    win.setVisible (true);

    MenuItemSelected ("Paths");
    win.repaint ();
}

public void MenuItemSelected (String command) {
    ChangePanel (PathsPanel.class, pathsPanel);
}

private void ChangePanel (Class panelClass, Component ref) {
        activePanel = new PathsPanel (this);
        pathsPanel = (PathsPanel) activePanel;

        win.add (activePanel);
        win.repaint ();
    }
}

PathsPanel

public PathsPanel (DayPlanner parent) {
    //extends JPanel
    this.parent = parent;

    setLayout (null);
    setBounds (0, 0, 500, 500);

    txtMessages = new JTextArea ();
    txtMessages.setOpaque (true);
    txtMessages.setBackground (Color.RED);

    JScrollPane scpMessage = new JScrollPane (txtMessages, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    scpMessage.setBounds (0, 0, 500, 500);

    txtMessages.setText ("AWD");
    txtMessages.repaint ();
    scpMessage.repaint ();
    repaint ();
}

我敢打赌这与不使用LayoutManager有关!

0 个答案:

没有答案