2016-04-13 1 views
0

У меня есть как тексты, так и значки для моих кнопок. Я хочу скрыть тексты, если пользователь изменяет размер рамки и делает ее невидимой. Я нашел обходной путь с панелью прокрутки, но я хочу знать, есть ли лучшее решение. Заранее спасибо.Изменить видимость кнопок в соответствии с размером рамки

Мое решение:

public class IconButtonTest extends JFrame { 

    private JScrollPane buttonScrollPane; 

    private JButton button1; 
    private JButton button2; 
    private JButton button3; 

    public IconButtonTest() { 
     JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); 

     ImageIcon icon = new ImageIcon(); 

     button1 = new JButton("Button1", icon); 
     button2 = new JButton("Button2", icon); 
     button3 = new JButton("Button2", icon); 

     buttonPanel.add(button1); 
     buttonPanel.add(button2); 
     buttonPanel.add(button3); 

     buttonScrollPane = new JScrollPane(buttonPanel); 
     buttonScrollPane.setBorder(null); 
     add(buttonScrollPane, BorderLayout.NORTH); 

     addComponentListener(new ResizeListener()); 

     setSize(300, 300); 
     setVisible(true); 
    } 

    public static void main(String[] args) { 
     new IconButtonTest(); 
    } 

    private class ResizeListener extends ComponentAdapter { 
     @Override 
     public void componentResized(ComponentEvent e) { 
      button1.setText("Button1"); 
      button2.setText("Button2"); 
      button3.setText("Button2"); 

      SwingUtilities.invokeLater(new Runnable() { 
       public void run() { 
        if (buttonScrollPane.getHorizontalScrollBar().isVisible()) { 
         button1.setText(""); 
         button2.setText(""); 
         button3.setText(""); 
        } 
       } 
      }); 

     } 
    } 
} 

Я добавил кнопки JPanel и добавить эту панель к раме с помощью панели прокрутки. В ResizeListener Я проверяю, отображается ли горизонтальная прокрутка или нет. Если это видно, значит, buttonPanel переполнен видимой областью.

+1

рассмотреть также 'JToolBar', который можно закрепить на большинстве L & Fs, или [вариант размера] (http://stackoverflow.com/a/14599176/230513). – trashgod

ответ

1

Обнаружен обходной путь с панелью прокрутки, но я хочу знать, есть ли лучшее решение.

Не знаю, если это лучше, но нет необходимости в панели прокрутки. Просто добавьте слушатель к панели, то вы можете проверить предпочтительную ширину от фактической ширины:

button1.setText("Button1"); 
button2.setText("Button2"); 
button3.setText("Button2"); 

JPanel panel = (JPanel)e.getComponent(); 

if (panel.getSize().width < panel.getPreferredSize().width) 
{ 
    button1.setText(""); 
    button2.setText(""); 
    button3.setText(""); 
} 

Я хочу, чтобы скрыть текст, если пользователь изменить размер кадра и сделать один кнопки невидимыми.

Если вы просто пытаетесь убедиться, что все кнопки доступны, то вы можете быть в состоянии:

  1. Используйте Wrap Layout. Кнопка будет перенесена на новую строку, и высота панели будет увеличена.

  2. Используйте концепцию ScrollContainer. Кнопки будут добавлены в начало/конец контейнера, как требуется, чтобы вы могли прокручивать кнопки, которые в настоящее время не видны. См: Moving left right in a JPanel

+0

Это определенно лучше. Потому что в моем решении иногда возникал проблесковый эффект при изменении размера (область прокрутки становилась видимой). – rdonuk

+0

И спасибо за 'ScrollContainer', я думаю, это будет полезно. – rdonuk

Смежные вопросы