2

我想在 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);
    }
}

我想让它正常工作。如果有人可以帮助我,请在下面发表评论!

4

4 回答 4

3

我已经纠正了所有问题,以下是工作代码。请阅读有关更改的评论。

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);
    }
}

编辑。请阅读 oracle 的 Java 教程。并开始使用适当的布局管理器......希望它有所帮助

于 2013-08-17T20:15:23.320 回答
2

您必须将您的对象传递JTextArea给您的JScrollPane构造函数,然后将您的JScrollPane对象添加到您的对象中Container,而不仅仅是JTextArea. 所以它看起来像这样:

JScrollPane scr = new JScrollPane(ta1);
panel.add(scr);
于 2013-08-17T19:46:34.837 回答
2

If someone can help me, leave a comment below please!

  • 为什么请你用你的头墙砸,JScrollPane被指定为动态,可调整大小LayoutManagerAbsoluteLayout可以打破它的基本属性

  • 从顶部开始

    1. public class app extends JFrame {

      • public class App {---> Java 命名约定
      • 而不是扩展任何东西,创建JFrame为局部变量
    2. new app();---> se Oracle 教程 Initial Thread

    3. 创建另一个JPanel,放在JTextField那里JButton

    4. 你有没有覆盖一些东西tf1.setBounds(5,5,this.getWidth()-120,20);

    5. NullLayout不使用就不能正常工作Insets

    6. 将 built_in 更改FlowLayoutJPanel painel = new JPanel(null);to BorderLayout,将JScrollPanewith JTextAreatoCENTER area

    7. 你可以把JScrollPanewith JTextAreatoJFrames CENTER area直接和另一个JPanelwith JTextFieldand JButtonto SOUTHor NORTH,JFrame已经BorderLayout在 API 中实现

    8. JScrollPaneJScrollbars仅在其Dimension小于JComponent放置在那里的情况下显示

    9. 使用JFrame.pack()而不是setSize,这一行应该在之前setVisible

于 2013-08-17T20:11:17.823 回答
2

这是许多@mKorbels的基本示例。请注意 , 的默认布局如何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);
            }
        });
    }
}
于 2013-08-17T20:15:45.790 回答