Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 94 additions & 0 deletions Announcement.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
package DBD_env_unification;

import java.sql.Timestamp;

public class Announcement {
private int textNumber;
private String title;
private String managerName;
private String type;
private Timestamp createDate;
private int views;
private String content;

// 생성자
public Announcement(int textNumber, String title, String managerName, String type,
Timestamp createDate, int views, String content) {
this.textNumber = textNumber;
this.title = title;
this.managerName = managerName;
this.type = type;
this.createDate = createDate;
this.views = views;
this.content = content;
}

// Getter 및 Setter
public int getTextNumber() {
return textNumber;
}

public void setTextNumber(int textNumber) {
this.textNumber = textNumber;
}

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

public String getManagerName() {
return managerName;
}

public void setManagerName(String managerName) {
this.managerName = managerName;
}

public String getType() {
return type;
}

public void setType(String type) {
this.type = type;
}

public Timestamp getCreateDate() {
return createDate;
}

public void setCreateDate(Timestamp createDate) {
this.createDate = createDate;
}

public int getViews() {
return views;
}

public void setViews(int views) {
this.views = views;
}

public String getContent() {
return content;
}

public void setContent(String content) {
this.content = content;
}

// 출력 메서드 (옵션)
public void printAnnouncement() {
System.out.println("Text Number: " + textNumber);
System.out.println("Title: " + title);
System.out.println("Manager Name: " + managerName);
System.out.println("Type: " + type);
System.out.println("Create Date: " + createDate);
System.out.println("Views: " + views);
System.out.println("Content: " + content);
System.out.println("---------------------------------------------------");
}
}
106 changes: 106 additions & 0 deletions AnnouncementListFrame.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
package DBD_env_unification;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;

public class AnnouncementListFrame extends JFrame {
private ArrayList<Announcement> announcements; // List에서 ArrayList로 변경
private MainPageFrame mainPageFrame;

public AnnouncementListFrame(MainPageFrame mainPageFrame, ArrayList<Announcement> announcements) {
super("공지사항 목록");
this.mainPageFrame = mainPageFrame;
this.announcements = announcements;

setLayout(new BorderLayout());

// 제목 라벨 설정
JLabel titleLabel = new JLabel("공지사항 목록", SwingConstants.CENTER);
titleLabel.setFont(new Font("맑은 고딕", Font.BOLD, 24));
titleLabel.setForeground(Color.BLACK);
add(titleLabel, BorderLayout.NORTH);

// 공지사항 목록을 표시할 JList
DefaultListModel<String> listModel = new DefaultListModel<>();
for (Announcement announcement : announcements) {
listModel.addElement(announcement.getTitle()); // 제목만 추가
}

JList<String> announcementList = new JList<>(listModel);
announcementList.setFont(new Font("맑은 고딕", Font.PLAIN, 16));
announcementList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
JScrollPane scrollPane = new JScrollPane(announcementList);
add(scrollPane, BorderLayout.CENTER);

// 창이 닫힐 때 메인 페이지 프레임을 다시 보이게 설정
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent windowEvent) {
mainPageFrame.setVisible(true); // MainPageFrame을 다시 보이게 함
}
});

// "뒤로 가기" 버튼 추가
JButton backButton = new JButton("뒤로 가기");
backButton.setFont(new Font("맑은 고딕", Font.PLAIN, 16));
backButton.addActionListener(e -> {
// 뒤로 가기 버튼 클릭 시, MainPageFrame을 다시 보이게 하고 현재 프레임을 닫기
mainPageFrame.setVisible(true);
dispose();
});
add(backButton, BorderLayout.SOUTH);

// 공지사항 선택 시 본문을 보여주는 액션
announcementList.addListSelectionListener(e -> {
if (!e.getValueIsAdjusting()) {
int selectedIndex = announcementList.getSelectedIndex();
if (selectedIndex != -1) {
Announcement selectedAnnouncement = announcements.get(selectedIndex);
showAnnouncementDetails(selectedAnnouncement);
}
}
});



// 프레임 설정
setSize(500, 400);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setLocationRelativeTo(null); // 화면 가운데에 표시
setVisible(true);
}

