จะนับบรรทัดของย่อหน้าใน textArea ใน java ได้อย่างไร [ทำซ้ำ]

ฉันกำลังทำงานในโปรเจ็กต์ JavaFX และได้กำหนด textArea ภายใน scrollPane ซึ่งควรป้อนข้อความจากไฟล์ข้อความที่ผู้ใช้เลือก

ฉันได้เพิ่มตัวนับที่นับบรรทัดที่แทรกลงใน textArea: textArea.getText().lines().count() เพื่อให้ฉันสามารถตั้งค่าความสูงของ textArea (โดยการตั้งค่าที่ได้รับจากตัวนับในพารามิเตอร์ PrefRowCount ใน textArea)

ปัญหาคือตัวเศษด้วยวิธีนี้จะนับ ย่อหน้า ใน textArea (ตามวิธีที่เขียนในไฟล์ข้อความ) และสิ่งที่ฉันต้องการคือให้ได้จำนวน บรรทัดภายในแต่ละย่อหน้า ดังแสดงใน textArea ของฉัน (ตามการตั้งค่าฟอนต์ ขนาดฟอนต์ ฯลฯ)

และที่นี่ฉันถาม: ฉันจะระบุบรรทัดภายในแต่ละย่อหน้าใน textArea ด้วยวิธีใดเพื่อที่ฉันจะได้ปรับความสูงที่ถูกต้องที่ textArea ควรมี

ตัวควบคุม JavaFX ของฉันมีลักษณะดังนี้:

public class Controller {

    ObservableList<String> days = FXCollections.observableArrayList
            ("1", "2", "3", "4", "5", "6", "7", "8", "9", "10",
            "11", "12", "13", "14", "15", "16", "17", "18", "19", "20",
            "21", "22", "23", "24", "25", "26", "27", "28", "29", "30"),
            months = FXCollections.observableArrayList
            ("Tishrei", "Cheshvan", "Kislev", "Tevet", "Shevat", "Adar",
            "Nisan", "Iyar", "Sivan", "Tammuz", "Av", "Elul");

    public ComboBox day, month;
    public TextField year;
    public Button ok;
    public ScrollPane scrollPane;
    public TextArea textArea;

    @FXML
    private void initialize(){
        day.setItems(days);
        month.setItems(months);
    }

    public void okClick() throws IOException {

        String dayValue = (String) day.getValue();
        String monthValue = (String) month.getValue();

        String dayFile = ("/textFiles/days/"+dayValue+".txt");
        String monthFile = ("/textFiles/months/"+monthValue+".txt");

        InputStream inDayFile = getClass().getResourceAsStream(dayFile);
        InputStream inMonthFile = getClass().getResourceAsStream(monthFile);

        BufferedReader readerDayFile = new BufferedReader(new InputStreamReader(inDayFile, "UTF-8"));
        BufferedReader readerMonthFile = new BufferedReader(new InputStreamReader(inMonthFile, "UTF-8"));

        String dayTitle = ("Day " + dayValue + ":\n");
        String monthTitle = ("Month " + monthValue + ":\n");

        String scanDayFile  = new Scanner(readerDayFile).useDelimiter("\\Z").next();
        String scanMonthFile  = new Scanner(readerMonthFile).useDelimiter("\\Z").next();

        textArea.setText(dayTitle + scanDayFile + "\n\n" + monthTitle + scanMonthFile);

        long lineCount = textArea.getText().lines().count();
        textArea.setPrefRowCount(Integer.parseInt(String.valueOf(lineCount)));
        scrollPane.setVvalue(0);

    }

}

person chaim770    schedule 17.03.2020    source แหล่งที่มา
comment
ไม่รองรับ - โปรดจำไว้ว่ามีคำถามก่อนหน้านี้เกี่ยวกับ SO พร้อมวิธีแก้ปัญหา   -  person kleopatra    schedule 17.03.2020
comment
มันยากสำหรับฉันที่จะเข้าใจว่าแต่ละโพสต์มีประโยชน์สำหรับฉันอย่างไร . คุณช่วยระบุได้ไหมว่าฉันจะรวมสิ่งนี้เข้ากับโค้ดของฉันได้อย่างไร ฉันจะขอบคุณมาก   -  person chaim770    schedule 17.03.2020


คำตอบ (1)


บรรทัดในพื้นที่ข้อความแตกต่างจากแนวคิดบรรทัดที่คุณคิด ใน Java บรรทัดคือข้อความที่คั่นด้วยการขึ้นบรรทัดใหม่หรือ \n

เมื่อข้อความไม่สามารถพอดีกับความกว้างของพื้นที่ข้อความได้ อักขระที่เหลือของสตริงข้อความจะถูกย้ายไปยังบรรทัดถัดไปในพื้นที่ข้อความ แต่ไม่ได้หมายความว่าจะเป็นการขึ้นบรรทัดใหม่ บรรทัดจะเสร็จสิ้นเมื่อกดปุ่ม Enter หรือพบ \n ในสตริง

หากคุณต้องการปรับพื้นที่ข้อความและอ่านเนื้อหาจากไฟล์ข้อความ คุณอาจต้องนับจำนวนอักขระในไฟล์ข้อความ ค้นหาจำนวนอักขระที่พอดีกับความกว้างของพื้นที่ข้อความ แล้วหาร จำนวนอักขระเพื่อกำหนดความสูงที่จำเป็นสำหรับพื้นที่ข้อความของคุณ

แต่เนื่องจากพื้นที่ข้อความสามารถเลื่อนได้ ฉันจึงไม่เลิกเข้าใจเหตุผลเบื้องหลังปัญหาทั้งหมดที่คุณกำลังเผชิญอยู่

person iman rameshni    schedule 17.03.2020