2011-08-01 17 views
1

私は一定の固定値に基づいて幅と高さにリサイズするJFrameを作成しようとしています。JFrameのサイズ変更の質問

マウスを使用してJFrameのサイズを変更すると、新しい幅または高さの値が20の倍数(下のコードでは固定サイズ)でない場合、幅または高さは最も近い20、次にJFrameのサイズを変更します。

幅が動作しているように見えますが、高さが...

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

@SuppressWarnings("serial") 
public class test extends JFrame { 

private static JPanel panel = new JPanel(null); 
private static int SIZE = 20; 

public test() { 
    panel.setBackground(Color.RED); 
    this.add(panel); 
} 

public static void main(String[] args) { 
    final test frame = new test(); 
    frame.setSize(600, 400); 
    frame.setVisible(true); 
    frame.setLocationRelativeTo(null); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    frame.addComponentListener(new ComponentListener() { 
     public void componentResized(ComponentEvent e) { 
      if ((panel.getWidth() % SIZE != 0) || (panel.getHeight() % SIZE != 0)) { 
       int screenWidth = ((panel.getWidth() + SIZE)/SIZE) * SIZE; 
       int screenHeight = ((panel.getHeight() + SIZE)/SIZE) * SIZE; 
       frame.setSize(screenWidth, screenHeight); 
      } 
     } 
     public void componentHidden(ComponentEvent arg0) {} 
     public void componentMoved(ComponentEvent arg0) {} 
     public void componentShown(ComponentEvent arg0) {} 
    }); 
} 
} 

答えて

1

を助けてください、フレームサイズは、インセット(ボーダーのサイズ)が含まれていません。パネルのサイズはありません。

JFrame getWidth()getHeight()またはframe.getInsets()のいずれかを使用し、最終的なサイズを考慮する必要があります。

JPanel(これは興味のあるサイズと思われるサイズ)で動作し、インセットを考慮しながらJFrameのサイズを適切に変更するバージョンです。

public void componentResized(ComponentEvent e) { 
    if ((panel.getWidth() % SIZE != 0) || (panel.getHeight() % SIZE != 0)) { 
     int panelWidth = ((panel.getWidth() + SIZE)/SIZE) * SIZE; 
     int panelHeight = ((panel.getHeight() + SIZE)/SIZE) * SIZE; 
     Insets i = frame.getInsets(); 
     frame.setSize(screenWidth + i.left + i.right, screenHeight + i.top + i.bottom); 
    } 
} 
1

あなたcomponentResized()方法をチェック値はpanelに基づいていますが、あなたはframeのサイズを設定します。あなたの方法でframepanelへの参照を変更してみてください:

public void componentResized(ComponentEvent e) { 
    if ((frame.getWidth() % SIZE != 0) || (frame.getHeight() % SIZE != 0)) { 
    int screenWidth = ((frame.getWidth() + SIZE)/SIZE) * SIZE; 
    int screenHeight = ((frame.getHeight() + SIZE)/SIZE) * SIZE; 
    frame.setSize(screenWidth, screenHeight); 
    } 
} 
関連する問題