繁体   English   中英

找不到AttributedString(java.util.List <java.lang.String> )

[英]no suitable constructor found for AttributedString(java.util.List<java.lang.String>)

到目前为止,在这个论坛上的你们都提供了很大的帮助,我学到了很多东西,但是我确实有一个(希望如此)最终的问题,我的代码没有编译,我得到了一个错误:

 no suitable constructor found for AttributedString(java.util.List<java.lang.String>) 
constructor java.text.ArributedString(java.text.AttributedCharacterator,int,int,java.text.AttributedCharacterator.Attribute[]) is not applicable (actual and formal argument lists differ in length

当我收到上述错误时,将突出显示以下代码行:

AttributedString mStyledText = new AttributedString(list);

在另一个线程的帮助下,有人建议这是因为我正在传递整个字符串列表,而不是单个字符串。

是什么导致此错误? 更重要的是我该如何克服

代码在下面

import java.awt.*;
import java.awt.font.*;
import java.awt.geom.*;
import java.awt.print.*;
import java.text.*;
import java.io.*;
import javax.swing.*;
import java.util.List;
import java.util.ArrayList;

public class PrintText implements Printable {

    private String text; // Constructor argument for AttributedString.

    // Below the code will allow the user to select a file and then print out the contents of the file
    public static void main(String[] args) throws IOException {
        new PrintText();
    }

    public PrintText() {
        EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    try {
                        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    }

                    //selects the file
                    JFileChooser chooser = new JFileChooser();
                    chooser.showOpenDialog(null);
                    File file = chooser.getSelectedFile();
                    String filename = file.getName();
                    //System.out.println("You have selected: " + filename);  testing to see if file seleected was right
                    String path = file.getAbsolutePath();

                    //Reads contents of file into terminal 
                    //FileReader fr = new FileReader("filename");
                    // FileReader fr = new FileReader("D:/Documents/" + "filename")); 

                    BufferedReader br = null;
                    try {
                        br = new BufferedReader(new FileReader(path));
                        StringBuilder stringBuilder = new StringBuilder();
                        String line;
                        while ((line = br.readLine()) != null) {
                            System.out.println(line);
                            stringBuilder.append(line).append("\n");
                        }
                        text = stringBuilder.toString();;

                        printer();
                    } catch (IOException exp) {
                        exp.printStackTrace();
                    } finally {
                        try {
                            br.close();
                        } catch (Exception e) {
                        }
                    }
                    //fr.close(); 
                }
            });
    }
    //private static final String mText = 
    //    "This is a test to see if this text will be printed "; //This works perfectly fine
    //AttributedString mStyledText = new AttributedString(mText);
    /**
     * Print a single page containing some sample text.
     */
    public void printer() {

        /* Get the representation of the current printer and 
         * the current print job.
         */
        PrinterJob printerJob = PrinterJob.getPrinterJob();
        /* Build a book containing pairs of page painters (Printables)
         * and PageFormats. This example has a single page containing
         * text.
         */
        Book book = new Book();
        book.append(this, new PageFormat());
        /* Set the object to be printed (the Book) into the PrinterJob.
         * Doing this before bringing up the print dialog allows the
         * print dialog to correctly display the page range to be printed
         * and to dissallow any print settings not appropriate for the
         * pages to be printed.
         */
        printerJob.setPageable(book);
        /* Show the print dialog to the user. This is an optional step
         * and need not be done if the application wants to perform
         * 'quiet' printing. If the user cancels the print dialog then false
         * is returned. If true is returned we go ahead and print.
         */
        boolean doPrint = printerJob.printDialog();
        if (doPrint) {
            try {
                printerJob.print();
            } catch (PrinterException exception) {
                System.err.println("Printing error: " + exception);
            }
        }
    }

    /**
     * Print a page of text.
     */
    public int print(Graphics g, PageFormat format, int pageIndex) {

        AttributedString mStyledText = new AttributedString(); 
        Graphics2D g2d = (Graphics2D) g;
        g2d.translate(format.getImageableX(), format.getImageableY());
        g2d.setPaint(Color.black);// Sets text colour
        Point2D.Float pen = new Point2D.Float();
        AttributedCharacterIterator charIterator = mStyledText.getIterator();
        LineBreakMeasurer measurer = new LineBreakMeasurer(charIterator, g2d.getFontRenderContext());
        float wrappingWidth = (float) format.getImageableWidth();
        while (measurer.getPosition() < charIterator.getEndIndex()) {
            TextLayout layout = measurer.nextLayout(wrappingWidth);
            pen.y += layout.getAscent();
            float dx = layout.isLeftToRight() ? 0 : (wrappingWidth - layout.getAdvance());
            layout.draw(g2d, pen.x + dx, pen.y);
            pen.y += layout.getDescent() + layout.getLeading();
        }
        return Printable.PAGE_EXISTS;
    }
}

将上面的代码更新为我现在正在运行的代码

这些是该类的有效构造函数

AttributedString(AttributedCharacterIterator text)
AttributedString(AttributedCharacterIterator text, int beginIndex, int endIndex)
AttributedString(AttributedCharacterIterator text, int beginIndex, int endIndex, AttributedCharacterIterator.Attribute[] attributes)
AttributedString(String text)
AttributedString(String text, Map<? extends AttributedCharacterIterator.Attribute,?> attributes)

它们都不采用字符串列表,因此您需要重新考虑传递给它的内容。 可能:

list.get(0);

如果查看AttributedString的API,则没有构造函数将List作为参数。 因此,当您尝试将列表传递给它时,会遇到编译时错误。

AttributedString mStyledText = new AttributedString(list); 

以下是AttributedString class唯一允许的构造函数

AttributedString(AttributedCharacterIterator text)
AttributedString(AttributedCharacterIterator text, int beginIndex, int endIndex)
AttributedString(AttributedCharacterIterator text, int beginIndex, int endIndex, AttributedCharacterIterator.Attribute[] attributes)
AttributedString(String text)
AttributedString(String text, Map<? extends AttributedCharacterIterator.Attribute,?> attributes)

没有接受List<String>构造方法。

考虑到AttributedString处理单个字符串值,将列表传递给它没有任何意义。

也许您想要一个列表,即List<AttributedString> 在这种情况下,请遍历List<String>并调用String构造函数,然后将其添加到List<AttributedString>

使用StringBuilder构建一个单个String。

更换

private List<String> list;

...

                    // Wrong: List<String> list = new ArrayList<String>();
                    list = new ArrayList<String>(); //
                    String line;
                    while ((line = br.readLine()) != null) {
                        System.out.println(line);
                        list.add(line);
                    }

通过

private String text; // Constructor argument for AttributedString.

...

                    StringBuilder stringBuilder = new StringBuilder();
                    String line;
                    while ((line = br.readLine()) != null) {
                        System.out.println(line);
                        stringBuilder.append(line).append("\n");
                    }
                    text = stringBuilder.toString();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM