-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstaff_playerSearchPosition.java
More file actions
158 lines (133 loc) · 4.83 KB
/
staff_playerSearchPosition.java
File metadata and controls
158 lines (133 loc) · 4.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
package DB2025Team09;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.awt.event.ActionEvent;
import javax.swing.JLabel;
import java.awt.Font;
import javax.swing.SwingConstants;
import javax.swing.JTextField;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
//포지션 기준으로 팀 내 선수를 검색하는 UI 클래스입니다.
public class staff_playerSearchPosition extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel contentPane;
private JTextField textField;//포지션 입력 필드입니다.
private JTable table;// 결과 출력 테이블입니다.
private int idTeam;//현재 로그인한 스태프의 팀 ID입니다.
//애플리케이션 실행용 main 메서드입니다.
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
staff_playerSearchPosition frame = new staff_playerSearchPosition(1);
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
//생성자 : 팀 ID를 받아 포지션 검색 UI를 구성합니다.
public staff_playerSearchPosition(int idTeam) {
this.idTeam = idTeam;
//기본 프레임 설정합니다.
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
//패널 생성 및 레이아웃 설정합니다.
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
//뒤로가기 버튼입니다.
JButton btnNewButton = new JButton("Back");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
new staff_playerSearchTypes(idTeam).setVisible(true); dispose();
}
});
btnNewButton.setBounds(6, 6, 117, 29);
contentPane.add(btnNewButton);
//타이틀입니다.
JLabel lblNewLabel = new JLabel("포지션에 따른 선수 검색");
lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
lblNewLabel.setFont(new Font("Lucida Grande", Font.BOLD, 18));
lblNewLabel.setBounds(6, 39, 438, 29);
contentPane.add(lblNewLabel);
//포지션 입력 필드입니다.
textField = new JTextField();
textField.setBounds(57, 80, 305, 26);
contentPane.add(textField);
textField.setColumns(10);
//검색 버튼입니다.
JButton btnNewButton_1 = new JButton("검색");
btnNewButton_1.setBounds(362, 80, 56, 29);
contentPane.add(btnNewButton_1);
//검색 버튼 클릭 이벤트입니다.
btnNewButton_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
String positionInput = textField.getText().trim(); // 포지션을 입력받는다.
//테이블 모델 초기화를 합니다.
DefaultTableModel model = (DefaultTableModel) table.getModel();
model.setRowCount(0); // 초기화
// SQL 쿼리를 구성합니다.
String query = "SELECT idPlayer, playerName, performance, position, birthday, ableToPlay, playerAction " +
"FROM DB2025_Player WHERE idTeam = ? ";
//포지션이 입력되었을 경우 WHERE 절에 조건 추가합니다.
boolean hasPosition = !positionInput.isEmpty();
if (hasPosition) {
query += " AND position = ?";
}
//DB 연결 및 쿼리 실행합니다.
try (Connection conn = DBUtil.getConnection();
PreparedStatement pstmt = conn.prepareStatement(query)) {
pstmt.setInt(1, idTeam);
pstmt.setString(2, textField.getText().trim());
if (hasPosition) {
pstmt.setString(2, positionInput);
}
ResultSet rs = pstmt.executeQuery();
//결과 테이블에 추가합니다.
while (rs.next()) {
Object[] row = {
rs.getInt("idPlayer"),
rs.getString("playerName"),
rs.getInt("performance"),
rs.getString("position"),
rs.getDate("birthday"),
rs.getInt("ableToPlay") == 1 ? "가능" : "불가능",
rs.getString("playerAction")
};
model.addRow(row);
}
}
} catch (Exception ex) {
ex.printStackTrace();//예외 출력합니다.
}
}
});
//테이블 스크롤 영역입니다.
JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(6, 118, 438, 148);
contentPane.add(scrollPane);
//선수 목록 출력 테이블입니다.
table = new JTable();
table.setModel(new DefaultTableModel(
new Object[][] {
},
new String[] {
"선수 ID", "이름", "실적", "포지션", "생년월일", "출전 가능 여부", "액션"
}
));
scrollPane.setViewportView(table);
}
}