명품자바프로그래밍 chapter11_lab10
실습1| font 설정 프로그램
import java.awt.*;
import javax.swing.*;
import javax.swing.border.Border;
import java.awt.event.*;
public class FontTest extends JFrame{
JRadioButton rbgul,rbdot,rbgung; //폰트 설정하는 JRadioButton
JCheckBox cbBold,cbItalic; //Style 설정하는 JCheckBox
private String [] sizelist = {"5","10","15","20","25","30"}; //사이즈 리스트 고정으로 만듬 임의로
JComboBox<String> sizeCombo = new JComboBox<String>(sizelist); //Size설정하는 콤보박스
JTextField tfText = new JTextField(15); //내용입력하는 텍스트필드
JLabel result = new JLabel(); //결과값 출력하는 부분
int size;
public FontTest() {
setTitle("Font 설정");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new BorderLayout(10,10)); //BorderLayout 사용!
MyListener ml = new MyListener();
JPanel panelLeft = new JPanel(); //왼쪽에
panelLeft.setLayout(new GridLayout(4,1,2,2)); //그리드 레이아웃으로 4행 1열 맞추기
panelLeft.add(new JLabel("Font 설정"));
panelLeft.add(new JLabel("Style 설정"));
panelLeft.add(new JLabel("Size 설정"));
panelLeft.add(new JLabel("Text 내용"));
c.add(panelLeft, BorderLayout.WEST); //서쪽에 보더레이아웃 추가
JPanel panelCenter = new JPanel(); //센터에 들어갈 목록들 4가지 (Font, Style, Size, text)
panelCenter.setLayout(new GridLayout(0,1));
JPanel panelFont = new JPanel(); //1. Font설정
ButtonGroup Font = new ButtonGroup(); //버튼 그룹으로 묶어줘야지 라디오 버튼, 1개만 택할수 있도록 할 수 있음
rbgul = new JRadioButton("굴림");
rbgul.addItemListener(ml);
rbdot = new JRadioButton("돋움", true); //돋움을 스타트 값(세팅값)으로 고정(?)
rbdot.addItemListener(ml);
rbgung = new JRadioButton("궁서");
rbgung.addItemListener(ml);
Font.add(rbgul);Font.add(rbdot);Font.add(rbgung); //버튼그룹에 각 필드들 추가
panelFont.add(rbgul);panelFont.add(rbdot);panelFont.add(rbgung); //Font를 구성하는 패널에 추가
panelCenter.add(panelFont); //위치를 지정해주는 Center 패널에 panelfont 추가
JPanel panelStyle = new JPanel(); //2. Style 설정
cbBold = new JCheckBox("BOLD");
cbBold.addItemListener(ml); //이벤트 추가
cbItalic = new JCheckBox("ITALIC");
cbItalic.addItemListener(ml); //이벤트 추가
panelStyle.add(cbBold); panelStyle.add(cbItalic); //두개의 필드를 panelStyle 패널에 추가
panelCenter.add(panelStyle); //위치를 지정해주는 Center 패널에 추가
JPanel panelsize = new JPanel(); //Size 내용
panelsize.add(sizeCombo); //size관련 내용을 구성하는 패널에 추가
panelCenter.add(sizeCombo); //위치지정해주는 패널에 추가
JPanel panelText = new JPanel(); //Text 내용
panelText.add(tfText); //text관련 내용을 구성하는 패널에 추가
panelCenter.add(panelText); //위치지정해주는 패널에 추가
c.add(panelCenter, BorderLayout.CENTER); //Center에 들어가는 panelCenter를 Center에 추가
//size에 대한 이벤트 --> Font.PLAIN 이 오류가 떠서 따로 이벤트 클래스 작성
sizeCombo.addActionListener(new MyActionListener());
tfText.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
result.setText(tfText.getText()); //사용자가 입력한 문자열로 setText
}
});
JPanel panelBottom = new JPanel(); //출력 결과를 보여주는 패널
Border resultBorder = BorderFactory.createTitledBorder("Font 설정 결과"); //테두리 설정
Border resultBorderLine = BorderFactory.createLineBorder(Color.CYAN); //테두리 색 설정
panelBottom.setBorder(resultBorder); //테두리
panelBottom.add(result);
c.add(panelBottom, BorderLayout.SOUTH); //아래쪽에 추가
setSize(300,300);
setVisible(true);
}
class MyActionListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
JComboBox<String> cb = (JComboBox<String>)e.getSource();
int index = cb.getSelectedIndex(); //인덱스를 받아와서
String s = sizelist[index]; //해당 리스트의 인덱스 값에 해당하는 String 받아와서
size = Integer.parseInt(s); //입력받은 값을 정수로 변환
result.setFont(new Font("돋움체",Font.PLAIN,size)); //폰트 설정 (돋움을 기본 세팅 값으로 할거기 때문에 임의로 돋움체로 설정)
result.setText(tfText.getText()); //결과 텍스트 변경
}
}
class MyListener implements ItemListener{
@Override
public void itemStateChanged(ItemEvent e) {
int index = sizeCombo.getSelectedIndex();
String s = sizelist[index];
size = Integer.parseInt(s);
if (rbgul.isSelected()) { //굴림체를 골랐을 경우
result.setFont(new Font("굴림체",Font.PLAIN,size)); //해당 내용으로 폰트 설정
result.setText(tfText.getText()); //결과 텍스트 내용 세팅
if (cbBold.isSelected()) { //Bold를 골랐을 경우
result.setFont(new Font("굴림체",Font.BOLD,size)); //해당 내용으로 폰트 설정
result.setText(tfText.getText()); //결과 텍스트 내용 세팅
}
if(cbItalic.isSelected()) { //Italic을 골랐을 경우
result.setFont(new Font("굴림체",Font.ITALIC,size)); //해당 내용으로 폰트 설정
result.setText(tfText.getText()); //결과 텍스트 내용 세팅
}
if(cbItalic.isSelected() && cbBold.isSelected()){ //Bold와 Italic 둘다 골랐을 경우
result.setFont(new Font("굴림체",Font.ITALIC +Font.BOLD,size)); //해당 내용으로 폰트 설정
result.setText(tfText.getText()); //결과 텍스트 내용 세팅
}
}
if (rbdot.isSelected()) { //돋움체를 골랐을 경우
result.setFont(new Font("돋움체",Font.PLAIN,size));//해당 내용으로 폰트 설정
result.setText(tfText.getText()); //결과 텍스트 내용 세팅
if (cbBold.isSelected()) { //Bold를 골랐을 경우
result.setFont(new Font("돋움체",Font.BOLD,size)); //해당 내용으로 폰트 설정
result.setText(tfText.getText()); //결과 텍스트 내용 세팅
}
if(cbItalic.isSelected()) { //Italic을 골랐을 경우
result.setFont(new Font("돋움체",Font.ITALIC,size)); //해당 내용으로 폰트 설정
result.setText(tfText.getText()); //결과 텍스트 내용 세팅
}
if(cbItalic.isSelected() && cbBold.isSelected()){ //Bold와 Italic 둘다 골랐을 경우
result.setFont(new Font("돋움체",Font.ITALIC +Font.BOLD,size)); //해당 내용으로 폰트 설정
result.setText(tfText.getText()); //결과 텍스트 내용 세팅
}
}
if (rbgung.isSelected()) { //궁서체를 골랐을 경우
result.setFont(new Font("궁서체",Font.PLAIN,size)); //해당 내용으로 폰트 설정
result.setText(tfText.getText()); //결과 텍스트 내용 세팅
if (cbBold.isSelected()) { //Bold를 골랐을 경우
result.setFont(new Font("궁서체",Font.BOLD,size)); //해당 내용으로 폰트 설정
result.setText(tfText.getText()); //결과 텍스트 내용 세팅
}
if(cbItalic.isSelected()){ //Italic을 골랐을 경우
result.setFont(new Font("궁서체",Font.ITALIC,size)); //해당 내용으로 폰트 설정
result.setText(tfText.getText()); //결과 텍스트 내용 세팅
}
if(cbItalic.isSelected() && cbBold.isSelected()){ //Bold와 Italic 둘다 골랐을 경우
result.setFont(new Font("궁서체",Font.ITALIC +Font.BOLD,size));//해당 내용으로 폰트 설정
result.setText(tfText.getText()); //결과 텍스트 내용 세팅
}
}
if (cbBold.isSelected()) { //Bold를 골랐을 경우
result.setFont(new Font("돋움체",Font.BOLD,size)); //해당 내용으로 폰트 설정
result.setText(tfText.getText()); //결과 텍스트 내용 세팅
if (rbgul.isSelected()) { //굴림을 골랐을 경우
result.setFont(new Font("굴림체",Font.BOLD,size)); //해당 내용으로 폰트 설정
result.setText(tfText.getText()); //결과 텍스트 내용 세팅
}
if (rbdot.isSelected()) { //돋움을 골랐을 경우
result.setFont(new Font("돋움체",Font.BOLD,size)); //해당 내용으로 폰트 설정
result.setText(tfText.getText()); //결과 텍스트 내용 세팅
}
if (rbgung.isSelected()) { //궁서를 골랐을경우
result.setFont(new Font("궁서체",Font.BOLD,size)); //해당 내용으로 폰트 설정
result.setText(tfText.getText()); //결과 텍스트 내용 세팅
}
}
if (cbItalic.isSelected()) { //Italic을 골랐을 경우
result.setFont(new Font("돋움체",Font.ITALIC,size)); //해당 내용으로 폰트 설정
result.setText(tfText.getText()); //결과 텍스트 내용 세팅
if (rbgul.isSelected()) { //굴림을 골랐을 경우
result.setFont(new Font("굴림체",Font.ITALIC,size)); //해당 내용으로 폰트 설정
result.setText(tfText.getText()); //결과 텍스트 내용 세팅
}
if (rbdot.isSelected()) { //돋움을 골랐을 경우
result.setFont(new Font("돋움체",Font.ITALIC,size)); //해당 내용으로 폰트 설정
result.setText(tfText.getText()); //결과 텍스트 내용 세팅
}
if (rbgung.isSelected()) { //궁서를 골랐을경우
result.setFont(new Font("궁서체",Font.ITALIC,size)); //해당 내용으로 폰트 설정
result.setText(tfText.getText()); //결과 텍스트 내용 세팅
}
}
if(cbItalic.isSelected() && cbBold.isSelected()){ //Bold와 Italic 둘다 골랐을 경우
result.setFont(new Font("돋움체",Font.ITALIC +Font.BOLD,size)); //해당 내용으로 폰트 설정
result.setText(tfText.getText()); //결과 텍스트 내용 세팅
if (rbgul.isSelected()) { //굴림을 골랐을 경우
result.setFont(new Font("굴림체",Font.ITALIC +Font.BOLD,size)); //해당 내용으로 폰트 설정
result.setText(tfText.getText()); //결과 텍스트 내용 세팅
}
if (rbdot.isSelected()) {//돋움을 골랐을 경우
result.setFont(new Font("돋움체",Font.ITALIC +Font.BOLD,size)); //해당 내용으로 폰트 설정
result.setText(tfText.getText()); //결과 텍스트 내용 세팅
}
if (rbgung.isSelected()) { //궁서를 골랐을경우
result.setFont(new Font("궁서체",Font.ITALIC +Font.BOLD,size)); //해당 내용으로 폰트 설정
result.setText(tfText.getText()); //결과 텍스트 내용 세팅
}
}
}
}
public static void main(String[] args) {
new FontTest();
}
}
실습2| 리스트 추가 및 삭제
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.event.*;
import java.util.Vector;
import java.awt.*;
public class ListTest extends JFrame{
JTextField tf = new JTextField(27); //입력
JTextField text = new JTextField(14);; //출력
JButton b_modify,b_delete; //JButton
Vector<String> v = new Vector<String>(); //vector 선언
JList<String>list = new JList<String>(v); //리스트 선언
public ListTest() {
setTitle("리스트 테스트");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new FlowLayout()); //Flow 레이아웃 설정
ListListener ll = new ListListener();
c.add(tf); //List입력받는 곳 --> enter로 추가
tf.addActionListener(new ActionListener() { //JTextfield에 ActionListener 등록
public void actionPerformed(ActionEvent e) {
JTextField t = (JTextField)e.getSource(); //입력받은 내용을
v.add(t.getText()); //벡터에 추가
tf.setText("");//입력하는 창을 초기화
list.setListData(v); //List에 v 추가
}
});
list.setVisibleRowCount(7); //보여지는 행 5줄
list.setFixedCellWidth(300); //너비 300
c.add(new JScrollPane(list)); //패널에 JScrolPane 추가
//이벤트 헨들러 추가
list.addListSelectionListener(ll);
JPanel pb = new JPanel();
pb.add(text); //선택했을 때 보여주는 텍스트창
b_modify = new JButton("수정");
b_delete = new JButton("삭제");
b_modify.addActionListener(new MyActionListener()); //이벤트 추가
b_delete.addActionListener(new MyActionListener()); //이벤트 추가
pb.add(b_modify); pb.add(b_delete); //패널에 추가
c.add(pb); //컨테이너에 추가
setSize(350,250);
setVisible(true);
}
class ListListener implements ListSelectionListener{
@Override
public void valueChanged(ListSelectionEvent e) {
String name = (String)list.getSelectedValue(); //목록에서 선택된 값
int index = list.getSelectedIndex(); //목록에서 선택된 값의 인덱스
if(!list.isSelectionEmpty()) //빈 리스트가 아니라면
text.setText(name); //text에 선택된 목록값 설정.
}
}
class MyActionListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
JButton jb = (JButton)e.getSource(); //버튼으로부터 받은 값
int index = list.getSelectedIndex(); //목록에서 선택된 값의 인덱스
if(jb.getText().equals("수정")) { //수정 버튼을 눌렀을 때
String x = text.getText(); //수정된 텍스트를 x에 저장
if(!list.isSelectionEmpty()) { //빈 리스트에서 작업하는게 아니라면
v.remove(index); //원래 내용을 벡터에서 삭제
v.add(index,x); //수정한 내용을 해당 위치에 새로 추가
text.setText(""); //텍스트창 초기화
list.setListData(v); //리스트에 덮어쓰기
}
}
if (jb.getText().equals("삭제")) { //삭제 버튼을 눌렀을 때
if(index != -1) { //빈 list가 아니라면
v.remove(index); //원래 내용을 벡터에서 삭제
text.setText(""); //텍스트창 초기화
list.setListData(v); //덮어쓰기
}
}
}
}
public static void main(String[] args) {
new ListTest();
}
}
실습3| 슬라이더
import java.awt.*;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.text.BadLocationException;
import java.awt.event.*;
public class SliderTest extends JFrame{
JTextArea ta = new JTextArea(5,20); //textarea선언
JSlider slider; //JSlider 선언
public SliderTest(){
setTitle("TextArea Practice Frame");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new FlowLayout()); //FlowLayout
c.add(ta); //textarea는 먼저 컨테이너에 추가
ta.addKeyListener(new MyKeyListener()); //이벤트 추가
slider = new JSlider(JSlider.HORIZONTAL,0,100,0); //JSLider 생성 0~100까지의 값
slider.setPaintLabels(true); //라벨이 보이게
slider.setPaintTicks(true);
slider.setPaintTrack(true);
slider.setMajorTickSpacing(20); //간격
slider.setMinorTickSpacing(10); //작은 눈금 간격
c.add(slider); //컨테이너에 추가
slider.addChangeListener(new MyChangeListener()); //이벤트 추가
setSize(300,200);
setVisible(true);
}
class MyChangeListener implements ChangeListener{ //사용자가 손잡이를 움직이는 경우
@Override
public void stateChanged(ChangeEvent e) {
JSlider slider = (JSlider)e.getSource();
int x = slider.getValue(); //손잡이 위치값 바뀐거 x에 저장
if(ta.getText().length() > x) { //슬라이더를 움직여서, 글자의 수가 슬라이더의 값보다 크다면
try {
ta.setText(ta.getText(0,x)); //글자 삭제
} catch (BadLocationException e1) {
e1.printStackTrace();
}
}
}
}
class MyKeyListener extends KeyAdapter{ //키보드에서의 이벤트
@Override
public void keyTyped(KeyEvent e) {
JTextArea ta= (JTextArea)e.getSource();
if (ta.getText().length() >100) //100을 못넘어 가도록, 텍스트 값이 100을 넘어가면
try {
ta.setText(ta.getText(0,100)); //글자수 제한
} catch (BadLocationException e1) {
e1.printStackTrace();
}
else { //안넘어 가면
slider.setValue(ta.getText().length()); //슬라이더의 값은 텍스트의 길이만큼
slider.addChangeListener(new MyChangeListener()); //그 이외 이벤트 다시 실행
}
}
}
public static void main(String[] args) {
new SliderTest();
}
}
'Programming > JAVA' 카테고리의 다른 글
스레드와 멀티태스킹, 고급 스윙 컴포넌트 (0) | 2020.12.30 |
---|---|
그래픽 (0) | 2020.12.30 |
자바의 이벤트 처리 (0) | 2020.12.30 |
자바 GUI 기초, AWT와 스윙 (0) | 2020.12.30 |
자바 기말 플젝 코드(미완성) (0) | 2020.12.30 |
댓글