【问题标题】:Text area exceeds the window area文本区域超出窗口区域
【发布时间】:2020-09-22 14:06:38
【问题描述】:

我在java中编写了程序该程序是从KM转换为英里和英里到KM程序工作正常但问题是文本区域超出了区域所以没有出现在附加代码下方的全文.所以我想如果它在行尾到达它会转到新行

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Converter extends JFrame implements ActionListener {
    JLabel label = new JLabel("Distance : ");
    JTextField input = new JTextField(10);
    JButton button = new JButton("Convert");
    JTextArea output = new JTextArea(10,15);
    CheckboxGroup cbg = new CheckboxGroup();
    Checkbox cb1 = new Checkbox("Convert MILES to KM", cbg, true);
    Checkbox cb2 = new Checkbox("Convert KM to MILES", cbg, false);

    public static void main(String args[]) {
        Converter s = new Converter();
        s.setVisible(true);
    }

    public Converter() {
        setLayout(null);
        setSize(300,400);  
        //left-down-width-hegiht
        cb1.setBounds(60,30,150,30);
        cb2.setBounds(60,60,150,30);
        label.setBounds(30,90,120,30);
        input.setBounds(90,95,170,20);
        button.setBounds(100,130,90,30);
        output.setBounds(45,168,200,165);   
        add(cb1);
        add(cb2);
        add(label);
        add(input);
        add(button);
        add(output);
        button.addActionListener(this);
    }

    public void actionPerformed(ActionEvent e) {
        if (cb1.getState() ) {
            if (e.getSource() == button) {
                double d = Double.parseDouble(input.getText());
                double d2 =  d / 0.62;
                String str2 = String.valueOf(d2); 
                output.setText(d + "miles equals to " + str2 + " kilometers");      
            }       
        }

        if (cb2.getState()) {
            if (e.getSource() == button){
                double d = Double.parseDouble(input.getText());
                double d2 =  d * 0.62;
                String str2 = String.valueOf(d2);
                output.setText(d + " kilometers equals to " + str2 + " miles ");
            }           
        }   
    }        
}

【问题讨论】:

  • Java GUI 必须在不同的操作系统、屏幕尺寸、屏幕分辨率等上使用不同的语言环境中的不同 PLAF。因此,它们不利于像素完美布局。而是使用布局管理器,或 combinations of them 以及 white space 的布局填充和边框。

标签: java swing awt jtextarea


【解决方案1】:

如果您的目标纯粹是在文本区域中进行换行,那么您可以使用 JTextArea 的 内置函数,名为 setLineWrap

将一个真正的布尔值作为参数传递给setLineWrap,例如setLineWrap(true),将为JTextArea 组件打开换行。将 false 布尔值作为参数传递将关闭换行

在您的代码中,它将按如下方式使用。

output.setLineWrap(true);

Converter 构造函数将如下所示。

    public Converter() {
    
    // Turn on line wrapping.
    output.setLineWrap(true);
    
    setLayout(null);
    setSize(300, 400);
    // left-down-width-hegiht
    cb1.setBounds(60, 30, 150, 30);
    cb2.setBounds(60, 60, 150, 30);
    label.setBounds(30, 90, 120, 30);
    input.setBounds(90, 95, 170, 20);
    button.setBounds(100, 130, 90, 30);
    output.setBounds(45, 168, 200, 165);
    add(cb1);
    add(cb2);
    add(label);
    add(input);
    add(button);
    add(output);
    button.addActionListener(this);
}

【讨论】:

  • 虽然这个答案是完全正确的,但我想补充一点,如果您需要在特定点而不是在每行末尾转到新行,您可以简单地将 \r\n 附加到你的TextArea 插入一个换行符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-05
  • 2013-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-23
  • 2018-07-05
相关资源
最近更新 更多