以下问题令我难以置信,所以我来到这里寻求帮助。
经过实验,我最终得到了这段代码:
JTextArea chatPanel = null;
JScrollPane scrollPanel = null;
if(chatPanel == null)
{
chatPanel = new JTextArea("derp");
chatPanel.setEditable(false);
chatPanel.setForeground(new Color(10,191,26));
chatPanel.setOpaque(false);
scrollPanel = new JScrollPane(chatPanel);
scrollPanel.setOpaque(false);
scrollPanel.getViewport().setOpaque(false);
scrollPanel.setBorder(BorderFactory.createEmptyBorder());
}
//## marked area ##
scrollPanel.setBounds(9,596,435,138);
pane.add(scrollPanel);
结果呢?什么都没有出现。我预期的文本区域中有“derp”不在那里,只是一个空的滚动面板。现在,如果我转到##标记区域##并将其替换为:
chatPanel.append("Hello.");
chatPanel在scrollPanel中显示正常,其文本为“derpHello。”。根据发生的事情有什么想法吗?
对于记录,窗格是一个具有空布局的简单容器,否则显示传送正常。声明,仅供记录:
Container pane = getContentPane()
pane.setLayout(null);
答案 0 :(得分:2)
我对以下代码没有任何问题,我可以看到绿色的“derp”就好了:
import java.awt.Color;
import java.awt.Container;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
public class TestTextArea {
private void initUI() {
JFrame frame = new JFrame("test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTextArea chatPanel = null;
JScrollPane scrollPanel = null;
Container pane = frame.getContentPane();
pane.setLayout(null);
if (chatPanel == null) {
chatPanel = new JTextArea("derp");
chatPanel.setEditable(false);
chatPanel.setForeground(new Color(10, 191, 26));
chatPanel.setOpaque(false);
scrollPanel = new JScrollPane(chatPanel);
scrollPanel.setOpaque(false);
scrollPanel.getViewport().setOpaque(false);
scrollPanel.setBorder(BorderFactory.createEmptyBorder());
}
// ## marked area ##
scrollPanel.setBounds(9, 596, 435, 138);
pane.add(scrollPanel);
frame.validate();
frame.setSize(600, 800);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new TestTextArea().initUI();
}
});
}
}
现在,我建议您使用适当的LayoutManager
而不是null布局。这样您就可以使用pack()
和revalidate()
,并且可以使用更简单,更易于维护的代码。
您的代码现在必须有其他内容。尝试添加SSCCE。
答案 1 :(得分:0)
在使用空String初始化时,JTextArea中没有任何内容显示。当你向它添加一些东西时,里面有效的文字。
请注意,您的JScrollPane永远不会尝试在内部调整组件的大小(为什么它还允许您滚动?)。因此,您必须在JTextArea上设置维度。
编辑(在您的代码更正后):我可以通过以下代码看到“derp”。
public class TextTest extends JFrame {
public TextTest () {
JPanel pane = new JPanel();
JTextArea chatPanel = null;
JScrollPane scrollPanel = null;
if(chatPanel == null)
{
chatPanel = new JTextArea("derp");
chatPanel.setEditable(false);
chatPanel.setForeground(new Color(10,191,26));
chatPanel.setOpaque(false);
scrollPanel = new JScrollPane(chatPanel);
scrollPanel.setOpaque(false);
scrollPanel.getViewport().setOpaque(false);
scrollPanel.setBorder(BorderFactory.createEmptyBorder());
}
//## marked area ##
scrollPanel.setBounds(9,596,435,138);
pane.add(scrollPanel);
setContentPane(pane);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new TextTest();
}
}