사이즈 조절과 테두리

예숑·2024년 1월 15일
0

JAVA - GUI

목록 보기
6/8
post-thumbnail

⭐️사이즈 조절하기

public class OtherWay extends JFrame {

	private JLabel lblMoney;
	private JLabel lblInterest;
	private JTextField tfMoney;
	private JTextField tfInterest;

	private JButton btnCalc;
	private JTextField tfResult;

	public static final int INPUT_SIZE = 10;

	public static final Dimension LBL_SIZE = new Dimension(130, 18);

	public OtherWay(){
		init();
		setDisplay();
		showFrame();
	}
	private void init(){

		lblMoney = new JLabel("원금을 입력하시오");
		//텍스트 칸의 크기를 조절할 수 있다.
		lblMoney.setPreferredSize(LBL_SIZE);
		lblInterest = new JLabel("이자율을 입력하시오");
		lblInterest.setPreferredSize(LBL_SIZE);

		tfMoney = new JTextField(INPUT_SIZE);
		tfInterest = new JTextField(INPUT_SIZE);

		btnCalc = new JButton("변환");
		//상자와 글자 사이 간격조절
		btnCalc.setMargin(new Insets(5,5,5,5));
		btnCalc.setPreferredSize(new Dimension(55,24));
		
		tfResult = new JTextField(15);
		tfResult.setEditable(false);

	}
	private void setDisplay(){
		JPanel pnlMoney = new JPanel(new FlowLayout(FlowLayout.LEFT));
		pnlMoney.add(lblMoney);
		pnlMoney.add(tfMoney);

		JPanel pnlInterest = new JPanel(new FlowLayout(FlowLayout.LEFT));
		pnlInterest.add(lblInterest);
		pnlInterest.add(tfInterest);


		JPanel pnlNorth = new JPanel(new GridLayout(2,1));
		pnlNorth.add(pnlMoney);
		pnlNorth.add(pnlInterest);

		//시계반대방향으로 입력해준다. 아무것도 안보이는 테두리
		pnlNorth.setBorder(new EmptyBorder(10,10,10,10));

		JPanel pnlCenter = new JPanel();
		pnlCenter.add(btnCalc);

		pnlCenter.setBorder(new EmptyBorder(0,0,30,0));

		JPanel pnlSouth = new JPanel();
		pnlSouth.add(tfResult);

		add(pnlNorth, BorderLayout.NORTH);
		add(pnlCenter, BorderLayout.CENTER);
		add(pnlSouth, BorderLayout.SOUTH);
	}
	private void showFrame(){
		setTitle("이자 계산기");
		pack();
		setLocation(200,200);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setResizable(false);
		setVisible(true);
	}
	public static void main(String[] args) {
		new OtherWay();
	}
}

→ 위 코드에서 사용된 메소드를 하나씩 보도록 하자.

new Dimension(가로, 세로) : 컴포넌트의 크기를 설정할 수 있는 클래스이다.
setPreferredSize( ) : 컴포넌트의 크기를 설정할 수 있는 메소드이다.
Dimension 객체를 매개변수로 받아서 해당 컴포넌트의 선호 크기를 설정한다.

new Insets(상, 좌, 하, 우) : 상, 하, 좌, 우 방향의 여백을 관리할 수 있는 클래스이다.
parameter에 입력 시 시계 반대방향으로 입력한다.
setMargin( ) : 컴포넌트 내용과 테두리 사이의 여백을 관리할 수 있는 메소드이다.
Insets 객체를 매개변수로 받아서 사용한다.

new EmptyBorder(상, 좌, 하, 우) : 아무것도 보이지 않은 테두리로 컴포넌트 주위에 빈 여백을 생성하는 클래스이다.
parameter에 입력 시 시계 반대방향으로 입력한다.
setBorder( ) : 컴포넌트의 테두리를 설정하는 메소드이다.

⭐️테두리 생성하기

public class BorderText extends JFrame {

	private Font font = new Font(Font.DIALOG, Font.BOLD, 25);

