第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何計(jì)算文本在JTextArea中的行數(shù)(以及每行中的列數(shù))?

如何計(jì)算文本在JTextArea中的行數(shù)(以及每行中的列數(shù))?

幕布斯6054654 2019-08-28 15:29:05
如何計(jì)算文本在JTextArea中的行數(shù)(以及每行中的列數(shù))?在對(duì)問(wèn)題中提出的問(wèn)題感興趣后, 我試圖接近它幾次并且失敗了,我不喜歡那個(gè):)我認(rèn)為如果問(wèn)題被分成子問(wèn)題,它可能有助于解決它。為簡(jiǎn)單起見(jiàn),假設(shè)JTextArea不會(huì)改變其大小,因此我們不需要擔(dān)心重新評(píng)估等。我認(rèn)為重要的問(wèn)題是:1.如何計(jì)算某個(gè)文本在JTextArea中占用的行數(shù)?2. JTextArea中的列數(shù)與它可以放在一行中的字符數(shù)之間的關(guān)系是什么?所以我們可以計(jì)算行長(zhǎng)度。請(qǐng)?jiān)谙旅嬲业桨幚淼奈谋緟^(qū)域的示例代碼:import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JTextArea;import javax.swing.SwingUtilities;public class TextAreaLines{     public static void main(String[] args)     {         SwingUtilities.invokeLater(new Runnable()         {             @Override             public void run()             {                 JPanel p = new JPanel();                 JFrame f = new JFrame();                 JTextArea ta = new JTextArea("dadsad sasdasdasdasdasd");                 ta.setWrapStyleWord(true);                 ta.setLineWrap(true);                 ta.setRows(5);                 ta.setColumns(5);                 p.add(ta);                 f.setContentPane(p);                 f.setSize(400, 300);                 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);                 f.setVisible(true);                              //BTW the code below prints 1                 System.out.println("ta.getLineCount()="+ta.getLineCount());             }         });     }}
查看完整描述

3 回答

?
呼啦一陣風(fēng)

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超6個(gè)贊

你可以做的一件事是使用FontMetrics。我寫(xiě)了一些代碼,用于JTextArea在某些行號(hào)上拆分。設(shè)置代碼如下所示:

Graphics2D g = (Graphics2D) g2;FontMetrics m = g.getFontMetrics();int lineHeight = m.getHeight();

這將告訴您文本行的高度。

不幸的是,大多數(shù)字體中的字母寬度不同。但是,您可以使用以下代碼來(lái)確定String的寬度。

int width = m.getStringBounds("Some String", g).getWidth();

我知道這并沒(méi)有完全回答你的問(wèn)題,但我希望它有所幫助。

如果你沒(méi)有使用自動(dòng)換行,這里是你可以使用的通用算法:(在paint組件方法中)

String text[] = getText().split("\n");String newText = "";for (String line: text) {
    newText = line + "| " + line.length() + "\n";}setText(newText);

這是一般的想法。不確定它會(huì)有多好。如果你試試,請(qǐng)告訴我。


查看完整回答
反對(duì) 回復(fù) 2019-08-28
?
Helenr

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超4個(gè)贊

不確定這是否有幫助,但您需要設(shè)置文本區(qū)域的寬度,以便視圖知道何時(shí)包裝文本。設(shè)置尺寸后,您可以確定首選高度。當(dāng)您知道首選高度時(shí),可以使用字體metrice行高來(lái)確定包括包裹行(如果有)的總行數(shù)。

import java.awt.*;import javax.swing.*;public class TextAreaPreferredHeight extends JFrame{

    public TextAreaPreferredHeight()
    {
        JTextArea textArea = new JTextArea();
        textArea.setText("one two three four five six seven eight nine ten");
        textArea.setLineWrap( true );
        textArea.setWrapStyleWord( true );

        FontMetrics fm = textArea.getFontMetrics( textArea.getFont() );
        int height = fm.getHeight();

        System.out.println("000: " + textArea.getPreferredSize());
        textArea.setSize(100, 1);
        System.out.println("100: " + textArea.getPreferredSize());
        System.out.println("lines : " + textArea.getPreferredSize().height / height);

        textArea.setSize(200, 1);
        System.out.println("200: " + textArea.getPreferredSize());
        System.out.println("lines : " + textArea.getPreferredSize().height / height);

        textArea.setSize(300, 1);
        System.out.println("300: " + textArea.getPreferredSize());
        System.out.println("lines : " + textArea.getPreferredSize().height / height);
        add(textArea);
        pack();
        setVisible(true);}

    public static void main(String[] args)
    {
        new TextAreaPreferredHeight();
    }}


查看完整回答
反對(duì) 回復(fù) 2019-08-28
  • 3 回答
  • 0 關(guān)注
  • 1150 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)