2012-02-11 31 views
10

Tôi đang cố gắng vẽ một đường thẳng (đường màu đỏ trong hình ảnh) qua nhiều bảng, nhưng tôi dường như không thể làm cho nó hoạt động. Làm thế nào tôi có thể làm điều này có thể? Bất kỳ đề xuất?Vẽ đường trên nhiều bảng trong Java

Drawing of required functionality

+0

BTW - hình ảnh đẹp, nhưng hãy cắt chúng nhỏ hơn trong tương lai. Tôi đã thay thế bản gốc bằng phiên bản cắt (430 × 375px). –

Trả lời

10

Vẽ lên glass pane.

+0

hoặc đến JViewPort +1 – mKorbel

+0

@mKorbel ehh ... cửa sổ xem (nếu có) là _below_ bảng điều khiển ... – kleopatra

+0

cá nhân, tôi không hoàn toàn hiểu con trỏ trần cho glassPane: đó là một (btw, khó xử lý) thuộc tính của rootPane, đó là con trực tiếp của một container cấp cao nhất. Vì vậy, bạn là gì (và những người khác gần đây, bạn là người không may ngày hôm nay :-) thực sự cho thấy: quản lý các overpaints thủy tinh trên cơ sở mỗi khung? sử dụng rootPane ở nơi khác? sao chép một phần của mã của rootPane đang quản lý glassPane đến một vùng chứa khác? Thực sự tò mò ... – kleopatra

5

JDK 7 đã thêm JLayer to support visual decorations lên trên các thành phần tùy ý. Đối với các phiên bản trước đó, có một dự án JXLayer at java.net thực sự là tiền thân của nó với api

Đây là một ví dụ thô sơ, sử dụng một LayerUI tùy chỉnh vẽ một đường thẳng từ một thành phần trong một thùng chứa đến một thành phần khác trong một vùng chứa khác. Cha mẹ chung của hai thùng chứa được trang trí với một JLayer bằng cách sử dụng ui:

JComponent comp = Box.createVerticalBox(); 
    final JComponent upper = new JPanel(); 
    final JButton upperChild = new JButton("happy in upper"); 
    upper.add(upperChild); 
    final JComponent lower = new JPanel(); 
    final JButton lowerChild = new JButton("unhappy in lower"); 
    lower.add(lowerChild); 
    comp.add(upper); 
    comp.add(lower); 
    LayerUI<JComponent> ui = new LayerUI<JComponent>() { 

     @Override 
     public void paint(Graphics g, JComponent c) { 
      super.paint(g, c); 
      Rectangle u = SwingUtilities.convertRectangle(upper, upperChild.getBounds(), c); 
      Rectangle l = SwingUtilities.convertRectangle(lower, lowerChild.getBounds(), c); 

      g.setColor(Color.RED); 
      g.drawLine(u.x, u.y + u.height, l.x, l.y); 
     } 

    }; 
    JLayer<JComponent> layer = new JLayer<JComponent>(comp, ui); 
+0

Lớp J (X) rất dễ sử dụng được mã +1 – mKorbel

Các vấn đề liên quan