	public BorderText(){
		JPanel pnlMain = new JPanel(new GridLayout(0,1,10,10));
		JScrollPane scroll = new JScrollPane(pnlMain);
		
		//텍스트 상자 옆 공간 설정
		Insets insets = new Insets(20,20,20,20);
		pnlMain.setBorder(new EmptyBorder(insets));

		//LineBorder : 테두리를 실선으로 해준다(라인색깔, 선 굵이)
		AbstractBorder border = new LineBorder(Color.BLACK, 2);
		
		pnlMain.add(getLabel("LineBorder", border));

		//TitledBorder: 테두리에 글자가 들어간다
		border = new TitledBorder("this is a title");
		pnlMain.add(getLabel("TitledBorder", border));

		//TitledBorder 테두리 선의 색과 굵기 바꾸기
		LineBorder lBorder = new LineBorder(Color.GRAY, 1);
		border = new TitledBorder(lBorder, "TitledBorder + LineBorder");
		pnlMain.add(getLabel("TitledBorder", border));

	
		TitledBorder tBorder = new TitledBorder("right");
		//TitledBorder의 글자 위치 변경(기본이 left, center, right);
		tBorder.setTitleJustification(TitledBorder.RIGHT);
		border = tBorder;
		pnlMain.add(getLabel("TitledBorder", border));

		tBorder = new TitledBorder("TEXT");
		//타이틀 폰트 설정
		tBorder.setTitleFont(new Font(Font.DIALOG, Font.BOLD | Font.ITALIC, 15));

		//타이틀 폰트 색
		tBorder.setTitleColor(Color.RED);
		pnlMain.add(getLabel("TitledBorder", tBorder));

		TitledBorder innerBorder = new TitledBorder(new LineBorder(Color.BLUE, 1), "inner-border");
		//innerBorder 의 위치를 설정(Bottom, Top)
		innerBorder.setTitlePosition(TitledBorder.BOTTOM);

		//TitledBorder안에 TitledBorder 들어가있다.
		tBorder = new TitledBorder(innerBorder,"TOP");

		pnlMain.add(getLabel("TitledBorder", tBorder));

		tBorder = new TitledBorder("CENTER-BOTTOM");
		//타이틀의 횡 위치 설정
		tBorder.setTitleJustification(TitledBorder.CENTER);
		//타이틀의 종 위치 설정
		tBorder.setTitlePosition(TitledBorder.BOTTOM);
		pnlMain.add(getLabel("TitledBorder", tBorder));

		tBorder = new TitledBorder("ABOVE-BOTTOM");
		tBorder.setTitlePosition(TitledBorder.ABOVE_BOTTOM);
		pnlMain.add(getLabel("TitledBorder", tBorder));

		//ABOVE_TOP : 선위에 글자가 있음 / ABOVE_BOTTOM : 테두리 아래선에서 테두리 안에 존재
		tBorder = new TitledBorder("ABOVE-TOP");
		tBorder.setTitlePosition(TitledBorder.ABOVE_TOP);
		pnlMain.add(getLabel("TitledBorder", tBorder));

		//BELOW_TOP : 테두리 위선에서 테두리 안에 존재 / BELOW_BOTTOM : 선 아래에 글자가 있음
		tBorder = new TitledBorder("BELOW-TOP");
		tBorder.setTitlePosition(TitledBorder.BELOW_TOP);
		pnlMain.add(getLabel("TitledBorder", tBorder));

		tBorder = new TitledBorder("BELOW-BOTTOM");
		tBorder.setTitlePosition(TitledBorder.BELOW_BOTTOM);
		pnlMain.add(getLabel("TitledBorder", tBorder));

		border = new EtchedBorder(EtchedBorder.RAISED);
		pnlMain.add(getLabel("EtchedBorder-RAISED", border));

		border = new EtchedBorder(EtchedBorder.LOWERED);
		pnlMain.add(getLabel("EtchedBorder-LOWERED", border));

		//BevelBorder : 그림자가 생겨 시각적으로 들어가보이는지 나와보이는지 결정
		//RAISED : 선 자체가 양각 / LOWERED : 선 자체가 음각
		border = new BevelBorder(BevelBorder.RAISED);
		pnlMain.add(getLabel("BevelBorder-RAISED", border));
	
		border = new BevelBorder(BevelBorder.LOWERED);
		pnlMain.add(getLabel("BevelBorder-LOWERED", border));

		//총 18개의 위치 설정 가능 

		add(scroll, BorderLayout.CENTER);
		//세로스크롤바를 가져온다
		JScrollBar bar = scroll.getVerticalScrollBar();
		//스크롤바의 움직이는 단위를 설정(클수록 빨라짐)
		bar.setUnitIncrement(5);

		setTitle("Border Test");
		setSize(400,300);
		setLocation(100,0);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setVisible(true);
	}
	//AbstractBorder : Border 의 조상
	private JLabel getLabel(String text, AbstractBorder border){
		JLabel lbl = new JLabel(text);
		lbl.setFont(font);
		lbl.setBorder(border);
		return lbl;
	}

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


→ 위 코드의 주석과 결과 사진을 보고 이해하면 좋다.

<Border의 위치 정리>

0개의 댓글