我想在textarea中创建一个滚动条但是如果我将JPanel Layout设置为null,滚动条将不会显示!
我试过
JScrollPane scrollbar1 =
new JScrollPane(
ta1,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
但由于空布局而无效。
这是我目前的代码:
import javax.swing.*;
import java.awt.*;
public class app extends JFrame {
public static void main(String[] args)
{
new app();
}
public app()
{
this.setSize(400,400);
this.setLocation(0,0);
this.setResizable(false);
this.setTitle("Application");
JPanel painel = new JPanel(null);
// Creating the Input
JTextField tf1 = new JTextField("Some random text", 15);
tf1.setBounds(5,5,this.getWidth()-120,20);
tf1.setColumns(10);
tf1.setText("Omg");
painel.add(tf1);
// Creating the button
JButton button1 = new JButton("Send");
button1.setBounds(290, 5, 100, 19);
painel.add(button1);
// Creating the TextArea
JTextArea ta1 = new JTextArea(15, 20);
JScrollPane scr = new JScrollPane();
ta1.setBounds(5, 35, 385, 330);
ta1.setLineWrap(true);
ta1.setWrapStyleWord(true);
painel.add(ta1);
this.add(painel);
this.setVisible(true);
}
}
我想让它正常工作。如果有人可以帮助我,请在下面发表评论!
答案 0 :(得分:2)
If someone can help me, leave a comment below please!
为什么请你用你的头墙粉碎,JScrollPane
被指定为动态,可调整大小LayoutManager
,AbsoluteLayout
可以打破它的基本属性
从顶部开始
public class app extends JFrame {
public class App {
---> Java命名约定JFrame
作为本地变量 new app();
---> se Oracle教程初始线程
创建另一个JPanel
,放置JTextField
和JButton
您是否覆盖了tf1.setBounds(5,5,this.getWidth()-120,20);
NullLayout
Insets
无效
将FlowLayout
的built_in JPanel painel = new JPanel(null);
更改为BorderLayout
,JScrollPane
将JTextArea
更改为CENTER area
您可以将JScrollPane
与JTextArea
直接放在JFrames CENTER area
,将另一个JPanel
与JTextField
和JButton
放到{{} 1}}或SOUTH
,NORTH
已在API中实施JFrame
BorderLayout
仅在JScrollPane
小于JScrollbars
的情况下显示Dimension
使用JComponent
代替JFrame.pack()
,此行应在setSize
之前
答案 1 :(得分:2)
我已经纠正了以下所有问题,即工作代码。请阅读有关更改的评论。
import javax.swing.*;
import java.awt.*;
public class app extends JFrame {
public static void main(String[] args) {
new app();
}
public app() {
this.setSize(400, 400);
this.setLocation(0, 0);
this.setResizable(false);
this.setTitle("Application");
JPanel painel = new JPanel(null);
// Creating the Input
JTextField tf1 = new JTextField("Some random text", 15);
tf1.setBounds(5, 5, this.getWidth() - 120, 20);
tf1.setColumns(10);
tf1.setText("Omg");
// resultsTA,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
painel.add(tf1);
// Creating the button
JButton button1 = new JButton("Send");
button1.setBounds(290, 5, 100, 19);
painel.add(button1);
// Creating the TextArea
JTextArea ta1 = new JTextArea(15, 20);
JScrollPane scr = new JScrollPane(ta1,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);// Add your text area to scroll pane
ta1.setBounds(5, 35, 385, 330);
ta1.setLineWrap(true);
ta1.setWrapStyleWord(true);
scr.setBounds(20, 30, 100, 40);// You have to set bounds for all the controls and containers incas eof null layout
painel.add(scr);// Add you scroll pane to container
this.add(painel);
this.setVisible(true);
}
}
EDIT。请阅读Java上的oracle教程。并开始使用适当的布局管理器... 希望它有所帮助
答案 2 :(得分:2)
以下是许多@mKorbels points的基本示例。请注意JPanel()
,FlowLayout()
的默认布局如何使用其组件的首选大小。对f.setSize()
的调用是可选的,以强制显示滚动条。
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.*;
public class App {
public static void main(String[] args) {
new App();
}
public App() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame f = new JFrame("Application");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
JTextField tf1 = new JTextField("Some random text", 15);
tf1.setColumns(10);
tf1.setText("Omg");
panel.add(tf1);
JButton button1 = new JButton("Send");
panel.add(button1);
JTextArea ta = new JTextArea(15, 20);
JScrollPane scr = new JScrollPane(ta);
scr.setVerticalScrollBarPolicy(
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
ta.setLineWrap(true);
ta.setWrapStyleWord(true);
f.add(panel, BorderLayout.NORTH);
f.add(scr, BorderLayout.CENTER);
f.pack();
Dimension d = scr.getPreferredSize();
f.setSize(d.width, d.height);
f.setLocationByPlatform(true);
f.setVisible(true);
}
});
}
}
答案 3 :(得分:1)
您必须将JTextArea
传递给JScrollPane
构造函数,然后将JScrollPane
对象添加到Container
,而不只是JTextArea
。所以它看起来像这样:
JScrollPane scr = new JScrollPane(ta1);
panel.add(scr);