使用 Java Swing 添加滚动条到 JTextArea
Adding scroll bars with Java Swing into a JTextArea
我看过几篇关于这个主题的帖子,但我不能用那里提供的信息解决问题。我正在尝试使用以下代码将滚动条(垂直和水平)添加到 JTextArea
中,如下所示:
public FPrincipale() {
JFrame wframe = new JFrame();
JPanel wpanel = new JPanel(new BorderLayout());
JPanel tpanel = new JPanel();
JPanel bpanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
textzone = new JTextArea(" ",20, 50);
textzone.setLineWrap(true);
textzone.setWrapStyleWord(true);
//Here I try to add the scroll bar
JScrollPane wscroll = new JScrollPane(textzone, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
wscroll.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
wscroll.setBorder(BorderFactory.createLineBorder(Color.black));
wframe.add(wscroll);
wframe.setVisible(true);
JButton b1 = new JButton("B1");
JButton b2 = new JButton("B2");
JButton b3 = new JButton("Close");
bpanel.add(b1);
bpanel.add(b2);
bpanel.add(b3);
bpanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
tpanel.add(textzone);
tpanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
tpanel.add(wscroll, BorderLayout.CENTER);
wpanel.add(bpanel, BorderLayout.SOUTH);
wpanel.add(tpanel, BorderLayout.CENTER);
wframe.setLocation(150, 100);
wframe.setPreferredSize(new Dimension(640, 480));
b1.addActionListener(new b1Listener());
b2.addActionListener(new b2Listener());
b3.addActionListener(new b3Listener());
this.getContentPane().setPreferredSize(new Dimension(500,500));
wframe.add(wpanel);
wframe.setVisible(true);
wframe.setSize(640, 640);
wframe.setDefaultCloseOperation(EXIT_ON_CLOSE);
wframe.setTitle("Main Window");
pack();
}
然而,创建 window 时,即使我减小 window 的大小,滚动条也不起作用:
正常Window:
缩小尺寸:
我该如何解决这个问题?
首先摆脱 class 到 setPreferredSize
,这会让您陷入困境。稍后在您的代码中调用 tpanel.add(textzone);
,它从 JScrollPane
中删除 JTextArea
并将其添加到 tpanel
(然后将 JScrollPane
添加到很好,这就是为什么你旁边有那个小方块。
首先将 BorderLayout
应用于 tpanel
JPanel tpanel = new JPanel(new BorderLayout());
删除将滚动窗格添加到框架的行...
//wFrame.add(wscroll);
然后仅将 JScrollPane
添加到 tpanel
//tpanel.add(textzone);
tpanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
tpanel.add(wscroll, BorderLayout.CENTER);
我看过几篇关于这个主题的帖子,但我不能用那里提供的信息解决问题。我正在尝试使用以下代码将滚动条(垂直和水平)添加到 JTextArea
中,如下所示:
public FPrincipale() {
JFrame wframe = new JFrame();
JPanel wpanel = new JPanel(new BorderLayout());
JPanel tpanel = new JPanel();
JPanel bpanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
textzone = new JTextArea(" ",20, 50);
textzone.setLineWrap(true);
textzone.setWrapStyleWord(true);
//Here I try to add the scroll bar
JScrollPane wscroll = new JScrollPane(textzone, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
wscroll.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
wscroll.setBorder(BorderFactory.createLineBorder(Color.black));
wframe.add(wscroll);
wframe.setVisible(true);
JButton b1 = new JButton("B1");
JButton b2 = new JButton("B2");
JButton b3 = new JButton("Close");
bpanel.add(b1);
bpanel.add(b2);
bpanel.add(b3);
bpanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
tpanel.add(textzone);
tpanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
tpanel.add(wscroll, BorderLayout.CENTER);
wpanel.add(bpanel, BorderLayout.SOUTH);
wpanel.add(tpanel, BorderLayout.CENTER);
wframe.setLocation(150, 100);
wframe.setPreferredSize(new Dimension(640, 480));
b1.addActionListener(new b1Listener());
b2.addActionListener(new b2Listener());
b3.addActionListener(new b3Listener());
this.getContentPane().setPreferredSize(new Dimension(500,500));
wframe.add(wpanel);
wframe.setVisible(true);
wframe.setSize(640, 640);
wframe.setDefaultCloseOperation(EXIT_ON_CLOSE);
wframe.setTitle("Main Window");
pack();
}
然而,创建 window 时,即使我减小 window 的大小,滚动条也不起作用:
正常Window:
缩小尺寸:
我该如何解决这个问题?
首先摆脱 class 到 setPreferredSize
,这会让您陷入困境。稍后在您的代码中调用 tpanel.add(textzone);
,它从 JScrollPane
中删除 JTextArea
并将其添加到 tpanel
(然后将 JScrollPane
添加到很好,这就是为什么你旁边有那个小方块。
首先将 BorderLayout
应用于 tpanel
JPanel tpanel = new JPanel(new BorderLayout());
删除将滚动窗格添加到框架的行...
//wFrame.add(wscroll);
然后仅将 JScrollPane
添加到 tpanel
//tpanel.add(textzone);
tpanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
tpanel.add(wscroll, BorderLayout.CENTER);