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의 위치 정리>