Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Недостатки програмы 
V
    Опции темы
Neox_GeForce
Дата 12.10.2009, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 14.11.2007
Где: Украина

Репутация: нет
Всего: нет



Сделал я лабораторную роботу. Суть простенькая : В 2 текстовых полях вводим координаты Надписи и по нажатию Enter надпись меняет расположение. 
класс с методом main
Код

package Lab4;
public class Lab4 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        MyWindow mw=new MyWindow("Тест",500,500);
        //mw.setVisible(true);
        mw.run();
        
        
    }

}



А вот и само окно
Код

package Lab4;
import java.awt.*;
import java.awt.event.*;


@SuppressWarnings("serial")
public class MyWindow extends Frame implements Runnable {
    private TextField field1;
    private TextField field2;
    private static Label    text=new Label("Тестовий рядок");
    private static int x=380;
    private static int y=30;
    private static int fieldWidth=50;
    private static int fieldHeight=25;
    public MyWindow(String title,int width,int height){
        super(title);
        try {
        
        this.setLayout(null);
        this.setSize(width, height);
        field1=new TextField("x");
        field2=new TextField("y");
        field1.setName("x");
        field2.setName("y");
        field1.setBounds(x, y, fieldWidth, fieldHeight);
        field2.setBounds(x+60, y, fieldWidth, fieldHeight);
        field1.setBackground(Color.BLACK);
        field2.setBackground(Color.BLACK);
        field1.setForeground(Color.white);
        field2.setForeground(Color.white);
        String text1=text.getText();
        int l=text1.length()*7;
        text.setBounds(5, 10, l, 50);
        
        this.add(field1);
        this.add(field2);
        this.add(text);
        
        
        this.addWindowListener(new WindowAdapter(){
        public void windowClosing(WindowEvent e){
            System.exit(0);
        }
        });
        
        
        
        field1.addActionListener(new TextEventListener(text,field1.getName()));
        field2.addActionListener(new TextEventListener(text,field2.getName()));
                
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
    public static void MoveLabelX(int x){
        int y=text.getY();
        System.out.println("y="+y);
        text.setLocation(x, y);
            }
    public static void MoveLabelY(int y){
        int x=text.getX();
        System.out.println("x="+x);
        text.setLocation(x, y);
        
    }
    @Override
    public void run() {

        // TODO Auto-generated method stub
    this.setVisible(true);    
    }
    
}

  class TextEventListener implements ActionListener{
    private Label label;
    private String field;
      public TextEventListener (Label label, String field){
        this.label=label;
        this.field=field;
    }
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        System.out.println("Text changed! "+e.toString());
        System.out.println(e.getActionCommand());
        if (this.field=="x")
        {
        MyWindow.MoveLabelX(Integer.parseInt(e.getActionCommand()));
            
        }
        else if(this.field=="y")
        {
        MyWindow.MoveLabelY(Integer.parseInt(e.getActionCommand()));
            
        }
        

    }
     
 }

Мне кажется что я как-то складно всё сделал. можно упростить?


--------------------
user posted image
Челябинские программисты настолько суровы, что обходятся без компиляторов.
Челябинские программисты настолько суровы, что считают ассемблер недопустительной роскошью - они вручную магнетизируют участки жесткого диска.
PM MAIL ICQ   Вверх
GZep
Дата 12.10.2009, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


Профиль
Группа: Завсегдатай
Сообщений: 1528
Регистрация: 7.7.2006
Где: Москва

Репутация: нет
Всего: 32



Цитата(Neox_GeForce @  12.10.2009,  18:47 Найти цитируемый пост)
this.setLayout(null);

зачем? и так по умолчанию null))

А вообще много можно упростить, убать. В частности eventListener можно не делать несколько экземпляров класса.

Это сообщение отредактировал(а) GZep - 12.10.2009, 23:33


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
Connie
Дата 13.10.2009, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 382
Регистрация: 12.8.2008

Репутация: 8
Всего: 9



Цитата
зачем? и так по умолчанию null))
по умолчанию FlowLayout, хотя насчет тяжелого компонента не уверен.

Neox_GeForce, а почему свинговые компоненты не используете?
Ну и сделали бы уже совсем шоколадно - перенос мышкой этой Label ;)
PM MAIL WWW   Вверх
duk
Дата 13.10.2009, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Some Object
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 19.7.2007

Репутация: нет
Всего: 4



Neox_GeForce, я не понял, для чего Вы реализовывали интерфейс Runnable (он используется для того, чтоб обозначить возможность выполнения какой-то задачи в отдельном потоке, но при этом метод Run самостоятельно пользователем вызываться не должен). 
PM MAIL   Вверх
Neox_GeForce
Дата 16.10.2009, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 14.11.2007
Где: Украина

Репутация: нет
Всего: нет



спс всем. Не использую свинг потому что лаба на авт.


--------------------
user posted image
Челябинские программисты настолько суровы, что обходятся без компиляторов.
Челябинские программисты настолько суровы, что считают ассемблер недопустительной роскошью - они вручную магнетизируют участки жесткого диска.
PM MAIL ICQ   Вверх
sergioK
Дата 16.10.2009, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 207
Регистрация: 15.2.2008

