2016-09-24 2 views
2

Я пытаюсь добавить функциональность в Jbutton, используя подкласс, но Jbutton фактически объявлен и определен в суперклассе. Вот мой код:Как добавить funtionallity в Jbutton, расположенный в суперклассе из подкласса?

JButton zz=new JButton(ss); 
     zz.setBounds(470,70,35,35); 
     zz.setBorder(oo); 
     zz.setBackground(new Color(0,170,120)); 
     l.add(zz); 

Это мой JButton находится в супер класс с именем, как недвижимые в моих project.I создали подкласс, в котором я пытаюсь добавить действие слушателя для этой кнопки. Вот мой подкласс:

public class assan extends RealEstate{ 
zz.addActionListener(new ActionListener(){ 
    public void actionPerformed(ActionEvent u) 
    { 
     System.out.println("kk"); 
    } 
});} 

приклад я запустить эту программу, я получил различные типы ошибок, таких как: Package 'zz' does not exist и т.д. Это мой полный код:

package realestate; 

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

public class Realestate extends JFrame { 
Realestate() 
{ 
    JLabel l=new JLabel(new ImageIcon("C:\\Users\\MUHAMMAD SHAHAB\\Documents\\NetBeansProjects\\Real Estate\\src\\real\\estate\\file (2).jpg")); 
        l.setBounds(100,50,300,250); 
        add(l); 
        ImageIcon ss=new ImageIcon("C:\\Users\\MUHAMMAD SHAHAB\\Documents\\NetBeansProjects\\Real Estate\\src\\real\\estate\\1470672145_Help_mark_query_question_support_talk.png"); 
       public JButton zz=new JButton(ss); 
      zz.setBounds(470,70,35,35); 
      zz.setBackground(new Color(0,170,120)); 
      l.add(zz); 
} 
    public class assan extends Realestate{ 
     zz.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent o) 
      { 
       System.out.println("Cena"); 
      } 
     }); 
    } 
    public static void main(String[] args) { 
     RealEstate v=new RealEstate(); 
     v.setUndecorated(true); 
     v.setVisible(true); 
     v.setBounds(350,200,600,350); 
     v.setForeground(Color.WHITE); 
assan n=new assan(); 
    } 

} 

, что я делаю неправильно ?

+0

Предоставить полный код. Вышеприведенное не компилируется. – GOXR3PLUS

+0

ok wait a min GoX – Mcolo

+0

