使用GUI中的现有按钮将按钮添加到JPanel

时间:2018-11-21 17:47:37

标签: java swing button jpanel actionlistener

我正在尝试编写自己的第一个Java应用程序,并且想在GUI中创建一个按钮。这是我要运行的程序。

如果我单击GUI中的现有按钮。我将添加一个ActionListener,但我只想添加一个按钮。如果我在GUI中单击两个按钮。首先运行LoadProgress,然后运行Hinzufügen。如何解决该问题,以便仅在单击Hinzufügen按钮时创建按钮。

private void pnlLeft(){
   JProgressBar bar = new JProgressBar();
   bar.setPreferredSize(new Dimension(0, 30));
   getContentPane().add(BorderLayout.SOUTH, bar);

   JPanel panel2 = new JPanel();
   panel2.setLayout(new BoxLayout(panel2, BoxLayout.PAGE_AXIS));

   JButton btnLoad = new JButton("LoadProgress");
   JButton leftbutton = new JButton("Hinzufügen");
   panel2.add(leftbutton);
   panel2.add(Box.createVerticalGlue());
   panel2.add(btnLoad);
   getContentPane().add(BorderLayout.WEST, panel2);
      leftbutton.addActionListener(new ActionListener() {

      @Override
      public void actionPerformed(ActionEvent arg0) {   
         if(arg0.getActionCommand().equals("Hinzufügen")) { 
            JButton test = new JButton("TEST");
            panel2.add(test);
         }
      }
   });

   btnLoad.addActionListener(new ActionListener() {

   @Override
   public void actionPerformed(ActionEvent e) {
      // TODO Auto-generated method stub
      new Thread() {
         @Override
         public void run() {
            if(e.getActionCommand().equals("LoadProgress")) {   
               bar.setStringPainted(true);
               for ( int f = 1; f <= 100; f++) {
                  try {
                     Thread.sleep((long) (Math.random() * 100));
                  }catch (InterruptedException ex){
                     ex.printStackTrace();
                  } 
                  bar.setString("Lade Bestand..." + f + "%");
                  bar.setValue(f);
               }
               bar.setValue(0);
               bar.setStringPainted(false);     
            }
         }
      }.start();
   }});
};

1 个答案:

答案 0 :(得分:0)

当您从可见的GUI中添加(或删除)组件时,基本代码为:

panel.add(...);
panel.revalidate(); // invokes layout manager
panel.repaint(); 

否则,组件的默认大小为(0,0),因此无需绘制任何内容。