Репутация: нет
Всего: нет



Цитата(Neox_GeForce @ 12.10.2009,  18:47)
Сделал я лабораторную роботу. Суть простенькая : В 2 текстовых полях вводим координаты Надписи и по нажатию Enter надпись меняет расположение. 
класс с методом main
Код

package Lab4;
public class Lab4 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        MyWindow mw=new MyWindow("Тест",500,500);
        //mw.setVisible(true);
        mw.run();
        
        
    }

}



А вот и само окно
Код

package Lab4;
import java.awt.*;
import java.awt.event.*;


@SuppressWarnings("serial")
public class MyWindow extends Frame implements Runnable {
    private TextField field1;
    private TextField field2;
    private static Label    text=new Label("Тестовий рядок");
    private static int x=380;
    private static int y=30;
    private static int fieldWidth=50;
    private static int fieldHeight=25;
    public MyWindow(String title,int width,int height){
        super(title);
        try {
        
        this.setLayout(null);
        this.setSize(width, height);
        field1=new TextField("x");
        field2=new TextField("y");
        field1.setName("x");
        field2.setName("y");
        field1.setBounds(x, y, fieldWidth, fieldHeight);
        field2.setBounds(x+60, y, fieldWidth, fieldHeight);
        field1.setBackground(Color.BLACK);
        field2.setBackground(Color.BLACK);
        field1.setForeground(Color.white);
        field2.setForeground(Color.white);
        String text1=text.getText();
        int l=text1.length()*7;
        text.setBounds(5, 10, l, 50);
        
        this.add(field1);
        this.add(field2);
        this.add(text);
        
        
        this.addWindowListener(new WindowAdapter(){
        public void windowClosing(WindowEvent e){
            System.exit(0);
        }
        });
        
        
        
        field1.addActionListener(new TextEventListener(text,field1.getName()));
        field2.addActionListener(new TextEventListener(text,field2.getName()));
                
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
    public static void MoveLabelX(int x){
        int y=text.getY();
        System.out.println("y="+y);
        text.setLocation(x, y);
            }
    public static void MoveLabelY(int y){
        int x=text.getX();
        System.out.println("x="+x);
        text.setLocation(x, y);
        
    }
    @Override
    public void run() {

        // TODO Auto-generated method stub
    this.setVisible(true);    
    }
    
}

  class TextEventListener implements ActionListener{
    private Label label;
    private String field;
      public TextEventListener (Label label, String field){
        this.label=label;
        this.field=field;
    }
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        System.out.println("Text changed! "+e.toString());
        System.out.println(e.getActionCommand());
        if (this.field=="x")
        {
        MyWindow.MoveLabelX(Integer.parseInt(e.getActionCommand()));
            
        }
        else if(this.field=="y")
        {
        MyWindow.MoveLabelY(Integer.parseInt(e.getActionCommand()));
            
        }
        

    }
     
 }

Мне кажется что я как-то складно всё сделал. можно упростить?

наверно у меня какая то другая жава  smile 
 вот это  не работает ? 

Код

   MyWindow.MoveLabelX(Integer.parseInt(e.getActionCommand()));



  а вот так наверно ??
 
Код

      MyWindow.MoveLabelX(((TextField) e.getSource()).getX() );


да 


PM MAIL   Вверх
Neox_GeForce
Дата 17.10.2009, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 14.11.2007
Где: Украина

Репутация: нет
Всего: нет



Переделал. Но все таки не знаю как дать одного слушателя на 2 поля. Ведь потом нужно будет как-то их различать

Сама подпись которую буду двигать
Код

package lab4;

import java.awt.*;

/**
 * Created by IntelliJ IDEA.
 * User: Администратор
 * Date: 16 жовт 2009
 * Time: 22:42:41
 * To change this template use File | Settings | File Templates.
 */
public class TextLabel extends Label {
    public TextLabel(String text){
        super(text);
        int l=this.getText().length()*7;
        this.setBounds(10,10,l,50);

    }
    public void moveLabelX(int x)

    {
        int y=this.getY();
        this.setLocation(x,y);
    }
      public void moveLabelY(int y)

    {
        int x=this.getX();
        this.setLocation(x,y);
    }
}


Класс текстовго поля
Код

package lab4;
import java.awt.*;
import java.awt.event.*;
/**
 * Created by Дзундза Віктор.
 * User: Администратор
 * Date: 16 жовт 2009
 * Time: 13:27:38
 * To change this template use File | Settings | File Templates.
 */
public class MTextField extends TextField implements TextListener  {
    /**
     * Максимальна довжина рядка в полі.
     */
    private int maxLengthString;