У вас есть несколько вариантов: убедитесь, что 'zz' виден подклассу ('public',' protected' или package visible 'field' ИЛИ добавить получателя в суперкласс. – c0der

ответ

0
  • Поместите следующий класс в файле RealState.java:

    public class RealEstate extends JFrame { 
    
        protected JButton zz = null; 
    
        RealEstate() { 
         JLabel l = new JLabel("Label"); 
         l.setBounds(100, 50, 300, 250); 
         add(l); 
    
         // ImageIcon ss = new ImageIcon("path_to_image_file"); 
         zz = new JButton("MyButton"); 
         zz.setBounds(470, 70, 35, 35); 
         zz.setBackground(new Color(0, 170, 120)); 
         add(zz); 
        } 
    } 
    
  • И поставил подкласс в своем собственном файле: Assan.java

    public class Assan extends RealEstate { 
    
        public Assan() { 
         zz.addActionListener(new ActionListener(){ 
          public void actionPerformed(ActionEvent o) { 
           System.out.println("Cena"); 
          } 
         }); 
        } 
    
    
        public static void main(String[] args) { 
         Assan v = new Assan(); 
         v.setUndecorated(true); 
         v.setVisible(true); 
         v.setBounds(350, 200, 600, 350); 
         v.setForeground(Color.WHITE); 
        } 
    } 
    

Обратите внимание, что я сделал два изменения:

  • сделать переменный, которую вы хотите изменить в подклассе protected
  • движения основного метода в подкласс, если вы хотите, чтобы обработчик события для выполнения.
  • И, наконец, вы должны следовать некоторым учебникам, например
    1. Here вы узнаете о наследовании
    2. Java Swing учебники.
+0

ujulu это работает сейчас – Mcolo

1

Imagine that this is the superclass:

public class RealEstate{ 
    public JButton button = new JButton("Button Name"); 
} 

And this the subclass:

public class SubClass extends RealEstate{ 

    /** 
    * Constructor 
    */ 
    public SubClass(){ 

     //The Button is public so it is visible to the subclass 
     button.addActionListener(new ActionListener(){ 
       public void actionPerformed(ActionEvent u){ 
       System.out.println("Hello World!"); 
       } 
     }); 
    } 
} 

также посмотреть на это (tutorial)

A minimal example of the code you may need:

import java.awt.Color; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.BorderFactory; 
import javax.swing.ImageIcon; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.border.Border; 

public class RealEstate extends JFrame { 

    public JButton button = new JButton("Button"); 

    /** 
    * Constructor 
    */ 
    public RealEstate() { 


    //Button 
     button.setText("I am a JButton"); 

     // ...rest of the code below 
    } 

    /** 
    * The SubClass 
    */ 
    protected class SubClass extends RealEstate { 

     /** 
     * Constructor 
     */ 
     public SubClass() { 

      //accessing the button from the SubClass 
      button.addActionListener(new ActionListener() { 
       public void actionPerformed(ActionEvent u) { 
        System.out.println("Hello World!"); 
       } 
      }); 
     } 

    } 

    /** 
    * Main Method 
    * 
    * @param args 
    */ 
    public static void main(String[] args) { 
     RealEstate v = new RealEstate(); 
     v.setUndecorated(true); 
     v.setVisible(true); 
     v.setSize(600,600); 
     v.setForeground(Color.WHITE); 

     v.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
} 
+0

GoXR3Plus, когда я публиковал сообщение с Jbutton, он дает мне ошибку: «незаконный старт выражения» – Mcolo

+0

В чем смысл/цель 'l.add (button)'? – c0der

+0

@Mcolo Я отредактировал код. Хотя ему нужны и макет для правильной работы. Я получу полный пример, когда вернусь к компьютеру :) – GOXR3PLUS

0

Пожалуйста, смотрите ниже и внимательно прочитайте комментарии. Код предназначен не только, чтобы выделить некоторые ошибки, но также демонстрируют идею MCVE:

import java.awt.Color; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 

//Java is case sensetive. You can't call a class Realestate 
//and later use RealEstate v= new RealEstate(); 
public class RealEstate /*Realestate*/ extends JFrame { 

    //to make zz visible to other classes it should be a field 
    public JButton zz; 

    RealEstate() 
    { 
     //remove what is not needed to demonstrate the problem, remove it 
     //JLabel l 
     //ImageIcon ss=new ImageIcon("C:\\Users\\MUHAMMAD SHAHAB\\Documents\\NetBeansProjects\\Real Estate\\src\\real\\estate\\1470672145_Help_mark_query_question_support_talk.png"); 

     //wrong 
     //public JButton zz=new JButton("Button"); 
     zz=new JButton("Button"); 
     zz.setBounds(470,70,35,35); 
     zz.setBackground(new Color(0,170,120)); 

     add(zz); 
     //you can't add a button to a JLabel 
     //l.add(zz); 
    } 

    public static void main(String[] args) { 

     RealEstate v= new RealEstate(); 
     v.setUndecorated(true); 
     v.setVisible(true); 
     v.setBounds(350,200,600,350); 
     v.setForeground(Color.WHITE); 
     Assan n= new Assan(); 
    } 
} 

//Use right naming convention. Assan and not assan 
class Assan extends RealEstate{ 

    //this code has to be enclosed in a constructor 
    //or a method 
    //zz.addActionListener(new ActionListener(){ 
    // public void actionPerformed(ActionEvent o) 
    // { 
    //  System.out.println("Cena"); 
    // } 
    //}); 

    Assan(){ 

     zz.addActionListener(new ActionListener(){ 
      @Override 
      public void actionPerformed(ActionEvent o) 
      { 
       System.out.println("Cena"); 
      } 
     }); 
    } 
} 
+0

Я запустил вышеприведенный код, но я получаю «Исключение Null pointer in main» , – Mcolo

+0

Я все еще получаю то же исключение. – Mcolo

+0

Этот код не вызывает исключения. Я добавил 'add (zz);', чтобы показать это, но код далеко не является правильным твердым рабочим кодом. Вы спросили о доступе к 'JButton' из подкласса, и вы получили правильные ответы. Для любых других вопросов/вопросов вам нужно разместить новый вопрос (*** include *** a [MCVE]). Также см. Http://stackoverflow.com/help/someone-answers – c0der

Смежные вопросы