我正在尝试将大量数据(成员(member)记录)输出到 JTextArea,然后将其转储到 scrollPane。这是代码。
package Ginfo;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import java.io.*;
public class ReviewAll extends JFrame implements ActionListener {
Container RA;
JPanel ReviewAll;
JTextArea output;
JButton back, quit;
Message m;
ConnectInfo c;
ObjectOutputStream oout;
ObjectInputStream oin;
public ReviewAll(ObjectOutputStream oout2, ObjectInputStream oin2,
Message m2, ConnectInfo a) {
super("Full results");
m = m2;
c = a;
oout = oout2;
oin = oin2;
try {
oout.reset();
} catch (IOException e) {
}
RA = getContentPane();
BuildGUI();
RA.add(ReviewAll);
pack();
setLocationRelativeTo(null);
setVisible(true);
try {
m.type = Message.REVIEWALL;
oout.writeObject(m);
while (!m.response.equals("End of list")) {
m = (Message) oin.readObject();
output.append("Member: " + m.main + "\n");
output.append("Invited by: " + m.invitedBy + " on " + m.when
+ "\n");
output.append("Recommended by: " + m.HDTH + "\n\n");
}
m.response = "";
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
private void BuildGUI() {
ReviewAll = new JPanel();
output = new JTextArea();
output.setPreferredSize(new Dimension(400, 400));
output.setEditable(false);
JScrollPane scrollPane = new JScrollPane(output);
scrollPane
.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
back = new JButton("Close window");
quit = new JButton("Exit Program");
ReviewAll.add(scrollPane, BorderLayout.NORTH);
ReviewAll.add(back, BorderLayout.SOUTH);
ReviewAll.add(quit, BorderLayout.SOUTH);
back.addActionListener(this);
quit.addActionListener(this);
}
public void actionPerformed(ActionEvent re) {
if (re.getSource() == back) {
new WhatToDo(oout, oin, m, c);
dispose();
} else if (re.getSource() == quit) {
if (oout != null) {
try {
oout.flush();
oout.close();
oin.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
System.exit(0);
}
}
}
不过,当我这样做时,我只能看到前 5 条记录(足以填满我的 JTextArea)并且无法向下滚动以查看其余记录。作为记录,当发送的记录保存在 list.size() 时,我在服务器代码上有 m.response = "End of List",然后它被传输到客户端(如下所列)并且我知道它工作正常。我知道这是滚动条的问题。提前感谢您的帮助。
最佳答案
I know this is an issue with the scroller.
问题不在于滚动条,而在于您如何设置 JTextArea 的大小或 preferredSize,这会阻止它正常扩展。而是设置它的列和行,因为这将告诉 JScrollPane 它应该在其视口(viewport)中查看多少行和多少列。
即,改变这个:
ReviewAll = new JPanel();
output = new JTextArea();
output.setPreferredSize(new Dimension (400,400));
为此:
ReviewAll = new JPanel();
// ROW_COUNT & COL_COUNT are int constants defined elsewhere
output = new JTextArea(ROW_COUNT, COL_COUNT); // using whatever numbers work best.
// don't set the text area's preferredSize:
// output.setPreferredSize(new Dimension (400,400));
当然,最好避免使用魔数(Magic Number),而是对行数和列数使用常量。
关于java - 滚动 Pane 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11181083/