2014-01-11 4 views
-1

가끔 setBounds()가 작동하지만 actionlistener에서만 작동합니다. 내 코드 : 그것은 또한 생성자에서 작동하므로JPanel 자르기 또는 (.setBounds()) 작동하지 않음

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); 
    this.setLayout(layout); 
    layout.setHorizontalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(layout.createSequentialGroup() 
      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
       .addComponent(btnBestellingItemToev, javax.swing.GroupLayout.PREFERRED_SIZE, 89, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) 
        .addComponent(txtWat, javax.swing.GroupLayout.Alignment.LEADING) 
        .addComponent(txtTafelNr, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 80, Short.MAX_VALUE))) 
      .addGap(0, 131, Short.MAX_VALUE)) 
    ); 

이 사람이 나를 도울 수 :
-does이

public panel() { 
    initComponents(); 
    setBounds(100,100,105,105); 
    setMaximumSize(new Dimension(100,100)); 

} 

-does이

private void btnBestellingItemToevActionPerformed(java.awt.event.ActionEvent evt) {              
    setBounds(100,100,105,105); 
    setMaximumSize(new Dimension(100,100)); 


} 

-layout 관리자를 작동 작동하지?

+0

setBounds()를 그 정수의 선언으로 다음, 항상 작동 내가 패널에 직접 결과 페인트,하지만 그건 나야 전혀 그렇지 않습니다 – mKorbel

+0

포함 된 창/프레임에 레이아웃 관리자 설정이 있습니까? 그것은 아마 ctor 다음에 모든 것을 재조정 할 것입니다. –

+0

자동 생성 코드 : –

답변

0

내가 말했듯이, 당신이 가지고있는 문제는 컨테이너가 이동하려고하는 구성 요소/크기에 레이아웃 관리자가 있다는 것입니다.

레이아웃 관리자는 그 안의 모든 구성 요소의 위치와 크기를 결정합니다.

두 가지 선택 사항이 있습니다. 자신이 원하는 것을하는 레이아웃 매니저를 작성하십시오. 이는 상당히 복잡한 프로세스이지만 일반적으로 레이아웃 관리자가 없으면 더 나은 선택입니다. 이 같은 일을 할 때 개인적으로

, ...

BeachBallOfDoom

import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.io.IOException; 
import javax.imageio.ImageIO; 
import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.Timer; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class BouncyBall { 

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

    public BouncyBall() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new BallCourt()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class BallCourt extends JPanel { 

     private JLabel beachBall; 
     private int delta = 4; 

     public BallCourt() { 
      setLayout(null); 
      beachBall = new JLabel(); 
      try { 
       beachBall.setIcon(new ImageIcon(ImageIO.read(getClass().getResource("/BeachBallOfDoom.png")))); 
      } catch (IOException ex) { 
       ex.printStackTrace(); 
      } 

      beachBall.setBounds(0, 100 - 16, 32, 32); 
      add(beachBall); 

      Timer timer = new Timer(40, new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        int x = beachBall.getX() + delta; 
        if (x + beachBall.getWidth() > getWidth()) { 
         delta *= -1; 
         x = (getWidth() - beachBall.getWidth()) + delta; 
        } else if (x < 0) { 
         delta *= -1; 
         x = delta; 
        } 

        beachBall.setLocation(x, beachBall.getY()); 
       } 
      }); 
      timer.start(); 
     } 

     @Override 
     public Dimension getPreferredSize() { 
      return new Dimension(200, 200); 
     } 

    } 

}