Swinghacks——自訂邊框

來源:互聯網
上載者:User

自訂邊框用到的情況也比較少(如果只是為了美觀的話)

如,把刻度做到邊框上是個不錯的選擇

當然如果真的為了美觀,那看看下面的圖片:

這又讓我想起做web時用div布局,寬度自增長時那css寫的真是累,ui  ux什麼的是很花時間和心思,哎,不過swing就算了,不美觀而且設計的非常複雜。個人還是比較支援原生態swt,但是如果真決定用swt寫一個產品的話,那其實可以考慮不用java了。要原生態效果,語言選擇就多了。

跑題了,回到邊框。原理基本上就是畫,上下左右  加上  4個角,共8個邊框需要畫。所以畫邊框的時候,需要知道的資訊就是,邊框佔據多大空間 和 組件的寬高

邊框繼承Border介面,此介面共3個方法:

1、擷取邊框寬度資訊

Insets getBorderInsets(Component c);

這個方法返回邊框佔據的空間資訊,分別是上下左右位置

public Insets(int top, int left, int bottom, int right)

2、邊框是否透明

boolean isBorderOpaque();

Opaque是不透明的意思,別搞混了此方法返回邊框是否透明,注意

邊框的空間是要算在組件的高寬中的,比如組件大小是100x100,邊框是10,那麼中間80x80的空間就是組件除去邊框的空間

isBorderOpaque為true就是不透明,那麼此時畫邊框的時候,就需要把中間80x80的空間也畫上某種顏色,否則就是bug。你可以理解為,如果邊框不透明,那麼此時邊框就不僅僅是周圍的10,而是100x100。

3、繪製邊框

void paintBorder(Component c, Graphics g, int x, int y, int width, int height);

這個方法沒什麼好說了,width height是組件的高寬,通過getBorderinsets(c)方法擷取邊框資訊,然後就開始用Graphics慢慢畫吧。話說swing單線程的叫用作業系統底層的paint方法畫介面真的讓人感覺很蛋疼

如果想自訂邊框,那extends AbstractBorder是不錯的選擇

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.