2016-12-22 9 views
0

私のプログラムでは、3つのボタンが必要です。私はJPanelBoxLayoutを使用しています。私はそれらを画面の死んだ中心に移動することができました。それらは正しいサイズで正しい水平位置にありますが、フレームの上に移動したいと思います。これを行うにはどうすればよいですか?Java:BoxLayoutを使用したJPanelでJButtonを垂直方向に移動

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import java.awt.Dimension; 
import java.awt.Toolkit; 
import javax.swing.Box; 
import javax.swing.BoxLayout; 
import javax.swing.JButton; 

public class Library extends JFrame { 

    private JFrame jf1; 
    private JPanel jp1; 
    private JButton jb1; 
    private JButton jb2; 
    private JButton jb3; 

    public Library() { 
     jf1 = new JFrame("Library"); 
     jf1.setVisible(true); 
     jf1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     jf1.setSize(1080, 900); 

     Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); 
     jf1.setLocation(dim.width/2-jf1.getSize().width/2, dim.height/2-jf1.getSize().height/2); 

     jp1 = (JPanel) jf1.getContentPane(); 
     jp1.setLayout(new BoxLayout(jp1, BoxLayout.LINE_AXIS)); 

     jb1 = new JButton("Genre"); 
     jb1.setMinimumSize(new Dimension(140, 60)); 
     jb1.setPreferredSize(new Dimension(150, 60)); 
     jb1.setMaximumSize(new Dimension(150, 60)); 
     jb2 = new JButton("Author"); 
     jb2.setMinimumSize(new Dimension(140, 60)); 
     jb2.setPreferredSize(new Dimension(150, 60)); 
     jb2.setMaximumSize(new Dimension(150, 60)); 
     jb3 = new JButton("Title"); 
     jb3.setMinimumSize(new Dimension(140, 60)); 
     jb3.setPreferredSize(new Dimension(150, 60)); 
     jb3.setMaximumSize(new Dimension(150, 60)); 

     jp1.add(Box.createRigidArea(new Dimension(300, 0))); 
     jp1.add(jb1); 
     jp1.add(Box.createRigidArea(new Dimension(20,0))); 
     jp1.add(jb2); 
     jp1.add(Box.createRigidArea(new Dimension(20,0))); 
     jp1.add(jb3);  
    } 

    public static void main(String[] args) { 
     Library shoe = new Library(); 
    } 
} 
+0

何あなたの前の質問について:http://stackoverflow.com/questions/40701435/java-moving-second-rectangle-using-different-keysキーストーンと一緒に?あなたが助けを受けるときに、答えを "受け入れる"ことを忘れないでください。 – camickr

答えて

3

が、私は私のフレームの先頭にそれらを移動したいです。

デフォルトでは、フレームのコンテンツペインはBorderLayoutなので、これをレイアウトとして保持し、ボタンのパネルを作成してこのパネルをフレームの上部に追加します。

JPanel panel = new JPanel(new FlowLayout()); 
panel.add(button1) 
... 
add(panel, BorderLayout.PAGE_START); 

詳細と動作例については、How to Use BorderLayoutのSwingチュートリアルのセクションを参照してください。

私はあなたがBoxLayoutを使用して、それをしたいならば、あなたは垂直方向に各コンポーネントを配置する方法をBoxLayoutを伝える必要がありしかし、

をJPanelの中​​BoxLayoutを使用しています。 JButtonのデフォルト値は、使用可能なスペースの中央に配置することです。

あなたが一番上にそれを望むなら、あなたは、それぞれのボタンを変更する必要があります。

jb1.setAlignmentY(0.0f); 

また、パネルの開始時に「剛性の領域を」ハードコーディングしないでください。代わりに、パネルの最初と最後にBox.createHorizontalGlue()を使用します。次に、フレームの幅が変更されると、コンポーネントが調整されます。

ここでも、チュートリアルでは上記を説明するセクションHow to Use BoxLayoutがあります。

-1

ボタン名を使用します.setAlignmentY(TOP_ALIGNMENT); //すべての3つのボタン、このようにあなたのコードの変更のために:

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import java.awt.Dimension; 
import java.awt.Toolkit; 
import javax.swing.Box; 
import javax.swing.BoxLayout; 
import javax.swing.JButton; 

public class Library extends JFrame { 

    private JFrame jf1; 
    private JPanel jp1; 
    private JButton jb1; 
    private JButton jb2; 
    private JButton jb3; 

    public Library() { 
     jf1 = new JFrame("Library"); 
     jf1.setVisible(true); 
     jf1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     jf1.setSize(1080, 900); 

     Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); 
     jf1.setLocation(dim.width/2-jf1.getSize().width/2, dim.height/2-jf1.getSize().height/2); 

     jp1 = (JPanel) jf1.getContentPane(); 
     jp1.setLayout(new BoxLayout(jp1, BoxLayout.LINE_AXIS)); 

     jb1 = new JButton("Genre"); 
     jb1.setMinimumSize(new Dimension(140, 60)); 
     jb1.setPreferredSize(new Dimension(150, 60)); 
     jb1.setMaximumSize(new Dimension(150, 60)); 
     jb1.setAlignmentY(TOP_ALIGNMENT); 
     jb2 = new JButton("Author"); 
     jb2.setMinimumSize(new Dimension(140, 60)); 
     jb2.setPreferredSize(new Dimension(150, 60)); 
     jb2.setMaximumSize(new Dimension(150, 60)); 
     jb2.setAlignmentY(TOP_ALIGNMENT); 
     jb3 = new JButton("Title"); 
     jb3.setMinimumSize(new Dimension(140, 60)); 
     jb3.setPreferredSize(new Dimension(150, 60)); 
     jb3.setMaximumSize(new Dimension(150, 60)); 
     jb3.setAlignmentY(TOP_ALIGNMENT); 

     jp1.add(Box.createRigidArea(new Dimension(300, 0))); 
     jp1.add(jb1); 
     jp1.add(Box.createRigidArea(new Dimension(20,0))); 
     jp1.add(jb2); 
     jp1.add(Box.createRigidArea(new Dimension(20,0))); 
     jp1.add(jb3);  
    } 

    public static void main(String[] args) { 
     Library shoe = new Library(); 
    } 
+0

(1-)はい、この提案は20分早く与えられました。提案を繰り返す必要はありません。 – camickr

関連する問題