mysql中的斷行符號換行,jtable換行,自動調整行高,列寬 \r \n <br/>

來源:互聯網
上載者:User

標籤:

兩個問題: 1.mysql裡不支援換行,textarea裡的斷行符號傳入後再傳出來就變成了空格。

2.JTable的render預設是繼承jlabel的,不支援換行顯示。為了實現換行,一種方法是新寫個render繼承jtextarea,但是這樣了之後不好設自動調整列寬,行高不能根據斷行符號調整,也調的不準,而且超級卡。。。這種方法代碼可以自己網上搜。下面介紹第二種方法:預設的render不支援換行顯示,我們先實現讓儲存格可以換行。我們在某一個儲存格的value前面加上,末尾加,中間要要換行的地方加
<br>

 


,然後那個儲存格裡面的內容就可以換行了。但是發現儲存格沒有調整行高,導致兩行字都只能看到一半。這時候,我們可以自己寫個滑鼠事件,讓jtable可以通過滑鼠拖拽調整行高,同時也可以寫個方法,自動計算儲存格value中
<br>

 


出現的次數,然後通過table.setRowHeight((次數+1)*17)實現自動調整行高。下面是具體的實現代碼:最好的方法是資料庫裡存的是正確的內容,等java查詢並把結果放到tablemodel中時,把裡面的斷行符號符替換為
,並在兩頭加html標籤。但是jtextarea裡的內容gettext傳入資料庫後,在資料庫中顯示為空白格,具體代碼為"\r ",\r在java中也是轉義了的,如果等我們從資料庫查詢出來了再替換就只能替換空格了,這樣會把正常的空格也當成斷行符號。所以我認為最好的方法是在資料庫裡就把斷行符號替換成
,textarea傳入到sql中的斷行符號被sql用char(10)替換了,所以,我們在每次執行查詢的時候,對資料庫執行一次UPDATE table_name SET column_name = REPLACE(column_name, CHAR(10), ‘
‘),接著把查詢結果賦給tablemodel的迴圈中,if (column==會出現斷行符號的列),則在首尾加html標籤。public String parseToWrap(String str){StringBuffer sb = new StringBuffer();sb.append("");sb.append(str);//sb.append(str.replaceAll("\", "
"));sb.append("");return sb.toString();}按以上做了後,在jtable裡綁定tablemodellistener,修改儲存格內容後上傳時會出現上傳了html標籤,需要在上傳時檢測html標籤,有的話刪除再上傳(我的表只有13-15列加過,所以只檢測13-15行):public void tableChanged(TableModelEvent e) {int row = e.getFirstRow();         int column = e.getColumn();         TableModel model = (TableModel)e.getSource();         String columnName = model.getColumnName(column);         String data =(String) model.getValueAt(row, column);       if (column==13||column==14||column==15){String str2 = "";int total = 0;for (String tmp = data; tmp != null&&tmp.length()>=str2.length();){ if(tmp.indexOf(str2) == 0){   total ++; } tmp = tmp.substring(1);       }if(total!=0){data.substring(6, data.length()-7);}}       Object num =model.getValueAt(row, 0);       try{        if(column==1 && !isDateStringValid(data)){        JOptionPane.showMessageDialog(null,"日期格式錯誤");        }        else if(column==19){        JOptionPane.showMessageDialog(null,"請在配置中修改附件");        }else{        stmt.executeUpdate("update exception set "+columnName+"= ‘"+data+"‘ where NO ="+num );        }        }catch (Exception upe) {upe.printStackTrace();JOptionPane.showMessageDialog(null,"沒有許可權");}}}檢測
的個數實現自動調整行高(我的表只有13-15列會出現斷行符號,所以不用從0開始迴圈):public void autoHeight(JTable table){TableModel model=table.getModel();for(int i=0;iint height=17;for (int j=13;j<16;j++){String str1 =(String) model.getValueAt(i, j);String str2 = "int total = 1;for (String tmp = str1; tmp != null&&tmp.length()>=str2.length();){ if(tmp.indexOf(str2) == 0){   total ++; } tmp = tmp.substring(1);}height=Math.max(height, 17*total);}table.setRowHeight(i, height);}}檢測單行字元數,實現自動調整列寬:public void FitTableColumns(JTable myTable){   JTableHeader header = myTable.getTableHeader();   int rowCount = myTable.getRowCount();   Enumeration columns = myTable.getColumnModel().getColumns();   while(columns.hasMoreElements())   {    TableColumn column = (TableColumn)columns.nextElement();       int col = header.getColumnModel().getColumnIndex(column.getIdentifier());       int width = (int)myTable.getTableHeader().getDefaultRenderer().getTableCellRendererComponent(myTable, column.getIdentifier(), false, false, -1, col).getPreferredSize().getWidth();                      for(int row = 0; row        {        int preferedWidth = (int)myTable.getCellRenderer(row, col).getTableCellRendererComponent(myTable,            myTable.getValueAt(row, col), false, false, row, col).getPreferredSize().getWidth();            width = Math.max(width, preferedWidth);        }        header.setResizingColumn(column); // 此行很重要        column.setWidth(width+myTable.getIntercellSpacing().width);    }}為表格綁定滑鼠事件,可以手動調整行高:table.addMouseListener(listener);table.addMouseMotionListener(listener);class MouseAdapterListener extends java.awt.event.MouseMotionAdapter    implements MouseListener {int oldY = 0;int newY = 0;int row = 0;int oldHeight = 0;boolean drag = false;int increase = 0; public MouseAdapterListener() { } public void mouseMoved(MouseEvent e) {    int onRow = table.rowAtPoint(e.getPoint());     int height = 0;    for (int i = 0; i <= onRow; i++) {        height = height + table.getRowHeight(i);    }     if (height - e.getY() < 3) {        drag = true;        table.setCursor(new Cursor(Cursor.N_RESIZE_CURSOR));    } else {        drag = false;        table.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));    } } public void mouseDragged(MouseEvent e) {    if (drag) {        int value = oldHeight + e.getY() - oldY;        if (value < 30)            table.setRowHeight(row, 17);        else                                 table.setRowHeight(row, oldHeight + e.getY() - oldY);                table.setRowSelectionInterval(row, row);                    }} public void mousePressed(MouseEvent e) {    oldY = e.getY();    row = table.rowAtPoint(e.getPoint());    oldHeight = table.getRowHeight(row);    table.setRowSelectionInterval(row, row);} public void mouseReleased(MouseEvent e) {    newY = e.getY();    table.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));} public void mouseClicked(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {}}

mysql中的斷行符號換行,jtable換行,自動調整行高,列寬 \r \n <br/>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.