2012-06-15 2 views
6

Итак, моя проблема сводится к этому ... Различия по умолчанию являются отвратительными, плюс я хотел бы добавить к нему ярлык (в смысле I-want-text-on-it, а не в добавлении JLabel для его макета "смысл). Я вижу, что вы можете изменить границу на разделителе разделенных панелей, но когда я это делаю, он удаляет стрелки с одним касанием, которые я хочу сохранить.Как настроить разделитель JSplitPane и поддерживать функциональность стрелок в одно касание?

Любые мысли о том, как я могу иметь оба?

Вот SSCCE, который демонстрирует как поведение по умолчанию, и что происходит, когда я изменить границы делителя:

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 для [sscce] (http://sscce.org/). – trashgod

+0

Можете ли вы поместить выделенную границу в содержимое разделенной панели? – trashgod

+0

Да, в отношении лейбла, я мог бы. Мне все же хотелось бы изменить способ использования разделителя, не избавившись от стрелок с одним касанием. –

ответ

3

Я вижу, что вы можете изменить границу на разделенной панели делителя, но когда я делаю что он удаляет стрелки с одним касанием, которые я хочу сохранить.

  • все эти методы можно переопределить события из Mouse(Xxx)Listener, PropertyChangeListener и ButtonModel, ничего лучше всего, как субстанцию ​​SubstanceSplitPaneDivider

  • часть Custom Look and Feels заместить эти методы слишком

+0

+1 для рассмотрения делегата пользовательского интерфейса; ничего проще не приходит в голову. – trashgod

+0

@trashgod thanks Fridays_Flame_War зачем беспокоиться о пользовательских L & F, например (сумасшедший) Nimbus очень хорошо переопределяет вывод на экран от трех больших динозавров JTabbedPane, JSlider и JSplitPane :-) – mKorbel

+1

Я видел некоторое сопротивление пользователя тому, чтобы заставить конкретный L & F , но Нимбус, как правило, хорошо принят. – trashgod