import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class GraphicTest extends JFrame implements ActionListener {
JLabel x1L, y1L, x2L, y2L, z1L, z2L;
JTextField x1T, y1T, x2T,y2T,z1T,z2T;
JCheckBox fill;
JRadioButton line, circle, rect, rectR, arc; // 선 원 사각형 둥근사각형 호
JButton draw; // 2개의 패널 생성 위,아래
DrCanvas can;
JComboBox combo;
////////////////////////////////////
//color 추가하세요
Color Color;
public GraphicTest(){
x1L = new JLabel("x1");
y1L = new JLabel("y1");
x2L = new JLabel("x2");
y2L = new JLabel("y2");
z1L = new JLabel("z1");
z2L = new JLabel("z2");
x1T = new JTextField("100",3);
y1T = new JTextField("50",3);
x2T = new JTextField("150",3);
y2T = new JTextField("130",3);
z1T = new JTextField("50",3);
z2T = new JTextField("50",3);
line = new JRadioButton("선");
circle = new JRadioButton("원");
rect = new JRadioButton("사각형",true);
rectR = new JRadioButton("둥근사각형");
arc = new JRadioButton("호");
ButtonGroup bg = new ButtonGroup(); // RadioButton은 항상 그룹으로 묶어줘야된다.
bg.add(line);
bg.add(circle);
bg.add(rect);
bg.add(rectR);
bg.add(arc);
draw = new JButton("그리기");
can = new DrCanvas();
fill = new JCheckBox("채우기", true);
String[] color = {"빨강","파랑","노랑","초록","흰색"};
combo = new JComboBox(color);
JPanel p = new JPanel();
p.add(x1L);
p.add(x1T);
p.add(y1L);
p.add(y1T);
p.add(x2L);
p.add(x2T);
p.add(y2L);
p.add(y2T);
p.add(z1L);
p.add(z1T);
p.add(z2L);
p.add(z2T);
p.add(fill);
JPanel p2 = new JPanel();
p2.add(line);
p2.add(circle);
p2.add(rect);
p2.add(rectR);
p2.add(arc);
p2.add(combo);
p2.add(draw);
this.add("South",p2);
this.add("North",p);
this.add("Center",can);
setSize(600,300);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
//이벤트 처리
draw.addActionListener(this);
combo.addActionListener(this);
} // GraphicTest()
public void actionPerformed(ActionEvent e) {
////////////////////////////////////////////
// 이부분 추가하세요
if(e.getSource() == combo){
JComboBox cb = (JComboBox)e.getSource();
// cb.getSelectedIndex() 이것이 0,1,2.. 값을 리턴합니다.
// 의문점 쪽지주세요
switch (cb.getSelectedIndex()) {
case 0:
Color=Color.red;
break;
case 1:
Color=Color.blue;
break;
case 2:
Color=Color.yellow;
break;
case 3:
Color=Color.GREEN;
break;
case 4:
Color=Color.white;
}
}
can.repaint();
}// ActionEvent
class DrCanvas extends Canvas{
public DrCanvas(){
this.setBackground(new Color(140,60,80)); // 캔버스 색
this.setForeground(new Color(255,255,255)); // 도형 색상
} //DrCanvas()
public void paint(Graphics g){
//좌표 얻어오기
int x1 = Integer.parseInt(x1T.getText().trim());
int y1 = Integer.parseInt(y1T.getText().trim());
int x2 = Integer.parseInt(x2T.getText().trim());
int y2 = Integer.parseInt(y2T.getText().trim());
int z1 = Integer.parseInt(z1T.getText().trim());
int z2 = Integer.parseInt(z2T.getText().trim());
System.out.println();
System.out.println("그리기 시작" );
// 도형 그리자
if(fill.isSelected() ) { // 채우기 선택
/////////////////////////////////////////////
// 이부분 추가하세요
g.setColor(Color);
if( line.isSelected() )
g.drawLine(x1,y1,x2,y2);
else if( circle.isSelected() )
g.fillOval(x1,y1,x2,y2);
else if( rect.isSelected() )
g.fillRect(x1,y1,x2,y2);
else if( rectR.isSelected() )
g.fillRoundRect(x1,y1,x2,y2,z1,z2);
else if( arc.isSelected() )
g.fillArc(x1,y1,x2,y2,z1,z2);
} // if
else { // 채우기 해제
if(line.isSelected() ) {
g.drawLine(x1,y1,x2,y2);
} else if(circle.isSelected() ) {
g.drawOval(x1,y1,x2,y2);
} else if(rect.isSelected() ) {
g.drawRect(x1,y1,x2,y2);
} else if(rectR.isSelected() ) {
g.drawRoundRect(x1,y1,x2,y2,z1,z2);
} else if(arc.isSelected() ) {
g.drawArc(x1,y1,x2,y2,z1,z2);
}
} // else
} // paint()
} // DrCanvas()
public static void main(String[] args) {
new GraphicTest();
}
}
/*
문]
String[] color = {"빨강","파랑","노랑","초록","흰색"};
combo = new JComboBox(color);
이렇게 넣어놓으면 선택된 박스의 값을 어떻게 가져오나요...
System.out.println(combo) 라고 하니까 아주 긴 여러가지가
저기 빨강이 color[0] 이자나용 그럼 이 0 을 가져오고싶습니다...
*/
2008년 8월 29일 금요일
자바 JComboBox
자바 마방진
public class Mabangjin
{
public static void main(String args[])
{
//배열을 6으로 만드세요
//님이 사용한 로직은 5를 사용했는데
//그러면 0,1,2,3,4 이런식으로 첨자가 사용 되어야합니다.
//하지만 이 프로그램에서는 5까지 사용하니 6으로 해야
//에러가 발생하지 않습니다.
//의문점 쪽지 주세요
int a[][] = new int[6][6];
int i=1;
int j=(5/2)+1;
for(int k=1;k<=25;k++)
{
System.out.println("i="+i+"j="+j);
a[i][j]=k;
if(k%5==0)
{
i=i+1;
}
else
{
i=i-1;
j=j+1;
}
if(i<1)
{
i=5;
}
else if(j>5)
{
j=1;
}
}
//여기도 수정 x y 값수정
for (int x = 1; x < 6; x++)
{
for (int y = 1; y< 6; y++)
{
//출력을 보기 좋게
System.out.printf("%3d",a[x][y]);
}
System.out.println();
}
}
}
//문]
//a[i][j]=k;에서 배열의 범위를 벗어났다고하네요
//제가 봤을때는 이상없는것 같은데 ㅜ.ㅜ
//고수님들 좀 봐주세요 실행화면도 같이 해주시면 좋고요
//부탁드립니다 밑에는 소스입니다
아래는 다른 로직 마방진 프로그램입니다
import java.util.*; public class MagicSquare { public static void main(String[] args) { int n = 5; // 마방진의 크기 (홀수만 가능) if (n % 2 == 0) { System.out.println("마방진은 홀수 크기만 가능합니다."); return; } int[][] magicSquare = generateMagicSquare(n); printMagicSquare(magicSquare); } public static int[][] generateMagicSquare(int n) { int[][] magicSquare = new int[n][n]; int row = 0; // 시작 위치: 첫 행의 가운데 열 int col = n / 2; int num = 1; while (num <= n * n) { magicSquare[row][col] = num;
// 위로 이동 (위로 나가면 아래로 이동)
int nextRow = (row - 1 + n) % n;
// 오른쪽으로 이동 (오른쪽으로 나가면 왼쪽으로 이동)
int nextCol = (col + 1) % n;
// 이미 채워져 있으면 아래로 이동if (magicSquare[nextRow][nextCol] != 0) {
nextRow = (row + 1) % n; nextCol = col; } row = nextRow; col = nextCol; num++; } return magicSquare; } public static void printMagicSquare(int[][] magicSquare) { int n = magicSquare.length; System.out.println("마방진 (" + n + "x" + n + "):"); for (int[] row : magicSquare) { for (int num : row) { System.out.printf("%4d", num); } System.out.println(); } } }
Output:
마방진 (5x5): 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9
2008년 8월 28일 목요일
Google Android Developer Challenge I 최종 결과
Android Developer Challenge I 의 최종적인 결과는 지금 완료되었습니다.
결승전 출전자의 50 팀으로부터 10 팀이 $275,000 을 각각 받았고 10 팀은 $100,000 을 받았다.
... 원문 ...
이제 끝난 것 같군요.
휴~~~~
결승전 출전자의 50 팀으로부터 10 팀이 $275,000 을 각각 받았고 10 팀은 $100,000 을 받았다.
... 원문 ...
이제 끝난 것 같군요.
휴~~~~
2008년 8월 23일 토요일
Applet implements ActionListener, Runnable
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.Timer;
public class Main extends Applet implements ActionListener, Runnable {
Font f;
Image img;
Button btn_start;
Button btn_stop;
int col=10;
int row=10;
Random mole_random;
Thread thread;
//Timer timer1;
public void init(){
f= new Font("SansSerif", Font.TYPE1_FONT, 15);
//img = getImage(getDocumentBase(), "mogu4.png");
//저의 android.jpg로 사용 님그림으로 바꾸세요.
img = getImage(getDocumentBase(), "android.jpg");
btn_start = new Button("시작");
btn_start.addActionListener(this);
add(btn_start);
btn_stop = new Button("중단");
btn_stop.addActionListener(this);
btn_stop.setEnabled(false);
add(btn_stop);
}
// 필요 없음
// public void start(){
// repaint();
// // timer1.start();
//
// }
public void run(){
// 가장 문제가 있는 부분 for를 사용하면 안됩니다.
// for(int i=0; i<100; i++)
// {
while(true){
mole_random = new Random();
col=mole_random.nextInt(370)+10;
row=mole_random.nextInt(470)+10;
//g.drawImage(img, col, row, this);
repaint();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// }
}
//필요없음
// public void stop(){
// thread=null;
// }
public void paint(Graphics g){
g.drawRect(2, 2, 400, 500);
g.drawImage(img, col, row, this);
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==btn_start){
btn_stop.setEnabled(true);
thread = new Thread(this);
thread.start();
repaint();
}
if(e.getSource()==btn_stop){
btn_start.setEnabled(true);
btn_stop.setEnabled(false);
//이부분 추가
thread.stop();
}
}
}
//문]
//버튼을 누르면 그림이 무작위로 나타나는 것이 목적인데, 다음과 같이 하면 버튼을 누를때 마다 한번씩만 실행됩니다. 도와주세여
2008년 8월 21일 목요일
2008년 8월 20일 수요일
google Android v0.9 SDK의 베타판 실행화면
여기서 다운받고
여기를 보면 보안상 GTalkService 을 삭제했다는데.
저의 프로그램은 대부분 이걸 사용하는데 걱정입니다.
GTalkService 이것 뿐만아니라
시작시 나오는 레드아이도 사라졌습니다.
Sorry ?
인터넷에서 한글지원이 되니 이건 좋은것 같고
전반적으로 속도도 많이 좋아진 것 같고
화면의 그림도 귀엽고 예쁘다고 생각합니다.
google 님 GTalkService 이거 다시 넣어주세요.
2008년 8월 18일 월요일
google Android SDK의 베타판 release
나는 오늘, 꽤 행복합니다.
내가 누구라도 우리가 베타 SDK를 공표하고 있는 것을 알리게 되므로, 당신은 Android Developers의 Site로 새로운 Android에 대해 0.9의 SDK 베타를 읽을 수 있습니다, 혹은, 당신이 비트에 똑바로 되고 싶다면, 당신은 다운로드 페이지를 방문할 수 있습니다. 일단 당신이 그것을 가진다면, 당신이 질문을 한다면, 반드시 우리의 Developer Forum를 방문하도록 해 주세요.
원문 여기를 참고하세요..
걱정이네.. 또 연구해야하니....
내가 누구라도 우리가 베타 SDK를 공표하고 있는 것을 알리게 되므로, 당신은 Android Developers의 Site로 새로운 Android에 대해 0.9의 SDK 베타를 읽을 수 있습니다, 혹은, 당신이 비트에 똑바로 되고 싶다면, 당신은 다운로드 페이지를 방문할 수 있습니다. 일단 당신이 그것을 가진다면, 당신이 질문을 한다면, 반드시 우리의 Developer Forum를 방문하도록 해 주세요.
원문 여기를 참고하세요..
걱정이네.. 또 연구해야하니....
JTable setPreferredWidth 각 컬럼 너비조절 질문이요
import java.util.Vector;
import javax.swing.*;
import javax.swing.table.*;
class table_test extends JFrame{
private DefaultTableModel dtm;
private JTable jt = new JTable();
private JScrollPane jsp = new JScrollPane(jt);
public table_test(){
this.init();
this.setSize(300, 200);
this.setVisible(true);
}
public void init(){
this.getContentPane().add("Center", jsp);
Vector attribute = new Vector(); // 한 행에 입력될 속성
attribute.addElement("김씨");
attribute.addElement("서울대학교");
Vector data = new Vector(); // 이름과 소속 속성을 가지는 하나의 행 벡터
data.add(attribute);
Vector header = new Vector();
header.add("이름");
header.add("소속");
dtm = new DefaultTableModel(data, header);
jt.setModel(dtm);
// System.out.println(jt.getColumnModel().getTotalColumnWidth()); // 기본값 75+75 = 150
// jt.getColumnModel().getColumn(0).setWidth(100);
// jt.getColumnModel().getColumn(1).setWidth(200);
// System.out.println(jt.getColumnModel().getTotalColumnWidth()); // 변경값 100+200 = 300
//setWidth 의 영문 번역 입니다.
//This method should not be used to set the widths of columns in the JTable, use setPreferredWidth instead.
//이 method 은 칼럼의 폭을 JTable로 세트 하는데 이용되어서는 안됩니다. 그리고, 그 대신에 setPreferredWidth 이 사용이 됩니다
jt.getColumnModel().getColumn(0).setPreferredWidth(100);
jt.getColumnModel().getColumn(1).setPreferredWidth(200);
// jt.getColumnModel().getColumn(0).setMinWidth(width);
// jt.getColumnModel().getColumn(0).setMaxWidth(width);
//jt.repaint(); // 보여지는 테이블의 컬럼길이는 그대로인게 문제
}
}
public class tableTest{
public static void main(String[] ar){
new table_test();
}
}
//문]
//사정상 TableColumn으로 설정하는 법을 쓰지않고, 아래와 같이 테이블에서 get 하는 방식으로 접근을 해서 셋팅을 하려고 하는데 잘 되지가 않습니다.
//커맨드 출력상으로는 분명 논리적으로 총 너비를 합한값이 변해져있는데 정작 보여지는 테이블의 총 너비는 전혀 변하지 않은게 난감하네요.....;;
//조언 부탁드립니다.
2008년 8월 13일 수요일
java StringTokenizer
import java.util.*;
public class ShowParse{
public static void main(String args[]){
ShowParse sp=new ShowParse();
StringTokenizer st= new StringTokenizer("하하하=호호호-히히히=낄낄낄","-");
//여기에 while문 추가하세요.
while(st.hasMoreTokens()){
StringTokenizer st1= new StringTokenizer(st.nextToken(),"=");
while(st1.hasMoreTokens())
System.out.println(st1.nextToken());
}
}
}
/*문]
하하하
호호호 는 찍히는데
하하하
호호호
히히히
낄낄낄
이라고 찍고 싶어요~
*/
2008년 8월 12일 화요일
java 24시간제를 12시간제로 바꾸기
public class MilitaryTime{
public static void main(String[] args){
int Time1 = 900;
int Time2 = 1730;
ampm(Time1);
ampm(Time2);
// System.out.println(Time1);
// System.out.println(Time2);
}
private static void ampm(int t) {
// TODO Auto-generated method stub
//두개를 처리하기위해 함수로 만들었습니다.
int minute = 0;
int hour = 0;
String time = null;
//시간을 문자열로 만들고
time = Integer.toString(t);
//만약 3자리숫자면 4자리로 만들고 이유는 계산하기 편하게
if(time.length()<4) time="0"+time;
//문자열 앞2자리를 시간으로 만들고
hour = Integer.parseInt(time.substring(0, 2));
//문자열 뒤2자리를 분으로 만들고
minute = Integer.parseInt(time.substring(2, 4));
//만약 오후이면 12를 감산한면 됩니다.
//의문점 쪽지주세요
if(hour> 12 && hour<=24){
hour = hour - 12;
System.out.println("Time is "+ hour + ":" + minute +"pm");
}
else{
System.out.println("Time is "+ hour + ":" + minute +"am");
}
}
}
//문]
//자바초보입니다..ㅡㅡ.;
//24시간제를 12시간제로 바꾸고 싶은데 잘안되는군요..
//예를들어 0900시면 9am으로...1730이면 5:30pm으로 출력하고 싶은데 ..
//소스수정부탁드립니다...-ㅁ-
java BufferedWriter
import java.awt.*;
import java.io.*;
import java.awt.event.*;
import javax.swing.*;
class B extends JPanel implements ActionListener{
//수정한부분
private JButton bt;
private JButton bt2;
private JButton bt3;
private JButton bt4;
private JTextField tf1;
private TextArea text;
private JTextField tf;
public B(){
setLayout(null);
JLabel lb1 = new JLabel("제목");
lb1.setBounds(10,20,30,25);
add(lb1);
tf = new JTextField();
tf.setBounds(40,20,200,25);
add(tf);
JLabel lb2 = new JLabel("날짜");
lb2.setBounds(10,50,30,25);
add(lb2);
tf1 = new JTextField();
tf1.setBounds(40,50,200,25);
add(tf1);
text = new TextArea();
text.setBounds(10,80,350,500);
add(text);
bt = new JButton("새파일");
bt.setBounds(10,620,60,30);
add(bt);
bt2 = new JButton("열기");
bt2.setBounds(70,620,60,30);
add(bt2);
bt3 = new JButton("저장");
bt3.setBounds(130,620,60,30);
add(bt3);
bt4 = new JButton("닫기");
bt4.setBounds(190,620,60,30);
add(bt4);
tf1.addActionListener(this);
tf.addActionListener(this);
bt.addActionListener(this);
bt2.addActionListener(this);
bt3.addActionListener(this);
bt4.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
// bt3이 저장버튼
// 저장 버튼을 클릭하면
//save함수를 호출합니다.
if (e.getSource() == bt3) {
String title = tf.getText();
String author = text.getText();
if (title == null
|| author == null
|| title.trim().length() == 0
|| author.trim().length() == 0) {
return;
}else{
//여기서 저장하는 함수호출
save();
}
}
}
private void save() {
// TODO Auto-generated method stub
BufferedWriter out;
try {
//c:/out.txt 파일이름으로 저장
//이부분을 연구하시면 됩니다.
out = new BufferedWriter(new FileWriter("c:/out.txt"));
//제목 저장
out.write(tf.getText()); out.newLine();
//날짜 저장
out.write(tf1.getText()); out.newLine();
//내용 저장
//의문점 쪽지주세요.
out.write(text.getText()); out.newLine();
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class BB{
public static void main(String[] args){
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().add(new B());
f.setSize(400,700);
f.setVisible(true);
f.setTitle("일기장");
}
}
//문]
//안녕하세요.
//자바와 한참 씨름중인 프로그래머 지망생입니다 ㅠㅠ
//일기장을 만들어 볼려구 하는데요...
//저장하는거 정말 어렵네요 ㅠㅠ
//API는 볼줄도 모르겠고....
//책과제에서 소스약간 퍼와서 하는중인데 도무지 해답을 찾을수가 업습니다.
//수정좀 부탁드립니다
//고수님들 굽신굽신~~~
//저장만 할수 있게 수정좀 해주세요 굽신굽신
java JInternalFrame
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class A02 extends JFrame{
JInternalFrame inframe;
JLabel l;
ImageIcon icon;
// 여기 수정
final JDesktopPane desktop;
public A02(){
super("A02 ");
JMenuBar bar = new JMenuBar();
setJMenuBar(bar);
JMenu addMenu = new JMenu("추가");
JMenuItem newInFrame = new JMenuItem("내부프레임추가");
addMenu.add(newInFrame);
bar.add(addMenu);
desktop = new JDesktopPane();
getContentPane().add(desktop,BorderLayout.CENTER);
//이부분 추가
addFrame();
newInFrame.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
}
}
);
setSize(300,200);
setVisible(true);
}
//여기도 추가
private void addFrame() {
// TODO Auto-generated method stub
inframe = new JInternalFrame("내부프레임",true,true,true);
icon = new ImageIcon("c:/android.jpg");
l = new JLabel(icon);
inframe.getContentPane().add(l,BorderLayout.CENTER);
inframe.setSize(200,100);
inframe.show();
desktop.add(inframe);
}
public static void main(String [] args){
A02 jinter = new A02();
jinter.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}
2008년 8월 10일 일요일
Java 매개변수 전달 방식 (Call by Value, Call by Reference)
class problem { int a[]=new int[1]; int b[]=new int[1]; static int c[]=new int[1]; public problem(){ plus(a); plus(b); plus(c); System.out.println(a[0]+" "+b[0]+" "+c[0]); } public void plus(int x[]){ x[0]++; } } class test { public static void main(String[] args) { new problem(); } } //답] // 이 문제의 답을 얻으시려면 님의 생각을 조금 바꾸셔야합니다. // 언어는 여러 매개변수 전달기법들이 있습니다. // c 언어일경우 전달기법을 문법으로 프로그램머가 제어가능하지만
//자바의 경우 자료형에 따라 자동으로 매개변수 전달방식이 결정 됩니다.
//님의 경우 배열로 해야 Call by Reference 기법이 구현됩니다. // Call by value : 매개변수의 값을 복사해서 넘겨주는 방식 // Call by reference : 매개변수의 주소값을 넘겨주는 방식 //문] //사실 실제 작업중인 코드는 아래것이 아니라 좀 더 복잡한건데
//문제현상을 아래처럼 간단하게 만들어봤습니다. //제한조건은 다음과 같습니다. //1. plus()라는 함수가 static int 인자를 받을때도 있고 그냥
//int 인자를 받을때도 있습니다. //2. plus() 함수는 void형이어야만 합니다. //3. plus() 함수 외의 다른 소스부분을 수정해서는 안되고,
//오로지 plus함수내에서 처리해야만 하는 상황입니다.
//변경이 아닌 추가메소드같은건 구현가능함.. //4. x=this.a; x=this.b; x=this.c 이렇게 코딩하면 안됩니다.
// 클래스필드의 투명성이 보장되어 직접 plus가
//접근할 수 없는 상황입니다;; //어찌저찌하다보니까 제한조건이
//저렇게밖에 할 수 없는 상황이네요ㅡㅡ
2008년 8월 9일 토요일
java 버튼 만들었는데 보이지가 않아요
import java.awt.*;
import java.awt.event.*;
import javax.swing.JFrame;
public class A01 extends JFrame implements WindowListener
{
public static void main(String[] args)//창생성
{
A01 f = new A01();
f.setSize(300,300);
f.setVisible(true);
}
//버튼
Button btn1, btn2, btn3;
public void init()
{
btn1 = new Button("버튼1");
btn1.setBounds(10,10,100,20);
add(btn1);
}
public A01()//캠버스 생성
{
//여기에 init()를 추가하세요
//의문점 쪽지주세요
init();
MyCanvas mc = new MyCanvas();
add("Center", mc);
addWindowListener(this);
}
/*class paint2
{
MyCanvas2 mc2 = new MyCanvas2();
add("Center", mc2);
}
class MyCanvas2 extends Canvas//이미지출력캔버스
{
public void paint(Graphics g)
{
Toolkit myToolkit2 = Toolkit.getDefaultToolkit();
Image myImage = myToolkit2.getImage("c:kaka.jpg");
g.drawImage(myImage , 0, 0, this);
}
}*/
class MyCanvas extends Canvas//이미지출력캔버스
{
public void paint(Graphics g)
{
Toolkit myToolkit = Toolkit.getDefaultToolkit();
Image myImage = myToolkit.getImage("c:/android.jpg");
g.drawImage(myImage , 0, 0,300,300, this);
}
}
public void windowOpened(WindowEvent e) {}//윈도우리스너
public void windowClosing(WindowEvent e) {
System.exit(0);
}
public void windowClosed(WindowEvent e) {}
public void windowIconified(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowActivated(WindowEvent e) {}
public void windowDeactivated(WindowEvent e) {}
}
//문]
//버튼 만들었는데 보이지가 않아요
2008년 8월 8일 금요일
java DefaultTreeCellRenderer test
import java.awt.*;
import javax.swing.*;
import javax.swing.tree.*;
public class TreeTest extends JFrame {
JPanel jPanel1 = new JPanel();
JTree tree;
BorderLayout borderLayout1 = new BorderLayout();
Icon openNode = new ImageIcon("C:/i1.jpg");
Icon online = new ImageIcon("c:/i2.jpg");
Icon closeNode = new ImageIcon("c:/i3.jpg");
public TreeTest() {
try {
Init();
tree.setRootVisible(true);
}
catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
TreeTest test = new TreeTest();
test.setSize(300, 500);
test.setVisible(true);
}
private void Init() throws Exception {
String rsmd1[]={"일지매","홍길동","android","경품","로또"};
String name=null;
DefaultMutableTreeNode parent = new DefaultMutableTreeNode("친구", true);
//확인방법 여기서
for(int i=0;i<=4;i++){
name=rsmd1[i];//배열에서 문자열 가져오고
DefaultMutableTreeNode DbData = new DefaultMutableTreeNode(name);
parent.add(DbData);
}
// 여기까지 주석 하고 실행하고 하지 않고 실행 해보시면 됩니다.
tree = new JTree(parent);
jPanel1.setLayout(borderLayout1);
this.getContentPane().add(jPanel1, BorderLayout.CENTER);
jPanel1.add(tree, BorderLayout.CENTER);
tree.setCellRenderer(new MyRenderer());
}
class MyRenderer extends DefaultTreeCellRenderer
{
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus)
{
super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
if (expanded)//그룹 열렸을때 아이콘
{
setIcon(openNode);
}
else if(!expanded && leaf) //그룹이 열리지않고 리프노드일때(즉 친구아이콘)
{
//여기 if문은 사용자가 프로그램하기 나름이므로 참고하세요
// 저의 경우는 친구그룹인가를 확인하고 아이콘을 제어합니다.
// 의문점 쪽지주세요.
if(value.toString().equals("친구"))setIcon(closeNode);
else setIcon(online);
}
else if(!expanded)//그룹이 닫혔을때
{
setIcon(closeNode);
}
return this;
}
}
}
//문]
//그룹추가를 했을때 닫힌그룹모양이 아니고 친구가 없어서 리프노드 처리가 되서 친구 아이콘으로 되버리는군요..;; 어떻게 해야 자식이 없는 그룹노드에 그룹아이콘 모양을 줄수 있나요?
자바 그림 불러오기
import java.awt.Canvas;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
public class A01 extends Frame implements WindowListener
{
public static void main(String[] args)
{
A01 f = new A01();
f.setSize(600,400);
f.setVisible(true);
}
public A01()
{
MyCanvas mc = new MyCanvas();
add("Center", mc);
addWindowListener(this);
}
class MyCanvas extends Canvas//이미지출력캔버스
{
public void paint(Graphics g)
{
Toolkit myToolkit = Toolkit.getDefaultToolkit();
// 경로 지정하시면 됩니다. "c:/android.jpg" 이런식으로요.
//의문점 쪽지 주세여.
Image myImage = myToolkit.getImage("c:/android.jpg");
g.drawImage(myImage , 0, 0, this);
}
}
public void windowOpened(WindowEvent e) {}
public void windowClosing(WindowEvent e) {
System.exit(0);
}
public void windowClosed(WindowEvent e) {}
public void windowIconified(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowActivated(WindowEvent e) {}
public void windowDeactivated(WindowEvent e) {}
}
피드 구독하기:
글 (Atom)
-