Перейти до вмісту

Фрейми в Java


Повідомлень в темі: 5

#1 Dimetrius

    Абориген

  • Користувачі
  • PipPipPipPip
  • 75 повідомлень
  • Стать:Чоловік

Відправлено 01.11.2008 – 11:34

  • 5
Дюди, поясніть будь-ласка одну штуку... Ось є код...

import java.awt.*;
import java.awt.event.*;

public class MainClass extends Frame implements WindowListener, ActionListener {

	Button firstButton, secondButton;
	Label myLabel;
	MenuItem m1,m2,m3;

	MainClass() {
		super("My first GUI program");
		//Buttons
		firstButton = new Button("First Button");
		secondButton = new Button("Second Button");
		firstButton.addActionListener(this);
		secondButton.addActionListener(this);
		myLabel = new Label("Display");
		add(firstButton);
		add(secondButton);
		add(myLabel);
		addWindowListener(this);
		//MenuItem
		MenuBar myBar = new MenuBar();
		setMenuBar(myBar);
		Menu myMain = new Menu("main");
		m1 = new MenuItem("File");
		m2 = new MenuItem("Edit");
		m3 = new MenuItem("Help");
		myMain.add(m1);
		myMain.add(m2);
		myMain.add(m3);
		myBar.add(myMain);
		//setLayout(new FlowLayout());
		firstButton.setSize(100,20);
		firstButton.setLocation(100,50);
		secondButton.setSize(100,20);
		secondButton.setLocation(100,80);
		myLabel.setSize(10,20);
		myLabel.setLocation(100,100);
		setSize(800,600);
		setVisible(true);
	}

	public void windowOpened(WindowEvent e) {}
	public void windowActivated(WindowEvent e) {}
	public void windowDeactivated(WindowEvent e) {}
	public void windowIconified(WindowEvent e) {}
	public void windowDeiconified(WindowEvent e) {}
	public void windowClosed(WindowEvent e) {}
	public void windowClosing(WindowEvent e) {
		setVisible(false);
		System.exit(0);
	}

	public void actionPerformed(ActionEvent e) {
		if (e.getSource()==firstButton) myLabel.setText("You pressed first button");
		if (e.getSource()==secondButton) myLabel.setText("You pressed second button");
	}

	public static void main(String[] args) {
		MainClass myWin = new MainClass();
	}
}

Ця програмка створює фрейм (форму) з двома кнопками, які просто міняють напис на лейбелі... Як зробити щоб на цій формі при запуску було щось намальовано. Теоретично малювати потрібно у методі paint() після main(), але воно чомусь коли написати в ньому деякий теоретично правильний код програму успішно компілює і запускає, але не малює нічого. Впишіть пліз в цей код хочаби якусь намальовану лінію....
І ще одне питання... як зробити щоб певний малюнок (пускай буде та ж сама лінія) зявлялась при натисканні наприклад firstButton... Наперед вдячний.

Повідомлення відредагував Dimetrius: 01.11.2008 – 11:35


#2 Lactarius

    Генеральний писар

  • Користувачі
  • PipPipPipPipPipPipPipPipPip
  • 976 повідомлень
  • Стать:Чоловік
  • Місто:Львів

Відправлено 02.11.2008 – 14:41

Graphics g = this.getGraphics();
g.drawImage(i, 100, 100, this);
this.paint(g);//or paintAll(g); ?
прямо в обробник кнопки... по ідеї мало би працювати...
П.С. Джаву вчити почав 2дні тому, так що я можу бути неправий....
  • 0

#3 kavalera

    Старійшина

  • Користувачі
  • PipPipPipPipPipPipPipPipPipPip
  • 1258 повідомлень
  • Стать:Чоловік

Відправлено 06.02.2009 – 04:05

Шановний Dimetrius.
По-перше, нашо тут iмплементацiя WindowListenera? Цей код же його юзаje неакадемiчно. Краще скористатися
JFrame, вставивши для закривачки у конструктор setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
По-друге, аби щось малювалося, треба у обробнику евента (у нас це actionPerfomed()) скомандувати repaint(), що зрештою закинчитья викликом paint(Graphics g), у я кому й треба щось нашкрябати.
Наприклад так:

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

