final예약어 사용예에 대한 조언을 구합니다.
푸르
자바 배우기 시작한지 얼마 안되는 초보입니다. 요즈음 swing 파트를 공부하고 있는데
예제 소스를 분석하면서 이해가 안되는 부분이 있어서 질문 올립니다.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ChartTest extends JFrame{
public ChartTest(){
JFrame f = new JFrame(ChartTest Test);
JToolBar tbar = new JToolBar(etc);
JButton bt1 = new JButton(Options);
JButton bt2 = new JButton(Settings);
JButton bt3 = new JButton(Preferences);
p.add(bt1);
p.add(bt2);
p.add(bt3);
tbar.add(p);
f.add(North,tbar);
final CardLayout layout = new CardLayout();
final JPanel cards = new JPanel(layout);
cards.add(new CardPanel(Options),Options);
cards.add(new CardPanel(Settings),Settings);
cards.add(new CardPanel(Preferences),Preferences);
f.add(cards, Center);
final ActionListener al = new ActionListener(){
public void actionPerformed(ActionEvent ev){
String cmd = ev.getActionCommand();
layout.show(cards,cmd);
}
};
for(int i=0; i p.getComponentCount();i++)
((JButton) p.getComponent(i)).addActionListener(al);
f.setSize(500,300);
f.setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args)
{
new ChartTest();
}
}
class CardPanel extends JPanel{
CardPanel(String name){
setLayout(new BorderLayout());
add(new JLabel(CardPanel: + name, JLabel.CENTER),Center);
JPanel p = new JPanel();
add(p, South);
p.setBackground(Color.yellow);
p.add(new JButton(OK));
}
}
CardLayout을 이용해 페널간 전환을 해보는 예제인데 여기서 final 예약을 왜 사용해야하는지 이해를 못하겠네요
final 예약어를 빼고 컴파일하면 아래와 같은 에러가 납니다.
ChartTest.java:36: local variable cards is accessed from within inner class;
needs to be declared finallayout.show(cards,cmd);
내부클래스내에 지역변수가 사용되었다는 말인것 같은데 내부클래스에서는 외부클래스의 멤버들을 사용할 수
있는것 아닙니까?
그리고 변수명앞에 final 을 붙이면 상수가 되는걸로 아는데 여기서 그럼 변수를 넘겨주면 안되고
상수를 넘겨주면 실행이 되는 이유는 무엇입니까?
책으로 볼땐 상수, 변수, final 예약어 별로 어려운게 없다고 생각했었는데 실제 적용해보니
감이 안오네요
-
가온
답변 감사합니다.
-
레이
ChartTest 클래스를 정의하시다 ActionListener 클래스를 선언하셨네요...
그리고 ChartTest 클래스의 메소드에서 정의한 변수를 ActionListener에 사용하셨구요...
때문에 final이란 키워드를 통해 상수화시킴으로서 사용이 가능하게 되는것입니다~ ^^
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2696504 | 플래시 위에 div 올리기 (5) | 큰꽃늘 | 2025-05-30 |
2696458 | 제가 만든 소스 한번 봐주시고 수정 할 꺼 있으면 말해주세요. (실행은 되지만 깜빡거리네요) | 이플 | 2025-05-29 |
2696434 | 퍼센트 레이아웃 질문인데요.. | 나츠 | 2025-05-29 |
2696372 | %=open_main%, %=open_sub% 가 뭘까요? (9) | 행복녀 | 2025-05-29 |
2696347 | 콘솔 프로그램 질문 | 상큼한캔디 | 2025-05-28 |
2696320 | c언어 scanf 함수를 이요해 문자열 입력 받을 시 질문 있습니다. | 슬아라 | 2025-05-28 |
2696292 | 익스플로러9이상에서만 이상한 보더가 보이는데 삭제할수 있나요? | 망고 | 2025-05-28 |
2696263 | 프로그래밍 공부시작 질문 (6) | 진이 | 2025-05-28 |
2696206 | SK2의 플래시를 밴치마킹하려고하는데요.. (1) | 비내리던날 | 2025-05-27 |
2696179 | ie7에서 사라지지가 않네요. (2) | 빛길 | 2025-05-27 |
2696150 | div에 스크롤 생기게 하려면... (2) | 에드가 | 2025-05-27 |
2696123 | 자료구조론 공부중인데 | 김자영 | 2025-05-26 |
2696094 | exe 파일 | 제철 | 2025-05-26 |
2696043 | 제이쿼리 .scroll() 관련 질문드립니다 | 이거이름임 | 2025-05-26 |
2695984 | 마크업상으로 하단에 있으나 우선적으로 이미지파일을 다운로드받는 방법 (1) | 들꿈 | 2025-05-25 |
2695934 | tr 속성값 (9) | 새 | 2025-05-25 |
2695905 | ASP로 개발됐을 때 css가 달라져요 ㅠㅠ (4) | 슬아라 | 2025-05-24 |
2695878 | form을 이용한 다른 페이지로 넘기는 방법을 알려주세요 (1) | 핫파랑 | 2025-05-24 |
2695844 | 저기 암호화 및 복호화 프로그램.. 만들어볼려는대 (2) | 한빛 | 2025-05-24 |
2695814 | [질문] PDA에서 애플릿이 가능한가요? (1) | 봄시내 | 2025-05-24 |