【问题标题】:I am unable to output values into j text area我无法将值输出到 j 文本区域
【发布时间】:2015-03-24 16:00:18
【问题描述】:

我尝试创建一个 java GUI,它在文本区域中显示用户输入的数字的乘法表

问题是,结果没有完全显示在文本区域中。 例如,如果我输入数字 3,则文本区域中仅显示“30”。但是结果完全显示在输出监视器中,即通过使用 System.out.print 方法。如果我使用任何其他组件,则无法在文本区域中显示结果。救命!

这是我完成的编码

int input_val = Integer.parseInt(InputNum.getText().trim());

int c=input_val*10;
int i;
for(i=input_val;i<=c;i=i+input_val)
{
TableOutputArea.setText(i+"\n");
System.out.print(i+"\n");
}

监视器输出:

3
6
9
12
15
18
21
24
27
30

【问题讨论】:

  • 尝试使用jtextArea.append(); instead of jtextArea.setText()`

标签: java swing user-interface integer jtextarea


【解决方案1】:

您必须使用TableOutputArea.append(i+"\n"); 而不是setText() 方法。

【讨论】:

    【解决方案2】:

    正如我的 cmets 中所述,使用 JTextArea.append() 而不是使用 JTextArea.setText()JTextArea.append() 允许您在JTextArea 的现有内容中添加更多文本,这与JTextArea.setText() 不同,后者只是将新文本替换为以前的文本。这是一个小例子:

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class JTextAreaExample {
    
        private static final int GAP = 5;
        private JTextField tField;
        private JTextArea tArea;
    
        private void displayGUI() {
            JFrame frame = new JFrame("JTextArea Example");
            frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    
            JPanel contentPane = new JPanel();
            contentPane.setLayout(new BorderLayout(GAP, GAP));
    
            JPanel upperPanel = new JPanel();
            upperPanel.setLayout(new FlowLayout(FlowLayout.CENTER, GAP, GAP));
            JLabel label = new JLabel("Enter number: ", JLabel.CENTER);
            tField = new JTextField(10);
            tField.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent ae) {
                    int number = Integer.parseInt(tField.getText());
                    tArea.setText("");
                    for (int i = 1; i <= 10; ++i) {
                        tArea.append("" + number + " X " + i + " = " + (i * number) + "\n");
                    }
                }
            });
            upperPanel.add(label);
            upperPanel.add(tField);
    
            tArea = new JTextArea(10, 10);
    
            contentPane.add(upperPanel, BorderLayout.PAGE_START);
            contentPane.add(tArea, BorderLayout.CENTER);
    
            frame.setContentPane(contentPane);
            frame.pack();
            frame.setVisible(true);
        }
    
        public static void main(String[] args) {
            EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    new JTextAreaExample().displayGUI();
                }
            });
        }
    }
    

    输出:

    编辑:

    但另一方面,如果您希望数字正确对齐,彼此下方,您可以使用此行 tArea.append(String.format("%-3d X %-3d = %-3d\n", number, i, (number * i))); 修改单行 (JTextArea.append(...))

    【讨论】:

    • ooohooou 很高兴再次在这里见到你 :-)
    • @mKorbel: 哈哈,同样的朋友 :-) 很高兴再次见到你,很久以后 :-)
    【解决方案3】:

    您的问题是以下语句:

    TableOutputArea.setText(i+"\n");

    此语句清除 TextArea 中的文本并将新文本设置到其中。因此,您的 TextArea 中只插入了 30 个。为了解决这个问题,你应该使用

    TableOutputArea.append()

    它将文本附加到 TextArea 中字符串的末尾

    【讨论】:

    • 你的第一个建议是个坏主意,因为你应该避免在循环内连接String,因为它效率很低,你的第二个选择更好
    • 是的,我知道。这就是为什么我在最后一句中写道,2. 可能性是更好的。但为了完整起见,我想展示这两种可能性。
    • 正确的可能性总比错误的好;)
    猜你喜欢
    • 2014-04-26
    • 1970-01-01
    • 2012-05-21
    • 2017-09-06
    • 2015-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多