public class MainClass extends JFrame implements ActionListener {

	JButton firstButton, secondButton;
	JLabel myLabel;
	JMenuItem jmi1,jmi2,jmi3;

	MainClass() {
		super("My first GUI program");
		//Buttons
		firstButton = new JButton("First Button");
		secondButton = new JButton("Second Button");
		firstButton.addActionListener(this);
		secondButton.addActionListener(this);
		myLabel = new JLabel("Display");
		add(firstButton);
		add(secondButton);
		add(myLabel);

		//Menu

                JMenuBar jmb=new JMenuBar();
                setJMenuBar();

		JMenu jm = new JMenu("BlaBlaBla");
                jmb.add(jm);

		jmi1 = new JMenuItem("File");
		jmi2 = new JMenuItem("Edit");
		jmi3 = new JMenuItem("Help");
		jm.add(jmi1);
		jm.add(jmi2);
	        jm.add(jmi3);


		firstButton.setSize(100,20);
		firstButton.setLocation(100,50);
		secondButton.setSize(100,20);
		secondButton.setLocation(100,80);
		myLabel.setSize(10,20);
		myLabel.setLocation(100,100);

                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(800,600);
		setVisible(true);
	}

	public void actionPerformed(ActionEvent e) {
		if (e.getActionCommand()=="First Button"){ //мае збигатис я з назвою батона
                myLabel.setText("You pressed first button");
                repaint(); // ВИКЛИКАЕМО ПЕРЕМАЛЬОВКУ
                }
		if (e.getActionCommand()=="Second Button") { //мае збигатися з назвою батона
                 myLabel.setText("You pressed second button");
                 repaint(); //ВИКЛИКАЕМО ПЕРЕМАЛЬОВКУ
                }
	}

// Ну, такий напр пейнт (в принципi можна й апдейт, але й так добре):

        public void paint(Graphics g){
         super.paint(g); //Обов'язково, щоб не було ризних горбоконикив
         g.setColor(new Color(0x90,0x0,0xFF)); // фiолетовий
         g.fillRect(400,300,(400*Math.random()),(300*Math.random)); // бавимося
        }

	public static void main(String[] args) {
		MainClass myWin = new MainClass();
	}
}//кинець класу

ДОДАТОК

А шоб малювати рiзнi, в залежностi вiд натискання кнопки iмейджi (файли *.gif, *.jpg),
тодi додаjeмо поле, и переробляемо акшионперформед так:
(Звисно таким же чином можна не тильки имейджи малювати залежно вид кнопки, а через наприклад поле-флаг -
яке буде задаватися у акшионперформеди у кожний гилци свое значення, щоразу писля натиснення батона - робити у пейнти розгалуження, яки залежно вид флага будуть малювати ризне для кожнойи гилки)

 Image image; //поле класу

	   public void actionPerformed(ActionEvent e){
		 if(e.getActionCommand()=="First Button"){
		  myLabel.setText("Tralala");
		  image=getToolkit().getImage("якийсь_диск:\\якась_папка\\...\\якийсь_ЖЕПЕГ№1.jpg");
		  repaint();
		 }
		 if(e.getActionCommand()=="Second Button"){
		  myLabel.setText("Das ist fantastisch!");
		  image=getToolkit().getImage("якийсь_диск:\\якась_папка\\...\\якийсь_ЖЕПЕГ№2.jpg");
		  repaint();
		 }
		}

а paint так:
public void paint(Graphics g){
		   super.paint(g);
		   g.drawImage(image,0,45,this);//З розмирами имейджив и фрейма треба вже самому(другий и третий	 //аргументи це X- i Y-координати ливого верхнього пикселя твого имейжда видповидно)
		 }

А ще хотив прийеднати свий сорс на схожу тему з раннього , :cool2: та не дали чогось... :)

Повідомлення відредагував GhulbeddinHekmatiar: 06.02.2009 – 04:27

  • 0

#4 kavalera

    Старійшина

  • Користувачі
  • PipPipPipPipPipPipPipPipPipPip
  • 1258 повідомлень
  • Стать:Чоловік

Відправлено 07.02.2009 – 21:34

