在Swing中应用Filter时,文本内容减少到一行

时间:2016-06-29 10:07:46

标签: java swing

我有一个表格,其中包含选项卡“创建”,“打开”,“编辑”和“文本框:过滤器”。 我正在创建一些带有标题名称和文本内容的注释。 使用Heading TestCheck,文本内容采用以下格式。

嗨test1 ..................

嗨test2 ...................

嗨test3 ..................

this article:点击此链接以供参考

它在textArea中以此格式创建文本。但是当我点击Filter并选择Heading TestCheck时,它会刷新并减少到一行,它只显示中间行。

嗨,测试2 ................

When creating Text:点击此链接以供参考

以下是文字签订合同的方法代码。

    package com.dc.d.diary.view;
    import java.awt.BorderLayout;
    import java.awt.Component;
    import java.awt.Dimension;
    import java.awt.EventQueue;
    import java.awt.Font;
    import java.util.Date;
    import java.util.List;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTable;
    import javax.swing.JTextArea;
    import javax.swing.event.TableModelEvent;
    import javax.swing.event.TableModelListener;
    import javax.swing.table.DefaultTableCellRenderer;
    import javax.swing.table.TableCellRenderer;
    import com.dc.c.ProtomAbbreviation;
    import com.dc.d.diary.model.DiaryNoteMO;
    import com.dc.view.table.DataExtractor;
    import com.dc.view.table.ExtendedDataExtractor;
    import com.dc.view.table.SimpleProtomTable;
    import com.dc.view.table.TableColumnAdjuster;
    import com.dc.view.table.renderers.OddLineCellRenderer;
    import com.dc.view.table.renderers.UserNameHandler;
    import com.dc.view.util.ExtendedToolTipHandler;
    import com.dc.view.util.ToolTipHandler;
    import com.dc.view.util.Util;
    import com.util.c.util.DateUtil;
    import com.util.c.util.ListUtil;

    /**
     * This is a view, namely a table containing diary notes.
     */
    public class DiaryTable extends SimpleProtomTable<DiaryNoteMO> {

    private static final long serialVersionUID = 1L;
    private static ProtomAbbreviation[] headers = {ProtomAbbreviation.DIARY_HEADING, ProtomAbbreviation.DIARY_TEXT, 
            ProtomAbbreviation.ISSUER,  ProtomAbbreviation.ISSUED_DATE, ProtomAbbreviation.PHASE};
    private TableColumnAdjuster columnAdjuster;

    public DiaryTable() {
        super(getDataExtractor(), getColumnHeaders(), false, false);
        disableMaxWidthOnColumns();
        columnAdjuster = new TableColumnAdjuster(getJTable());
        columnAdjuster.setUseOnlyPreferredWidths(true);
        columnAdjuster.disableMaxWidthSetting();
        columnAdjuster.setTableCellMaxWidth(2000);
        setDefaultRenderer(DiaryText.class, createRenderer(new OddLineCellRenderer(getDefaultRenderer(DiaryText.class))));

        sortByColumn(3);
        getModel().addTableModelListener(new TableModelListener() {
            @Override
            public void tableChanged(final TableModelEvent e) {
                EventQueue.invokeLater(new Runnable() {
                    @Override
                    public void run() {
                        calculateCellSizes();
                    }
                });
            }
        });
    }




    private DefaultTableCellRenderer createRenderer(final OddLineCellRenderer parentRenderer) {
        return new DefaultTableCellRenderer() {
            private static final long serialVersionUID = 1L;
            private JLabel innerTable = new JLabel(""); 
            private JPanel empty = new JPanel();
            private JPanel enclosingPanel;

            private JPanel getEnclosingPanel() {
                if (enclosingPanel == null) {
                    enclosingPanel = new JPanel() {
                        private static final long serialVersionUID = 1L;

                        @Override
                        public void setSize(int width, int height) {
                            super.setSize(width, height);
                        }

                        @Override
                        public void setSize(Dimension d) {
                            super.setSize(d);
                        }

                        @Override
                        public Dimension getPreferredSize() {
                            Dimension d = super.getPreferredSize();
                            return d;
                        }

                        @Override
                        public Dimension getMinimumSize() {
                            Dimension d = super.getMinimumSize();
                            return d;
                        }
                    };
                    enclosingPanel.setLayout(new BorderLayout());
                    enclosingPanel.setOpaque(true);
                    enclosingPanel.add(innerTable, BorderLayout.CENTER);
                }
                return enclosingPanel;
            }

            private JTextArea createTextArea() {
                JTextArea txtArea = new JTextArea();
                txtArea.setWrapStyleWord(true);
                txtArea.setLineWrap(true);
                txtArea.setOpaque(true);
                JLabel label = new JLabel();
                Font f = label.getFont();
                txtArea.setFont(f);
                return txtArea;
            }

            @Override
            public Component getTableCellRendererComponent(JTable table, Object valueIn, boolean isSelected, boolean hasFocus, int row, int column) {
                Component parentComponent = parentRenderer.getTableCellRendererComponent(table, valueIn, isSelected, hasFocus, row, column);
                Component result;
                if (valueIn != null) {
                    String value = valueIn.toString();

                    value = value.replaceAll("(\r\n|\r|\n|\n\r)", "<br>");
                    value = "<html>" + value + "</html>";
                    ////////

                    innerTable.setText(value);

                    innerTable.setBackground(parentComponent.getBackground());
                    innerTable.setForeground(parentComponent.getForeground());
                    int cWidth = table.getTableHeader().getColumnModel().getColumn(column).getWidth();
                    innerTable.setSize(new Dimension(cWidth, 1000));

                    result = getEnclosingPanel();
                    result.setBackground(parentComponent.getBackground());
                } else {
                    empty.setBackground(parentComponent.getBackground());
                    result = empty;
                }
                return result;
            }
        };
    }

    private void calculateCellSizes() {
        TableCellRenderer lRenderer = createRenderer(new OddLineCellRenderer(getDefaultRenderer(DiaryText.class)));

        for (int row = 0; row < getProtomModel().getRowCount(); row++) {
            DiaryNoteMO comPair = getProtomModel().getDataForRow(row);
            int rowHeight = lRenderer.getTableCellRendererComponent(this, comPair.getText(), false, false, 0, 0).getPreferredSize().height;
            setRowHeight(row, rowHeight);
        }

    }



    public void setTableData(List<DiaryNoteMO> data) {

        getProtomModel().setTableData(ListUtil.copyList(data));
        sortTable(true);
        columnAdjuster.adjustColumns();
        calculateCellSizes();
    }

    public static List<String> getColumnHeaders() {
        return ProtomAbbreviation.toStringList(headers);
    }

    public static DataExtractor<DiaryNoteMO> getDataExtractor() {
        return new ExtendedDataExtractor<DiaryNoteMO>() {

            @Override
            public Object getValueForObjectInColumn(DiaryNoteMO value, int column) {
                switch (column) {
                case 0:
                    return value.getHeading();
                case 1:
                    String text = value.getText();
                    //String text1 = text.replaceAll("<html>\r\n<br></html>", "\r\n");
                    return new DiaryText(text);
                    //return text.replaceAll("\r\n", " ");
                case 2:
                    return UserNameHandler.getUserName(value.getModifiedBy());
                case 3:
                    return DateUtil.formatDateAndTime(value.getCreationTime());
                case 4:
                    return value.getPhaseName();
                default:
                    return value;
                }
            }

            @Override
            public Class<?> getClassForColumn(int column) {
                if (column == 1) {
                    return DiaryText.class;
                }
                if (column == 2) {
                    return Date.class;
                }
                return String.class;
            }

            @Override
            public ToolTipHandler<DiaryNoteMO> getToolTipHandler() {
                return new ExtendedToolTipHandler<DiaryNoteMO>() {

                    @Override
                    public String getToolTipForObjectInCol(DiaryNoteMO value, int column) {
                        switch (column) {
                        case 1:
                            return getToolTipForDairyText(value);
                        default:
                            return null;
                        }
                    }

                    private String getToolTipForDairyText(DiaryNoteMO item) {
                        return Util.formatToolTip(item.getText());
                    }

                    @Override
                    public String getHeaderToolTip(int column) {
                        return headers[column].getLongName();
                    }
                };
            }
        };
    }



    private static class DiaryText {

        private String text;
        public DiaryText(String text) {
            this.text = text;
        }

        @Override
        public String toString() {            
            return text;
        }
    }

}

当我点击过滤器时,我必须避免文本内容的减少。在过滤时也应采用相同的格式。那么如何在线之间提供宽度来解决这个问题。

以下是班级。

:~$ sudo apt-get update
Command 'sudo' is available in '/usr/bin/sudo'
The command could not be located because '/usr/bin' is not included in the PATH environment variable.
sudo: command not found

When Applying Filter

0 个答案:

没有答案