刚开始使用 Swing,我选择了 null 布局,因为我来自 Flash 世界,并且习惯于指定每个像素和大小。稍后我会了解布局。
现在的问题是作为 JScrollPane 视图的 JTextArea 仅在我运行程序的一半时间出现。我无法选择它或输入它,因为它不存在。不过,窗格出现 100% 的时间。如果我点击几次选项卡,焦点将落在文本区域上,然后它就会出现。
我已经删除了大量与问题无关的代码。这就是为什么有些代码看起来像 MenuItemSelected 很奇怪的原因。
在 PathsPanel 的构造函数的末尾有很多重绘,因为这是我解决这个问题的“最后一搏”,因为我在许多线程中读到了重绘通常会修复未显示的问题。
此外,如果我注释掉重绘上方的 setText,则文本区域的显示频率会更低。
日程表
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 ();
}
}
路径面板
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 有关!