Не дали мені причепити файла, та я всеодно вирішив продемонструвати дещо. Правда тут немає обробки події, але все одно ж фрейм, і з малюванням. Раз ви тільки починаєте вчити Яву, то може вам пригодиться. Я й сам не так давно її почав вчити. Ось код, відкомпілюйте його, все має працювати. Принаймні в мене працює.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class Wave3 extends Frame{
 public static final double DVA_PI=2*3.14159265;
 private double temp;
 Wave3(String s){
  super(s);
  addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent we){System.exit(0);}});
  setBackground(Color.black);
  setSize(1000,720);
  //setResizable(false);
  setVisible(true);
 }
 void letsGo(){
  int t=0;
  double cs=0;
  while(true){
   try{
    Thread.sleep(30);
   }catch(InterruptedException ie){}
   repaint();
   temp++;
  }
 }
 public void paint(Graphics gr){
  super.paint(gr);
  Image img1=createImage(700,100),
   img2=createImage(700,100),
   img3=createImage(700,100);
  Graphics g1=img1.getGraphics(),
   g2=img2.getGraphics(),
   g3=img3.getGraphics();
  double phi=0,cos=0;
  int j=0;
  float r1=0,r2=0,fz=0;
  g1.setColor(Color.black);
  g2.setColor(Color.black);
  g3.setColor(Color.black);
  g1.fillRect(0,0,700,100);
  g2.fillRect(0,0,700,100);
  g3.fillRect(0,0,700,100);
  for(int i=0;i<700;i++){
   phi=(DVA_PI*i/800.0-0.075*temp)%DVA_PI;
   cos=Math.cos(phi);
   j=(int)(50*(1-cos));
   r1=(float)(0.43f+0.09f*cos);
   r2=(float)(0.7f+0.147f*cos);
   fz=r2;
   gr.setColor(new Color(r1,0,fz));
   gr.drawLine(i+150,135,i+150,310);
   gr.setColor(new Color(r2,fz,0));
   gr.drawLine(i+150,410,i+150,585);
   g1.setColor(new Color(r1,0,fz));
   g1.drawLine(i,100,i,j);
   g2.setColor(new Color(r1,0,fz));
   g2.drawLine(i,0,i,j);
   g2.setColor(new Color(r2,fz,0));
   g2.drawLine(i,100,i,j);
   g3.setColor(new Color(r2,fz,0));
   g3.drawLine(i,0,i,j);
  }
  gr.drawImage(img1,150,35,this);
  gr.drawImage(img2,150,310,this);
  gr.drawImage(img3,150,585,this);
 }
 public void update(Graphics g){paint(g);}
 public static void main(String args[]){
  Wave3 wave=new Wave3("    CHVILIA");
  wave.letsGo();
 }
}


А ось ще, з батонами і обробкою події



import java.awt.*;
import java.awt.event.*;
import java.awt.font.*;

class RFF extends Frame implements ActionListener{

	public static final double DVA_PI=2*3.14159265;
 	private Image img;
 	private Color color=new Color(155,0,255);
 	private double f,ff;
	private int count;
	private int j[]=new int[1001];
	private boolean indicator,cr=true,sm=true,fl=true;

	RFF(String s){

		super(s);
		Panel p=new Panel();
		Button ba=new Button("nastupny graphic");
		Button bb=new Button("    ocistiti    ");
		Button bc=new Button("    fioletovy   ");
		Button bd=new Button("     cervony    ");
		Button be=new Button("   smaraghdovy  ");

		add(p,BorderLayout.SOUTH);
		p.add(ba);p.add(bb);
		p.add(bd);p.add(bc);p.add(be);

		MediaTracker tr=new MediaTracker(this);
		try{
			tr.addImage(img,0);
			tr.waitForID(0);
		}catch(InterruptedException ie){}

		addWindowListener(new WindowAdapter(){
			public void windowActivated(WindowEvent we){repaint();}
			public void windowClosing(WindowEvent we){System.exit(0);}
		});
		ba.addActionListener(this);bc.addActionListener(this);
		bb.addActionListener(this);bd.addActionListener(this);
		be.addActionListener(this);
		p.setBackground(new Color(60,49,81));
		setSize(1020,550);
		setBackground(new Color(140,70,140));
		setResizable(false);
		setVisible(true);

	}

