我想创建一个简单的基于GUI的'Echo'应用程序,它能够在之前的输入中向上和向下滚动。到目前为止,一切正常,除非我将JTextPane添加到JScrollPane,我丢失输入并且滚动永远不会出现。
有人能指出我正确的方向吗?
这是我到目前为止的代码:
import java.awt.*;
import javax.swing.*;
public class FileReaderGui {
private JFrame frame;
private JPanel inputPanel;
private JTextField userInput;
private JScrollPane scrollPane;
private JTextPane display;
JButton print;
public void show() {
frame = new JFrame();
frame.setSize(400, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
buildInputPanel();
buildDisplayPanel();
frame.getContentPane().add(inputPanel, BorderLayout.SOUTH);
frame.getContentPane().add(scrollPane, BorderLayout.CENTER);
frame.setVisible(true);
}
public void buildDisplayPanel() {
display = new JTextPane();
scrollPane = new JScrollPane(display);
}
public void buildInputPanel() {
inputPanel = new JPanel();
userInput = new JTextField();
userInput.setColumns(20);
inputPanel.add(userInput);
print = new JButton("Print");
print.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String current = display.getText();
String input = userInput.getText();
String newText = String.format("%s\n%s", current, input);
display.setText(newText);
}
});
inputPanel.add(print);
}
}
而且,这是来电者:
public class FileReader {
public void go() {
FileReaderGui gui = new FileReaderGui();
gui.show();
}
public static void main(String[] args) {
new FileReader().go();
}
}
答案 0 :(得分:1)
I'd say you should have scrollPane = new JScrollPane(display);
我也同意上述内容。
您是否重新排序代码以确保在创建滚动窗格之前创建了文本窗格?
//scrollPane = new JScrollPane();
//display = new JTextPane();
//scrollPane.add(display);
display = new JTextPane();
scrollPane = new JScrollPane(display);
如果这样做无效,请发布包含main()方法的SSCCE
来执行您的代码。
答案 1 :(得分:1)
刚才有机会测试代码,我在评论中的建议对我有用。
这里有两种选择:
public void buildDisplayPanel() {
display = new JTextPane();
scrollPane = new JScrollPane();
scrollPane.getViewport().add(display);
}
或者如上所述:
public void buildDisplayPanel() {
display = new JTextPane();
scrollPane = new JScrollPane(display);
}
他们似乎都在我的测试中为我工作。
在我在上面的评论中链接的JavaDoc中,JScrollPane
显示了相关的JViewport
,可以检索并添加到(第一个示例)或在初始化时创建(第二个示例) ;您还可以使用setViewport()
JScrollPane
函数