2011-08-06 28 views
6

Giả sử bạn có giao diện người dùng có năm tab trở lên và bạn cần thông báo cho người dùng rằng tab "2" cần chú ý.Làm cách nào để thông báo cho người dùng rằng một Tab cụ thể trong JTabbedPane cần chú ý?

Có cách nào để thực hiện việc này không? Ví dụ: làm cho tab flash màu cam hoặc thay đổi màu của tab? Tôi đã không thành công với requestFocus.

Chỉnh sửa: Tôi cũng quan tâm đến việc biết cách tập trung vào tab 2 nếu điều đó là không thể.

Trả lời

6

Bạn có thể thực hiện điều này bằng cách thay đổi nền và nền trước của bảng tại vị trí của tab bằng cách sử dụng một số bộ hẹn giờ. Chỉ cần thay đổi nó trên một số khoảng thời gian và nó sẽ giống như nhấp nháy của nó. Đây là bản trình diễn cho điều này:

JFrame frame = new JFrame(); 
    frame.setSize(400, 400); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    final JTabbedPane pane = new JTabbedPane(); 

    JPanel jPanel = new JPanel(); 
    JButton button = new JButton("Blink tab"); 
    jPanel.add(button); 
    pane.addTab("adsad", jPanel); 

    JPanel jPanel1 = new JPanel(); 
    jPanel1.add(new JLabel("hi")); 
    pane.addTab("werqr", jPanel1); 

    final Color defaultBackColor = pane.getBackgroundAt(1); // default background color of tab 
    final Color defaultForeColor = pane.getForegroundAt(1); // default foreground color of tab 

    button.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      Timer timer = new Timer(500, new ActionListener() { 
       boolean blinkFlag = false; 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        blink(blinkFlag); 
        blinkFlag = !blinkFlag; 
       } 
      }); 
      timer.start(); 
     } 
     private void blink(boolean blinkFlag) { 
      if (blinkFlag) { 
       pane.setForegroundAt(1, Color.green); 
       pane.setBackgroundAt(1, Color.orange); 
      } else { 
       pane.setForegroundAt(1, defaultForeColor); 
       pane.setBackgroundAt(1, defaultBackColor); 
      } 
      pane.repaint(); 
     } 
    }); 

    frame.add(pane); 
    frame.setVisible(true); 

Đây là chỉ mục tab mà bạn muốn nhấp nháy. Để ngừng nhấp nháy dừng hẹn giờ và đặt màu cho trước và màu nền thành mặc định.


Tôi cũng muốn biết làm thế nào để buộc tập trung vào tab 2 nếu nó là có thể.

Nếu bạn muốn chuyển trọng tâm vào tab đó, bạn có thể sử dụng phương thức setSelectedIndex(int index).


Chỉnh sửa: -

Như đã nói bởi @perp bằng nhận xét (tôi cũng đã thử nghiệm nó và anh là đúng) này sẽ không làm việc cho cái nhìn và cảm nhận khác hơn WindowDefault. Nhưng màu nền trước (màu văn bản) sẽ vẫn nhấp nháy.

+0

Lưu ý rằng việc thay đổi màu nền sẽ không làm gì nếu bạn sử dụng giao diện Windows của da (ví dụ: không phải là chủ đề cổ điển của Windows). WindowsTabbedPaneUI vẽ một làn da tùy chỉnh trên đầu tab có hiệu quả ẩn bất kỳ màu nền nào được đặt. Vì vậy, giải pháp không hoàn toàn di động qua giao diện, mặc dù màu văn bản vẫn sẽ nhấp nháy. – perp

+0

@Prep: Tôi chưa thử nghiệm trên các giao diện khác nhau để không nhận thức được điều đó. Cảm ơn đã chỉ ra điều đó. Đã cập nhật câu trả lời. –

+0

Câu trả lời hay. Cảm ơn! – David

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