2012-06-15 12 views
6

Vì vậy, vấn đề của tôi sẽ giảm xuống mức này ... Các ngăn mặc định là loại xấu xí, cộng với tôi muốn thêm nhãn cho nó (theo ý tôi-muốn-văn-trên-nó, không phải trong "thêm một JLabel để bố trí của nó "ý nghĩa). Tôi thấy rằng bạn có thể thay đổi đường viền trên ngăn chia ngăn chia tách, nhưng khi tôi làm điều đó, nó sẽ xóa các mũi tên một chạm mà tôi muốn giữ lại.Làm cách nào để tùy chỉnh bộ chia JSplitPane và duy trì chức năng mũi tên một chạm?

Bất kỳ suy nghĩ nào về cách tôi có thể có cả hai?

Dưới đây là một SSCCE đó chứng tỏ cả hai hành vi mặc định và những gì xảy ra khi tôi thay đổi biên giới dải phân cách:

import javax.swing.*; 
import javax.swing.plaf.basic.BasicSplitPaneDivider; 
import javax.swing.plaf.basic.BasicSplitPaneUI; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

public class SplitPaneFun { 
public static void main(String[] args) { 

     //Here I'm messing around with the divider look. This seems to remove the one-touch arrows. These blocked-out lines illustrate 
     // what I'm doing to modify the divider's border. Does this look right?: 
    //------------------------------------------------------------------------------------------------ 
    JSplitPane withCustomDivider = new JSplitPane(JSplitPane.VERTICAL_SPLIT, new JPanel(), new JPanel()); 
    BasicSplitPaneDivider divider = ((BasicSplitPaneUI) withCustomDivider.getUI()).getDivider(); 
    withCustomDivider.setOneTouchExpandable(true); 
    divider.setDividerSize(15); 
    divider.setBorder(BorderFactory.createTitledBorder(divider.getBorder(), "Custom border title -- gets rid of the one-touch arrows!")); 
    //------------------------------------------------------------------------------------------------ 

     //build a different splitpane with the default look and behavior just for comparison 
    JSplitPane withDefaultDivider = new JSplitPane(JSplitPane.VERTICAL_SPLIT, new JPanel(), new JPanel()); 
    withDefaultDivider.setOneTouchExpandable(true); 

     //slap it all together and show it... 
    CardLayout splitsLayout = new CardLayout(); 
    final JPanel splits = new JPanel(splitsLayout); 
    splits.add(withCustomDivider, "custom"); 
    splits.add(withDefaultDivider,"default"); 

    JButton toggle = new JButton("click to see the other split pane"); 
    toggle.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      ((CardLayout)splits.getLayout()).next(splits); 
     } 
    }); 

    JFrame frame = new JFrame("Split Pane Divider Comparison"); 
    frame.setLayout(new BorderLayout()); 
    frame.add(splits, BorderLayout.CENTER); 
    frame.add(toggle, BorderLayout.PAGE_END); 
    frame.setSize(600,500); 
    frame.setVisible(true); 
} 
} 
+3

+ 1 cho [sscce] (http://sscce.org/). – trashgod

+0

Bạn có thể đặt đường viền có tiêu đề trong nội dung của ngăn chia không? – trashgod

+0

Vâng, liên quan đến nhãn, tôi có thể. Tôi vẫn muốn một cách để thay đổi cách phân chia trông mà không cần loại bỏ các mũi tên một chạm. –

Trả lời

3

Tôi thấy rằng bạn có thể thay đổi biên giới trên cửa sổ chia tách, nhưng khi tôi làm rằng, nó loại bỏ các mũi tên một chạm, mà tôi muốn giữ lại.

  • tất cả các phương pháp này có thể ghi đè lên các sự kiện từ Mouse(Xxx)Listener, PropertyChangeListenerButtonModel, không có gì tốt hơn xung quanh như chất gây nghiện SubstanceSplitPaneDivider

  • phần của Custom Look and Feels ghi đè các phương pháp này quá

+0

+1 để xem xét giao diện người dùng; không có gì dễ dàng hơn đến tâm trí. – trashgod

+0

@trashgod nhờ Fridays_Flame_War tại sao làm phiền với Custom L & F, ví dụ (điên) Nimbus rất tốt để ghi đè đầu ra cho màn hình từ ba dinosauruses lớn JTabbedPane, JSlider và JSplitPane :-) – mKorbel

+1

Tôi đã thấy một số người dùng kháng buộc một L & F cụ thể , nhưng Nimbus nói chung cũng được chấp nhận. – trashgod

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