자바 다른 클래스 멤버 변수 불러오기
조회수 3340회
안녕하세요 영어단어장을 만들어 보려고 하는 초보 자바 개발자입니다. 같은 패키지 내의 클래스에서 선언한 변수를 새로 만든 다른 클래스에서 불러 쓰려고 하는데 어떻게 해야할 지 모르겠습니다. v1이나 v2를 불러서 쓰고 싶습니다. (영어 단어장에 입력한 영어단어를 랜덤으로 불러와 문제를 내려고 하는 게 목적)
더불어 스크롤 팬이 등록이 안되는 이유도 궁급합니다.
전체코드입니다. import javax.swing.; import java.awt.; import java.awt.event.; import java.util.;
public class Main extends JFrame { private JTextField tf = new JTextField(15); // 영어 단어를 입력 private JTextField kf = new JTextField(15); // 한글 단어를 입력 public Vector v = new Vector(); // 영단어 입력하여 저장 public JList englist = new JList(v); // 영단어 출력리스트 public Vector v2 = new Vector(); // 영단어 입력하여 저장 public JList korlist = new JList(v2); // 영단어 출력리스트
public Main() {
setTitle("14118874 김태준 영단어장"); // 프레임 이름
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 프레임 윈도우를 닫으면 프로그램을 종료하도록 설정
Container c = getContentPane(); // 컨텐트 팬을 알아냄
c.setLayout(null); // 배치관리자 제거
createMenu(); // 메뉴를 생성하는 함수 호출
// 컴포넌트 절대 위치와 절대 크기 지정
JLabel input = new JLabel("영단어를 입력 <Enter>키 혹은 <입력 버튼> 클릭"); // 라벨 생성
input.setSize(300,50); // 절대 크기
input.setLocation(10, 0); // 절대 위치
c.add(input); // 콘테이너에 추가
JLabel eng = new JLabel("영단어"); // 라벨 생성
eng.setSize(100,50); // 절대 크기
eng.setLocation(10, 50); // 절대 위치
c.add(eng); // 콘테이너에 추가
tf.setSize(150,30); // 영단어 입력 필드 크기 지정
tf.setLocation(50,60); // 영단어 입력 필드 위치 지정
c.add(tf); // 텍스트 필드 부착
JButton inside = new JButton("입력"); // 영단어 부분 입력버튼 생성
inside.setSize(80,25); // 크기 지정
inside.setLocation(205, 62); // 위치 지정
c.add(inside); // 버튼 부착
JLabel kor = new JLabel("뜻"); // 라벨 생성
kor.setSize(100,50); // 절대 크기
kor.setLocation(30, 100); // 절대 위치
c.add(kor); // 콘테이너에 추가
kf.setSize(150,30); // 영단어 입력 필드 크기 지정
kf.setLocation(50,110); // 영단어 입력 필드 위치 지정
c.add(kf); // 텍스트 필드 부착
JButton insidebutton = new JButton("입력"); // 영단어 부분 입력버튼 생성
insidebutton.setSize(80,25); // 크기 지정
insidebutton.setLocation(205, 112); // 위치 지정
c.add(insidebutton); // 버튼 부착
JLabel english = new JLabel("<영단어>"); // 라벨 생성
english.setSize(100,50); // 절대 크기
english.setLocation(55, 150); // 절대 위치
c.add(english); // 콘테이너에 추가
// 영어 창 설정 사이즈 135,270/위치 10,150
englist.setVisibleRowCount(15); // list에 표시할 항목 수
englist.setFixedCellWidth(135); // list의 너비
englist.setSize(135, 230);
englist.setLocation(10, 190);
**add(new JScrollPane(englist)); // 이부분이 안됨
c.add(englist); // 콘테이너에 등록**
JLabel korea = new JLabel("<뜻>"); // 라벨 생성
korea.setSize(100,50); // 절대 크기
korea.setLocation(210, 150); // 절대 위치
c.add(korea); // 콘테이너에 추가
// 한글뜻 창 설정 사이즈 135,270/위치 150,150
korlist.setVisibleRowCount(15); // list에 표시할 항목 수
korlist.setFixedCellWidth(135); // list의 너비
korlist.setSize(135, 230);
korlist.setLocation(150, 190);
c.add(korlist); // 콘테이너에 등록
JLabel copy = new JLabel("Copyright 2019. Kim TaeJun. All rights reserved"); // 저작권 라벨 추가
copy.setSize(300,50); // 크기 설정
copy.setLocation(15,405); // 위치 설정
copy.setForeground(Color.BLUE); // 라벨의 색상 지정
c.add(copy);
// 영어 입력창에서 Enter키 입력시 발생하는 이벤트 리스너 등록
tf.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JTextField t = (JTextField)e.getSource(); // 텍스트 필드 값을 얻음
v.add(t.getText()); // 벡터 v에 입력된 이름 추가
t.setText(""); // 입력한 뒤 텍스트를 비움
englist.setListData(v); // 영어 단어쪽에 등록 후 표시
}
});
// inside 버튼을 누르면 일어나는 이벤트 리스너 등록
inside.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String ss = tf.getText(); // 영어 단어를 입력한 곳에서 값을 얻어 String 값에 저장
v.add(ss); // 벡터 v에 입력된 이름 추가
tf.setText(""); // 입력한 뒤 텍스트를 비움
englist.setListData(v); // 영어단어 쪽에 표시
}
});
// 한글 입력창에서 Enter키 입력시 발생하는 이벤트 리스너 등록
kf.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JTextField t = (JTextField)e.getSource(); // 텍스트 필드 값을 얻음
v2.add(t.getText()); // 벡터 v2에 입력된 이름 추가
t.setText(""); // 입력한 뒤 텍스트를 비움
korlist.setListData(v2); // 한글 단어쪽에 표시
}
});
// insidebutton 버튼을 누르면 일어나는 이벤트 리스너 등록
insidebutton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String ss2 = kf.getText(); // 한글을 입력한 곳에서 값을 얻어 String 값에 저장
v2.add(ss2); // 벡터 v에 입력된 이름 추가
kf.setText(""); // 입력한 뒤 텍스트를 비움
korlist.setListData(v2); // 영어단어 쪽에 표시
}
});
setSize(300,500); // 프레임 크기 설정
setVisible(true); // 화면에 프레임 출력
setResizable(false); // 화면 프레임 고정(변경 불가) = 윈도우 최대화 버튼 비활성화 및 크기 변경 불가
}
private void createMenu() { // 메뉴 생성 함수
JMenuBar mb = new JMenuBar(); // 메뉴바 생성
JMenu menu = new JMenu("메뉴");
mb.add(menu);
JMenuItem mItem = new JMenuItem("테스트"); // 메뉴 아이템 생성
menu.add(mItem); // 아이템 메뉴에 붙이기
mItem.addActionListener(new MyAction()); // 테스트를 누르면 액션 리스너가 생성됨
setJMenuBar(mb); // 메뉴바 보이게 함
}
class MyAction implements ActionListener { // 액션 리스너구현
public void actionPerformed(ActionEvent e) {
new EnglishTest(); // 영단어 테스트 호출
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new Main();
}
}
이 새로운 클래스에서 사용하려고 합니다.
import javax.swing.; import java.awt.; import java.awt.event.; import java.util.math.; import java.Main.*;
public class EnglishTest extends JFrame { public EnglishTest() { setTitle("영단어 테스트"); // 프레임 이름 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 프레임 윈도우를 닫으면 프로그램을 종료하도록 설정 Container c = getContentPane(); // 컨텐트 팬을 알아냄 c.setLayout(null); // 배치관리자 제거 setSize(300,500); // 프레임 크기 설정 setVisible(true); // 화면에 프레임 출력 setResizable(false); // 화면 프레임 고정(변경 불가) = 윈도우 최대화 버튼 비활성화 및 크기 변경 불가
JLabel test = new JLabel("영단어 테스트입니다.");
test.setSize(150,50);
test.setLocation(80,5);
c.add(test);
JLabel a1 = new JLabel("<영어단어>");
a1.setSize(100,100);
a1.setLocation(110,15);
c.add(a1);
JList<String> window = new JList<String>();
window.setSize(300,100);
window.setLocation(50, 85);
c.add(window);
v2.get(1); // ??
}
}
댓글 입력