<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    TWaver - 專注UI技術

    http://twaver.servasoft.com/
    posts - 171, comments - 191, trackbacks - 0, articles - 2
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    Swing小練習:中國式憑證錄入

    Posted on 2010-09-13 10:32 TWaver 閱讀(2359) 評論(0)  編輯  收藏

    做ERP或財務軟件的朋友知道,中國式的憑證錄入界面需要一些特殊的顯示效果:錄入金額的單元格要顯示一些數(shù)字分割線。估計這個風格來自老式的手工記賬本,因為我還隱約的記得當年從生產(chǎn)隊倉庫里面偷來的賬本就是這個樣子滴。為了繼續(xù)與“Swing很丑”的偏見做斗爭,持續(xù)弘揚Java的創(chuàng)新精神以及“除了老婆一切都可共享”的Share宗旨,這里特意用Swing寫了一個小例子,實現(xiàn)“中國式”的憑證錄入界面。

    這里面主要用到了Swing Table的Renderer和Editor這兩個機制,也是Swing比較有代表性的技術,大家都不陌生。對于熟悉這個機制的童鞋來說,本文實在沒什么新意。這里也就不啰嗦廢話了,直奔主題,點到為止,然后上代碼。

    用下面代碼設置table一個列的renderer和editor:

    1table.getColumnModel().getColumn(2).setCellRenderer(new MoneyRenderer());
    2table.getColumnModel().getColumn(2).setCellEditor(new MoneyEditor());
    在renderer中,首先paint縱向的豎線,然后在paint正常的單元格內容。
    1@Override
    2public void paintChildren(Graphics g) {
    3    Graphics2D g2d = (Graphics2D) g;
    4    painter.paint(this, g2d, null);
    5    super.paintComponent(g);
    6}
    其中,painter是一個封裝好的用來畫豎線的類。里面說道:

     1public class LinePainter {
     2
     3    private Stroke normalStroke = new BasicStroke(1);
     4    private Stroke thickStroke = new BasicStroke(1);
     5    private Color normalColor = Color.lightGray;
     6    private Color tickColor = Color.cyan.darker();
     7    private Color decimalColor = Color.red;
     8
     9    public void paint(JComponent component, Graphics2D g, Color lineColor) {
    10        g.setColor(Color.gray);
    11        g.setFont(component.getFont());
    12        Rectangle2D bounds = g.getFontMetrics().getStringBounds("0", g);
    13        int unitWidth = (int) bounds.getWidth();
    14
    15        int x = component.getWidth();
    16        int rightGap = 0;
    17        if (component.getInsets() != null{
    18            rightGap = component.getInsets().right;
    19        }

    20        if (component.getBorder() != null{
    21            rightGap = rightGap + component.getBorder().getBorderInsets(component).right;
    22        }

    23        if (component instanceof JTextComponent) {
    24            JTextComponent textComponent = (JTextComponent) component;
    25            Insets insets = textComponent.getMargin();
    26            rightGap = rightGap + insets.right;
    27            rightGap = rightGap + 2;
    28        }

    29
    30        x = x - rightGap;
    31
    32        int index = 0;
    33        while (x > unitWidth * 2{
    34            x = x - unitWidth;
    35            if (index == 1{
    36                g.setStroke(thickStroke);
    37                g.setColor(decimalColor);
    38            }
     else {
    39                if ((index - 1% 3 == 0{
    40                    g.setColor(tickColor);
    41                }
     else {
    42                    g.setColor(normalColor);
    43                }

    44                g.setStroke(normalStroke);
    45            }

    46            g.drawLine(x, 0, x, component.getHeight());
    47            index++;
    48        }

    49        if (lineColor != null{
    50            g.setColor(lineColor);
    51            g.setStroke(this.normalStroke);
    52            g.drawLine(0, component.getHeight() - 1, component.getWidth(), component.getHeight() - 1);
    53        }

    54    }

    55}

    很簡單,就一個paint函數(shù),畫縱向的彩條線而已。注意間距、字體等的考慮。

    為了在編輯期間也能顯示縱向線條,所以要定制editor,且重寫TextField的paint,先畫線條,再super正常的內容paint:

    1@Override
    2public void paint(Graphics g) {
    3    Graphics2D g2d = (Graphics2D) g;
    4    painter.paint(this, g2d, Color.red);
    5    super.paint(g);
    6}

    這樣,整個程序就結束了。稍作修改,加上輸入格式檢查、匯率轉換等東西,相信可以很容易的用在你家的ERP或者財務軟件上。

    給幾個家庭作業(yè):
    1、這張憑證記錄了什么業(yè)務活動的發(fā)生?
    2、為什么“庫存商品”一欄的金額在“借方”,而“銀行現(xiàn)金”一欄的金額在“貸方”?
    3、為什么“進項稅額”的金額是17元?
    如果能隨口回答這幾個問題,說明你不僅僅是個優(yōu)秀的程序員,還是個優(yōu)秀的財務;至少做個出納沒問題!等咱寫不動程序了,去工廠應聘一下出納吧,沒準能成!


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 亚洲国产精品尤物yw在线| 日韩精品无码免费一区二区三区 | 成人毛片免费在线观看| 亚洲综合在线成人一区| 黄色永久免费网站| 亚洲一卡二卡三卡四卡无卡麻豆| 182tv免费视视频线路一二三 | 美女隐私免费视频看| 免费在线不卡视频| www.av在线免费观看| 亚洲无码在线播放| 99精品免费观看| 亚洲综合无码一区二区痴汉| 精品国产麻豆免费网站| 一级美国片免费看| 亚洲精选在线观看| 免费看韩国黄a片在线观看| 婷婷亚洲综合五月天小说在线| 久久精品国产精品亚洲人人| 嫩草影院在线播放www免费观看| 亚洲视频在线一区二区三区| 免费黄色一级毛片| 国产成人1024精品免费| 亚洲色偷偷偷网站色偷一区| 精品久久久久久久免费人妻| 国产久爱免费精品视频| 亚洲国产成人久久| 亚洲AV中文无码乱人伦| 免费国产午夜高清在线视频| 2017亚洲男人天堂一| 亚洲无码视频在线| 日韩版码免费福利视频| 免费一级特黄特色大片| 久久精品国产亚洲AV麻豆网站| 免费观看的毛片手机视频| 三年片在线观看免费西瓜视频 | 美美女高清毛片视频黄的一免费| 亚洲高清国产拍精品26U| 性xxxx视频播放免费| 国产精品免费看久久久香蕉| 亚洲香蕉在线观看|