// 선택한 공지사항의 본문을 보여주는 메서드
private void showAnnouncementDetails(Announcement announcement) {
JFrame detailFrame = new JFrame("공지사항 상세보기");
detailFrame.setLayout(new BorderLayout());

// 본문을 보여주는 JTextArea
JTextArea contentArea = new JTextArea(announcement.getContent());
contentArea.setFont(new Font("맑은 고딕", Font.PLAIN, 14));
contentArea.setLineWrap(true);
contentArea.setWrapStyleWord(true);
contentArea.setCaretPosition(0);
contentArea.setEditable(false);

JScrollPane scrollPane = new JScrollPane(contentArea);
detailFrame.add(scrollPane, BorderLayout.CENTER);

// 공지사항 상세정보 패널
JPanel infoPanel = new JPanel();
infoPanel.setLayout(new GridLayout(4, 1));

// 공지사항 정보 출력
infoPanel.add(new JLabel("작성자: " + announcement.getManagerName()));
infoPanel.add(new JLabel("작성일: " + announcement.getCreateDate().toString()));
infoPanel.add(new JLabel("조회수: " + announcement.getViews()));

detailFrame.add(infoPanel, BorderLayout.NORTH);

// 상세보기 창 설정
detailFrame.setSize(600, 400);
detailFrame.setLocationRelativeTo(null); // 화면 가운데에 표시
detailFrame.setVisible(true);
}
}
156 changes: 156 additions & 0 deletions DatabaseAuthInformation.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
package DBD_env_unification;

import java.io.*;

/*
* Written by Seonghun Lee on 6. Sep. 2020.
*
* This class parses the mysql database authentication file and stores the DB connection information.
* Setting the class member variables is only permitted in the parsing stage (parse_auth_info).
* */
public class DatabaseAuthInformation {
private String host;
private String port;
private String database_name;
private String username;
private String password;

/*
* Class Constructor with no argument.
* It initializes all member values as null.
* */
public DatabaseAuthInformation() {
this.host = null;
this.port = null;
this.database_name = null;
this.username = null;
this.password = null;
}

/*
* Parsing function based on given DB authentication file.
* This function check the file verification first, and then parse the given file.
*
* Parameter
* - auth_filepath: String
* Path of the local DB authentication file.
*
* Return
* - Boolean
* Return true for successful data parsing, and false otherwise.
* Wrong file path or any missing on DB connection information is also regarded as fail.
* */
public boolean parse_auth_info(String auth_filepath) {
String host = null;
String port = null;
String database_name = null;
String username = null;
String password = null;

/* Parse */
try {
File file = new File(auth_filepath);
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
while ((line = br.readLine()) != null) {
if(line.length() == 0) continue;
if(line.charAt(0) == '#') continue;

int line_length = line.length();
if(line.substring(0, 4).equals("host")) host = line.substring(5, line_length);
else if(line.substring(0, 4).equals("port")) port = line.substring(5, line_length);
else if(line.substring(0, 8).equals("database")) database_name = line.substring(9, line_length);
else if(line.substring(0, 8).equals("username")) username = line.substring(9, line_length);
else if(line.substring(0, 8).equals("password")) password = line.substring(9, line_length);
}
} catch (IOException e) {
e.printStackTrace();
return false;
}

/* Verification */
boolean flag_verified = true;
if(host == null) flag_verified = false;
if(port == null) flag_verified = false;
if(database_name == null) flag_verified = false;
if(username == null) flag_verified = false;
if(password == null) flag_verified = false;
if(!flag_verified) {
return false;
}

/* Apply parsed values */
this.host = host;
this.port = port;
this.database_name = database_name;
this.username = username;
this.password = password;

return true;
}

/*
* Getter for host member variable.
*
* Return
* - String
* Return the host member variable.
* */
public String getHost() {
return host;
}

/*
* Getter for port member variable.
*
* Return
* - String
* Return the port member variable.
* */
public String getPort() {
return port;
}

/*
* Getter for database name member variable.
*
* Return
* - String
* Return the database name member variable.
* */
public String getDatabase_name() {
return database_name;
}

/*
* Getter for username member variable.
*
* Return
* - String
* Return the username member variable.
* */
public String getUsername() {
return username;
}

/*
* Getter for password member variable.
*
* Return
* - String
* Return the password member variable.
* */
public String getPassword() {
return password;
}

/*
* Print all member variable for debug purpose.
*
* Return
* - None
* */
public void debug_print() {
System.out.println("Host: " + this.host + ":" + this.port + "/" + this.database_name + "@" + this.username + ":" + this.password);
}
}
Loading