通过方法构建时 JTextArea 未出现在 JScrollPane 上
JTextArea not appearing on JScrollPane when building through methods
我正在尝试制作一个 class,我可以在其中通过调用不同的方法在其上构建 JFrame 来创建它。然而,我的 JTextArea 在某处丢失了......
下面是一个名为 class 的应用程序,其中包含我需要开始构建的方法...
public class App {
private JFrame frame = new JFrame();
private JTextArea textArea = new JTextArea();
private JScrollPane scrollPane = new JScrollPane();
public void openJFrame(String title, int x, int y){
JFrame.setDefaultLookAndFeelDecorated(true);
frame.setTitle(title);
frame.setSize(x, y);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public JFrame getJFrame(){
return frame;
}
public void addJTextArea(JScrollPane scrollPane){
scrollPane.add(textArea);
textArea.setLineWrap(true);
textArea.setEditable(true);
textArea.setVisible(true);
}
public JTextArea getJTextArea(){
return textArea;
}
public void addJScrollPane(JFrame frame){
frame.add(scrollPane);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
}
public JScrollPane getJScrollPane(){
return scrollPane;
}
我想从我的主要方法中调用这个 class 并构建一个 JFrame。以下是我的尝试。
public class Main {
public static void main(String[] args){
App app = new App();
app.addJTextArea(app.getJScrollPane());
app.addJScrollPane(app.getJFrame());
app.openJFrame("title", 500, 500);
}
出现的是 JFrame 和 ScrollPane。但是我的文本区域似乎没有添加到滚动窗格中。
我是不是误解或忽略了什么?可能值得注意的是,如果在 addJTextArea 方法中我直接将它添加到 JFrame 上而不使用它出现的 JScrollPane 方法(显然没有滚动窗格)
尽管 JScrollPane
可能 look/act/sound 类似于 JPanel
,但事实并非如此。因此,使用 JScrollPane.add()
将组件添加到滚动窗格可能听起来很自然,但却是错误的。 JScrollPane
内部只能有一个滚动的组件,因此 add()
是错误的,但是 setViewportView()
是要使用的方法。
您必须调整您的方法 addJTextArea
以使用 scrollPane.setViewportView()
而不是 scrollPane.add()
:
public void addJTextArea(JScrollPane scrollPane){
scrollPane.setViewportView(textArea);
textArea.setLineWrap(true);
textArea.setEditable(true);
textArea.setVisible(true);
}
将 scrollPane.add(textArea);
替换为 scrollPane.setViewportView(textArea);
。
有关详细信息,请阅读 How to Use Scroll Panes
我正在尝试制作一个 class,我可以在其中通过调用不同的方法在其上构建 JFrame 来创建它。然而,我的 JTextArea 在某处丢失了......
下面是一个名为 class 的应用程序,其中包含我需要开始构建的方法...
public class App {
private JFrame frame = new JFrame();
private JTextArea textArea = new JTextArea();
private JScrollPane scrollPane = new JScrollPane();
public void openJFrame(String title, int x, int y){
JFrame.setDefaultLookAndFeelDecorated(true);
frame.setTitle(title);
frame.setSize(x, y);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public JFrame getJFrame(){
return frame;
}
public void addJTextArea(JScrollPane scrollPane){
scrollPane.add(textArea);
textArea.setLineWrap(true);
textArea.setEditable(true);
textArea.setVisible(true);
}
public JTextArea getJTextArea(){
return textArea;
}
public void addJScrollPane(JFrame frame){
frame.add(scrollPane);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
}
public JScrollPane getJScrollPane(){
return scrollPane;
}
我想从我的主要方法中调用这个 class 并构建一个 JFrame。以下是我的尝试。
public class Main {
public static void main(String[] args){
App app = new App();
app.addJTextArea(app.getJScrollPane());
app.addJScrollPane(app.getJFrame());
app.openJFrame("title", 500, 500);
}
出现的是 JFrame 和 ScrollPane。但是我的文本区域似乎没有添加到滚动窗格中。
我是不是误解或忽略了什么?可能值得注意的是,如果在 addJTextArea 方法中我直接将它添加到 JFrame 上而不使用它出现的 JScrollPane 方法(显然没有滚动窗格)
尽管 JScrollPane
可能 look/act/sound 类似于 JPanel
,但事实并非如此。因此,使用 JScrollPane.add()
将组件添加到滚动窗格可能听起来很自然,但却是错误的。 JScrollPane
内部只能有一个滚动的组件,因此 add()
是错误的,但是 setViewportView()
是要使用的方法。
您必须调整您的方法 addJTextArea
以使用 scrollPane.setViewportView()
而不是 scrollPane.add()
:
public void addJTextArea(JScrollPane scrollPane){
scrollPane.setViewportView(textArea);
textArea.setLineWrap(true);
textArea.setEditable(true);
textArea.setVisible(true);
}
将 scrollPane.add(textArea);
替换为 scrollPane.setViewportView(textArea);
。
有关详细信息,请阅读 How to Use Scroll Panes