	public void actionPerformed(ActionEvent ae){

		if(ae.getActionCommand()=="    fioletovy   "){
				sm=true;cr=true;
				if(fl){color=new Color(155,0,255);repaint();}
				fl=false;
		}else if(ae.getActionCommand()=="     cervony    "){
				sm=true;fl=true;
				if(cr){color=new Color(200,50,130);repaint();}
				cr=false;
		}else if(ae.getActionCommand()=="   smaraghdovy  "){
				cr=true;fl=true;
				if(sm){color=new Color(92,199,196);repaint();}
				sm=false;
		}else if(ae.getActionCommand()=="nastupny graphic"){
				double phi=0,s=0;
				indicator=true;
				count=1+(int)(30*Math.random());
				f=Math.random();
				ff=Math.random();
				for(int i=0;i<1001;i++){
					for(int k=1;k<=count;k++){
						phi=DVA_PI*k*(i-500)/1000.0;
						s+=10*Math.cos(phi*f)+10*Math.sin(phi*ff);
					}
					j[i]=(int)s;s=0;
				}
				repaint();
		}else if(ae.getActionCommand()=="    ocistiti    "){
				indicator=false;
				count=0;
				repaint();
		}
	}

	public void paint(Graphics g){
 		super.paint(g);
 		g.drawImage(img,10,68,this);
 	}

	public void update(Graphics g){

  		img=createImage(1002,402);
		Graphics gr=img.getGraphics();
  		String str1="",str2="";
  		gr.setColor(Color.black);
  		gr.fillRect(0,0,1000,400);
  		gr.setColor(color);

  		if(indicator)for(int i=0;i<1001;i++)gr.drawLine(i,200,i,200-j[i]);

		str1=(count==0?"-":""+(float)(1000/f));
  		str2=(count==0?"-":""+(float)(1000/ff));
  		gr.setColor(new Color(0,175,30));
  		gr.setFont(new Font("Courier New",Font.BOLD,18));
  		gr.drawRect(0,0,1001,401);  
  		gr.drawLine(0,200,1000,200);gr.drawString("x",983,222);
  		gr.drawLine(500,0,500,400);gr.drawString("y",507,22);
  		gr.drawString("Riad Fourie",7,344);
  		gr.drawString("cileniev riadu: "+count,7,361);
  		gr.drawString("max.cos.lambda: "+str1,7,378);
  		gr.drawString("max.sin.lambda: "+str2,7,395);

  		paint(g);

	}

	public static void main(String args[]){
		Frame rff=new RFF("Znovu suma harmonic");
	}

}





Повідомлення відредагував GhulbeddinHekmatiar: 07.02.2009 – 21:46

  • 0

#5 kavalera

    Старійшина

  • Користувачі
  • PipPipPipPipPipPipPipPipPipPip
  • 1258 повідомлень
  • Стать:Чоловік

Відправлено 26.03.2010 – 02:51

До речі, в продовження теми свастики,) яка знову повторюсь немає ніякого стосунку до довбаних німецьких людоїдів!)
Згадалось ось, ющенко нагадав. Колись, коли вчив яву, написав таку фігню, ясно, шо воно нікому крім мене не потрібно B) ну прсото пригадалося. Таке. Да, і кстаті, цей класфайл (так язик і не повертається називати це прогамою :rolleyes:) пірікольно показує, шо нікси смокчуть порівняно з Віндою. :ggggg: Всмсилі, шо віртуальна машина на Windows, швидше впорується з виконанням цієї програми, ніж на них. Ну або ж у Вінди краще планувальник працює. Чи кількість процесів необхідних підібрана оптимальніше значно. Енівей, смокчуть нікси.))) Я порівнював з ОпинСолярисом. Різниця істотна. Навіть помітна для ока. Пірікол, да? Лінухоїди, потестуйте на своїх мегосистемах. :yes:
package p5;

import java.util.*;
import java.lang.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.font.*;
import java.awt.image.*;
import javax.swing.*;

