2016-12-22 1 views
0

내 프로그램에는 세 개의 버튼이 있어야합니다. JPanel에서 BoxLayout을 사용하고 있으며, 화면의 중심으로 이동시킬 수있었습니다. 올바른 크기이고 올바른 가로 위치에 있지만 프레임 위로 이동할 수 있습니다. 이 작업을 수행하려면 어떻게해야합니까?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에 스윙 튜토리얼 섹션을 읽어보십시오.

그러나 당신이 BoxLayout가를 사용하여 작업을 수행하려는 경우 다음 방법을 수직으로 각 구성 요소를 정렬하는 방법이 BoxLayout 말할 필요

나는 JPanel의에서 BoxLayout가 사용하고 있습니다. JButton의 기본값은 사용 가능한 공간의 가운데에 정렬하는 것입니다. 패널의 시작 부분에 "딱딱한 영역을"하드 코딩하지 않는, 또한

jb1.setAlignmentY(0.0f); 

:

당신은 상단에 원하는 경우

다음 각 버튼을 변경해야합니다. 대신 패널의 시작과 끝 부분에 Box.createHorizontalGlue()을 사용하려고합니다. 그런 다음 구성 요소가 프레임 너비가 변경 될 때 조정됩니다.

다시 자습서에는 위의 내용을 설명하는 How to Use BoxLayout 섹션이 있습니다.

-1

button_name.setAlignmentY (TOP_ALIGNMENT)를 사용하십시오.

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

관련 문제