Возможно ли для JTextPane иметь столбцы и строки? - PullRequest
2 голосов
/ 24 января 2012

У меня есть JTextPane из раздела дизайнера Netbeans.Я хочу добавить столбцы и строки на нем.Однако в окне свойств JTextPane нет возможности добавлять столбцы или строки.Есть ли другой способ сделать это?

Ответы [ 4 ]

5 голосов
/ 24 января 2012

JTextPane поддерживает форматированные документы.Один формат, который он поддерживает, это HTML.Следовательно, можно использовать HTML table для предоставления табличных данных - данных в столбцах и строках.


Также рассмотрите возможность использования JTable, что (конечно,) имеет встроенную поддержку столбцов и строк.

4 голосов
/ 24 января 2012

JTextPane не должен содержать «столбцы» и «строки»: однако вы можете изменить его содержимое с помощью дизайнера NetBeans, отредактировав его свойство text ( нажмите на ... рядом со свойством text , чтобы открыть диалоговое окно, в котором вы можете ввести многострочный текст для вашего JTextPane ).

3 голосов
/ 24 января 2012

Вы можете добавить свои пользовательские таблицы, как описано здесь http://java -sl.com / JEditorPaneTables.html

и

вставка строки / столбца, описанная здесь http://java -sl.com / JEditorPaneTablesRowColumnInsert.html

1 голос
/ 06 сентября 2018

вы можете переопределить методы класса JTextPane и
добавить столбцы и строки в JTextPane:

import java.awt.Dimension;
import java.awt.FontMetrics;
import java.awt.Insets;
import java.awt.Rectangle;

import javax.swing.JTextPane;
import javax.swing.SwingConstants;
import javax.swing.text.StyledDocument;

public class TextPane extends JTextPane {

    private static final long serialVersionUID = 712368129156703980L;

    private int rows, columns, rowHeight, columnWidth;

    public TextPane() {

        super();

        rows = 0;
        columns = 0;

    }

    public TextPane(StyledDocument doc) {

        super(doc);

        rows = 0;
        columns = 0;

    }

    public TextPane(int rows, int columns) {

        super();

        this.rows = rows;
        this.columns = columns;

    }

    public TextPane(StyledDocument doc, int rows, int columns) {

        super(doc);

        this.rows = rows;
        this.columns = columns;

    }

    public int getRows() {
        return rows;

    }

    public void setRows(int rows) {

        if (rows < 0)
            throw new IllegalArgumentException("rows less than zero.");

        if (rows != this.rows) {

            this.rows = rows;
            revalidate();

        }

    }

    public int getRowHeight() {

        if (rowHeight == 0) {

            FontMetrics metrics = getFontMetrics(getFont());
            rowHeight = metrics.getHeight();

        }

        return rowHeight;

    }

    public int getColumns() {
        return columns;

    }

    public void setColumns(int columns) {

        if (columns < 0)
            throw new IllegalArgumentException("columns less than zero.");

        if (columns != this.columns) {

            this.columns = columns;
            revalidate();

        }

    }

    public int getColumnWidth() {

        if (columnWidth == 0) {

            FontMetrics metrics = getFontMetrics(getFont());
            columnWidth = metrics.charWidth('m');

        }

        return columnWidth;
    }

    public Dimension getPreferredSize() {

        Dimension d = super.getPreferredSize();

        d = (d == null) ? new Dimension(400, 400) : d;
        Insets insets = getInsets();

        if (columns != 0)
            d.width = Math.max(d.width, columns * columnWidth + insets.left + insets.right);

        if (rows != 0)
            d.height = Math.max(d.height, rows * rowHeight + insets.top + insets.bottom);

        return d;

    }

    protected String paramString() {

        return super.paramString() + ",columns" + columns + ",columnWidth" + columnWidth + ",rows" + rows
                + ",,rowsHeight" + rowHeight;

    }

    public Dimension getPreferredScrollableViewportSize() {

        Dimension size = super.getPreferredScrollableViewportSize();
        size = (size == null) ? new Dimension(400, 400) : size;
        Insets insets = getInsets();

        size.width = (columns == 0) ? size.width : columns * getColumnWidth() + insets.left + insets.right;

        size.height = (rows == 0) ? size.height : rows * getRowHeight() + insets.top + insets.bottom;

        return size;


    }

     public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) {

            switch (orientation) {

            case SwingConstants.VERTICAL:
                return getRowHeight();

            case SwingConstants.HORIZONTAL:
                return getColumnWidth();

            default:
                throw new IllegalArgumentException("Invalid orientation: " + orientation);

            }

        }



}
...