Я делаю графический интерфейс для стека с помощью Java. Вот мой код

     private void StackActionPerformed(java.awt.event.ActionEvent evt) 
    {

      b1=new JButton("Push");
      b2=new JButton("Pop");
      b3=new JButton("Peek");
      b4=new JButton("Clear");
      b1.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            pushButtonActionPerformed(evt);
        }
      });
      tb.add(b1);
      tb.add(b2);
      tb.add(b3);
      tb.add(b4);
      frame_st.add(tb);
      frame_st.setExtendedState(Frame.MAXIMIZED_BOTH);

  }

Здесь я добавляю кнопки на свою панель инструментов (tb), все работает нормально. Я не получаю никаких сообщений об ошибках. Но после компиляции не получаю желаемого результата. toolBar (tb) не может добавлять кнопки (b1, b2 и т. д.)

3
rick 19 Июн 2012 в 22:28
1
Как инициализируется tb?
 – 
Baz
19 Июн 2012 в 22:30
Частный javax.swing.JToolBar tb;
 – 
rick
19 Июн 2012 в 22:32
Это не инициализация, это декларация.
 – 
Baz
19 Июн 2012 в 22:33
Обычно вы не добавляете кнопки напрямую в JToolBar. Рекомендуемые способы - использовать JToolBar.add (Action a) для добавления действий.
 – 
Suraj Chandran
19 Июн 2012 в 22:33
1
Возникают ли исключения во время выполнения?
 – 
Puce
19 Июн 2012 в 22:35

1 ответ

Лучший ответ

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

private void StackActionPerformed(java.awt.event.ActionEvent evt) 
{
   b1=new JButton("Push");
   b2=new JButton("Pop");
   b3=new JButton("Peek");
   b4=new JButton("Clear");
   b1.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
         pushButtonActionPerformed(evt);
      }
   });
   tb.add(b1);
   tb.add(b2);
   tb.add(b3);
   tb.add(b4);    
   frame_st.add(tb);
   frame_st.setExtendedState(Frame.MAXIMIZED_BOTH);
   JPanel contentPane = (JPanel)frame.getContentPane();
   contentPane.revalidate();
   contentPane.repaint();
}

Также важно, какие менеджеры компоновки используют ваши tb JPanel и JFrame contentPane?

2
Boro 19 Июн 2012 в 23:03
У меня еще одна проблема. Я хочу, чтобы моя панель инструментов меняла размер при нажатии кнопки максимизации окна
 – 
rick
19 Июн 2012 в 22:58
@rick: предположительно, ваша панель содержимого JFrame использует BorderLayout, поэтому вы просто добавляете свою панель инструментов в contentPane в позиции BorderLayout.NORTH, также известной как позиция BorderLayout.PAGE_START.
 – 
Hovercraft Full Of Eels
19 Июн 2012 в 23:02