class Sw7 extends JFrame{
 public static final double K=2*3.14159265/800.0;
 public static final double L=2*3.14159265/8.0;
 private int a1x[]=new int[801];
 private int a1y[]=new int[801];
 private int a2x[]=new int[801];
 private int a2y[]=new int[801];
 private int j;
 private int counter=0;
 private long t1;
 private long t2;
 private boolean stfl=false;
 private String osName="";

 Sw7(){
  super("Indoeuropeisca swastica");
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  setSize(450,450);
  Container c=getContentPane();
  c.setBackground(Color.BLACK);
  setResizable(false);
  setVisible(true);
  double cs=0;
  for(int i=0;i<801;i++){
   cs=K*i;
   a1x[i]=(int)(100*Math.cos(cs));
   a1y[i]=(int)(100*Math.sin(cs));
   a2x[i]=(int)(141.4*Math.cos(cs+L));
   a2y[i]=(int)(141.4*Math.sin(cs+L));
  }
  try{
	osName=System.getProperty("os.name");
  }catch(Exception e){
	osName="Can't take OS name";
	System.out.println("ERROR:"+e.getMessage());
  }
 }
 
 public void update(Graphics gr){
  gr.setColor(new Color(0x92,0x0,0xFF));
  Image img=createImage(310,350);
  Graphics g=img.getGraphics();
  g.setColor(Color.BLACK);
  g.fillRect(0,0,400,400);
  g.setColor(new Color(0x92,0x0,0xFF));
  for(int k=0;k<11;k++){
   g.drawLine(155+a1x[j]+k,155-a1y[j]-k,155-a1x[j]+k,155+a1y[j]-k);	  
   g.drawLine(155-a1y[j]+k,155-a1x[j]-k,155+a1y[j]+k,155+a1x[j]-k);
   g.drawLine(155+a2x[j]+k,155-a2y[j]-k,155+a1x[j]+k,155-a1y[j]-k);
   g.drawLine(155-a2y[j]+k,155-a2x[j]-k,155-a1y[j]+k,155-a1x[j]-k);
   g.drawLine(155-a2x[j]+k,155+a2y[j]-k,155-a1x[j]+k,155+a1y[j]-k);
   g.drawLine(155+a2y[j]+k,155+a2x[j]-k,155+a1y[j]+k,155+a1x[j]-k);
  }
   g.setFont(new Font("Courier New",Font.BOLD,62));
   if(counter==2&&j==800)g.drawString("3",259,349);
   else g.drawString(""+counter,255,349);
  gr.setFont(new Font("Courier New",Font.BOLD,18));
  if(counter==2&&j==800){
	t2=System.currentTimeMillis();
	gr.drawString("The processing time is "+(t2-t1)+" ms.",4,445);
  }
if(stfl)gr.drawString("The processing time is "+(t2-t1)+" ms.",4,445);
gr.drawString(osName,4,425);
  gr.drawImage(img,70,52,this);
 }

 public void letsGo(){
  t1=System.currentTimeMillis();
  for(;counter<3;++counter)
   for(j=0;j<801;++j)
	try{
	update(getGraphics());
	Thread.sleep(10);
	}catch(InterruptedException ie){}
  j=0;
  stfl=true;
  while(true){
   try{
	update(getGraphics());
	Thread.sleep(20);
   }catch(InterruptedException ie){}
  }
}


 public static void main(String args[]){
  Sw7 sw=new Sw7();
  sw.letsGo();
 }
}
Да, і я ж вчився тоді, тож не не треба наїздів. :happy1:

Повідомлення відредагував IA32: 26.03.2010 – 02:52

  • 0

#6 vania

    Чайник

  • Користувачі
  • Pip
  • 1 повідомлень

Відправлено 16.10.2014 – 17:21

допоможіть будь ласка...


Визначити, що виведе на екран наступний елемент програми і скільки разів виконається цикл
(даний код написаний на Java):

a. int y = 1; int k;

for(k = 6; k >= 3; k--)
y = y + k;
System.out.println("y = " + y);
System.out.println("k = " + k);


b. int y = 6; int k;

for(k = 1; k <= 6; k++)
y = y+k;
y = y * 10;
System.out.println("y = " + y);
System.out.println("k = " + k);
  • 0



Кількість користувачів, що читають цю тему: 1

0 користувачів, 1 гостей, 0 анонімних