2016-11-26 73 views
1

我试图把一个未知的SQL查询的结果集放在一个表格的javafx TextArea中。我设法做到了完美,但我在对齐方面遇到了小问题。 Here is the result that i get字符串对齐

这里是我的我的代码:

 private void querySubmitButtonClicked() { 
     try { 
     String q = queryTF.getText(); 
     PreparedStatement ps = getConnection().prepareStatement(q); 
     if ((q.startsWith("INSERT")) || (q.startsWith("UPDATE")) || (q.startsWith("DELETE"))) 
      ps.executeUpdate(); 
     else 
      queryResult = ps.executeQuery(); 

     ResultSetMetaData rsmd = queryResult.getMetaData(); 
     int numberOfColumns = rsmd.getColumnCount(); 
     StringBuilder sb = new StringBuilder(); 
     String columnsNames = ""; 

     for (int i = 1; i <= numberOfColumns; i++) 
      columnsNames += String.format("%-40s", rsmd.getColumnName(i)); 

     sb.append(columnsNames + "\n"); 
     while (queryResult.next()) { 
      String columnsValues = ""; 
      for (int i = 1; i <= numberOfColumns; i++) { 
       columnsValues += String.format("%-40s", queryResult.getString(i)); 
      } 
      sb.append(columnsValues + "\n"); 
     } 
     TextArea resultArea = new TextArea(sb.toString()); 
     resultArea.setEditable(false); 
     resultArea.setFocusTraversable(false); 
     resultArea.setStyle("-fx-font-size: 10"); 
     expertPane.setCenter(resultArea); 

    } catch (SQLException e) { 
     expertPane.setCenter(msgLabel); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

我试着使用权allignemnt通过40年代%,但它wouldnt allign正确也。我也试过使用%100s和%-100s,它也没有工作。 有什么帮助吗?

+0

您可以使用等宽字体吗?像摩纳哥或新快递一样。 –

+0

@ OleV.V。将字体更改为Courier New解决了我的问题!谢谢你,洛特! –

回答

0

正如我在评论中所建议的那样,请使用Monospaced(固定宽度)字体,如Monaco或Courier New。这应该做到这一点。

我不知道外汇,但我认为另一种选择是使用TableView而不是TextArea

+0

我在我的项目中使用了很多表格视图。但是在tableview中这样做很复杂/不可能,因为我不知道数据的类型,数量和大小;这取决于用户的查询。 无论如何谢谢你,改变字体解决了我的问题! –

+0

是的,我也在想'TableView'可能是复杂的选项。只是为了完整性而提及 - 也许它根本就不相关。 –