Java滚动条

时间:2014-11-13 08:39:10

标签: java swing

我想在我的文本区域添加滚动条,这样如果用户输入的数字大于20,则文本应该有一个滚动条。 基本上我正在尝试创建一个应用程序,其中用户输入一个他想要乘法表的数字,并且他输入他希望表格显示的数字。但是我的应用程序显示表格最多20个,例如12 X 20 = 240。其余的都是隐藏的。

public class LayoutM extends JFrame implements ActionListener {

    private JTextField num1;
    private JTextField num2;
    private JTextArea answer;
    private JButton go;
    private int num11;
    private int num22;



    public LayoutM(){

        super("Multiplication");
        setLayout(new FlowLayout());

        Dimension numDim = new Dimension(60,20);
        Dimension ansDim = new Dimension(200,300);
        Dimension goDim = new Dimension(60,20);

        num1 = new JTextField("Number");
        num1.setPreferredSize(numDim);

        num2 = new JTextField("Upto");
        num2.setPreferredSize(numDim);

        go = new JButton("GO"); 
        num2.setPreferredSize(goDim);

        answer = new JTextArea(20,20);
        answer.setPreferredSize(ansDim);
        answer.setEditable(false);



        add(num1, BorderLayout.CENTER);
        add(num2,BorderLayout.CENTER);
        add(go,BorderLayout.CENTER);
        add(answer,BorderLayout.SOUTH);


        go.addActionListener(this);

    }

    public static void main(String[] args){
        LayoutM ob = new LayoutM();
        ob.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ob.setVisible(true);
        ob.setSize(300,400);
        ob.setResizable(false);
        ob.setLocationRelativeTo(null);
    }


    public void actionPerformed(ActionEvent event){
        try{

         answer.setText(" ");   
         num11 = Integer.parseInt(num1.getText());
         num22 = Integer.parseInt(num2.getText());

        for(int count = 1; count < num22+1;count++){
            answer.append(num11+ " X "+ count+" = " + num11*count+" \n");

        }
     }catch(Exception e){
         JOptionPane.showMessageDialog(null, "No decimals allowed");
     }  
    }

}

1 个答案:

答案 0 :(得分:1)

您应该将answer对象放入新的JScrollPane对象,并将add滚动窗格放到LayoutM

因此,在您的字段中,您应该添加:

    private JScrollPane scroll;

而不是使用

    add(answer,BorderLayout.SOUTH);

你应该使用

    add(scroll,BorderLayout.SOUTH);

actionPerformed()方法中,您应该根据您从用户那里获得的数量来更改行数。把它放在for循环之前:

     if ( num22 > 20 ) {
         answer.setRows(num22);
     } else {
         answer.setRows(20);
     }