    /**
    
    @param length  максимальна довжина рядка в  текстовому полі
     */
    public MTextField( int length,String name){
      super();
      this.setName(name);
      this.setMaxLengthString(length);
      this.setForeground(Color.white);
      this.setBackground(Color.black);
      this.setSize(50,20);
      this.setVisible(true);
      this.addTextListener(this);


  }
/*Метод который не позволяет ввести более n-го числа символов
*/
    private void checkSize(int length) {
        //To change body of created methods use File | Settings | File Templates.
          int caret = this.getCaretPosition ();
                if ( this.getText ().length () > length )
                {     
                    this.setText ( this.getText ().substring ( 0, length ) );
                    this.setCaretPosition ( length );
                    
                    if ( caret > length )
                    {
                        this.setCaretPosition ( length );
                    }
System.out.println("Max length "+getMaxLengthString()+"!"+"\n");
                }

    }


    public int getMaxLengthString() {
        return maxLengthString;
    }

    public void setMaxLengthString(int maxLengthString) {
        this.maxLengthString = maxLengthString;
    }

    public void textValueChanged(TextEvent e)
    {
        checkSize(getMaxLengthString());
    }

}




И клас самого окна з слушателями
 
Код

package lab4;


import java.awt.*;
import java.awt.event.*;
import lab4.TextLabel;

@SuppressWarnings("serial")
public class MyWindow extends Frame   {
    private  MTextField mTextFieldx=new MTextField(3,"x");
    private  MTextField mTextFieldy=new MTextField(3,"y");
    private  TextLabel    text=new TextLabel("Тестовий рядок");

    public MyWindow(String title,int width,int height){
        super(title);
        try {
        
        this.setLayout(null);
        this.setSize(width, height);

        this.add(text);
        this.add(mTextFieldx);
        this.add(mTextFieldy);

        mTextFieldx.setLocation(370,30);
        mTextFieldy.setLocation(430,30);


        mTextFieldx.addActionListener(new TextEventListener(mTextFieldx,text));
        mTextFieldy.addActionListener(new TextEventListener(mTextFieldy,text));
        this.addWindowListener(new WindowAdapter(){
        public void windowClosing(WindowEvent e){
            System.exit(0);
        }
        });

        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }


    
}

  class TextEventListener implements ActionListener{
   private TextLabel textLabel;
   private MTextField textField;

    //private String field;
      public TextEventListener (MTextField textField, TextLabel textLabel ){
        this.textField=textField;
        this.textLabel=textLabel;
       
    }
    public void actionPerformed(ActionEvent e) {
       try{
        if(textField.getName()=="x")
        {
         textLabel.moveLabelX(Integer.parseInt(textField.getText()));
        }
        else
        {
          textLabel.moveLabelY(Integer.parseInt(textField.getText()));
        }
       }
       catch(NumberFormatException ex1)
       {
        System.out.println("Вводити можна тільки цифри");
      //  System.out.println(ex1.toString());
        //ex1.printStackTrace();
       }
       catch(Exception ex2)
       {
        System.out.println(ex2.toString());
        ex2.printStackTrace();
       }
        

    }


  }




--------------------
user posted image
Челябинские программисты настолько суровы, что обходятся без компиляторов.
Челябинские программисты настолько суровы, что считают ассемблер недопустительной роскошью - они вручную магнетизируют участки жесткого диска.
PM MAIL ICQ   Вверх
Neox_GeForce
Дата 17.10.2009, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 14.11.2007
Где: Украина

Репутация: нет
Всего: нет



Ура. Сделал одну прослушку на текстовые поля

Код

package lab4;


import java.awt.*;
import java.awt.event.*;
import lab4.TextLabel;


@SuppressWarnings("serial")
public class MyWindow extends Frame implements TextListener  {
    private  MTextField mTextFieldx=new MTextField(3,"x");
    private  MTextField mTextFieldy=new MTextField(3,"y");
    private  TextLabel    text=new TextLabel("Тестовий рядок");

    public MyWindow(String title,int width,int height){
        super(title);
        try {
        
        this.setLayout(null);
        this.setSize(width, height);

        this.add(text);
        this.add(mTextFieldx);
        this.add(mTextFieldy);

        mTextFieldx.setLocation(370,30);
        mTextFieldy.setLocation(430,30);

        mTextFieldx.addTextListener(this);
        mTextFieldy.addTextListener(this);

        this.setResizable(false); 

        this.addWindowListener(new WindowAdapter(){
        public void windowClosing(WindowEvent e){
            System.exit(0);
        }
        });

        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }


    @Override
    public void textValueChanged(TextEvent e) {
        //To change body of implemented methods use File | Settings | File Templates.
   try  {
        MTextField temp=(MTextField)e.getSource();
        if(e.getSource()==mTextFieldx)
    {

       this.text.moveLabelX(Integer.parseInt(temp.getText()));
    }
        else
    {
      this.text.moveLabelY(Integer.parseInt(temp.getText()));
    }

    }
    catch(NumberFormatException ex)
    {
      System.out.println("Вводити можно тільки цийри!");
      System.err.println(ex.toString());
    }
    }
}





--------------------
user posted image
Челябинские программисты настолько суровы, что обходятся без компиляторов.
Челябинские программисты настолько суровы, что считают ассемблер недопустительной роскошью - они вручную магнетизируют участки жесткого диска.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0540 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.