2014-12-24 2 views
2

Пересмотренныйэто, кажется, подчеркнут красной

Теперь импорт появляется подчеркнуты здесь

импорт javax.swing.event.ChangeListener;

, а также ниже линии появляется подчеркнуты

slider.addChangeListener (ChangeListener());

Я не ясно об этом на всех

Полный код

package areaofrectangleslider; 

import java.awt.Color; 
import java.awt.Container; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.FlowLayout; 
import java.awt.Graphics; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.Random; 
import javafx.beans.value.ChangeListener; 
import javafx.beans.value.ObservableValue; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JSlider; 
import javax.swing.JTextField; 
import javax.swing.event.ChangeListener; 


public class Areaofrectangleslider extends JFrame implements 
     ActionListener, ChangeListener { 

    private JPanel panel; 
    private Random random; 
    private javax.swing.Timer timer; 
    private JSlider slider; 
    private JTextField gapField; 
    private JLabel gapLabel; 



    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     // TODO code application logic here 
     EventQueue.invokeLater(new Runnable() { 
     public void run(){ 
     Areaofrectangleslider frame = new Areaofrectangleslider(); 
     frame.setSize(250,300); 
     frame.createGUI(); 
     frame.setVisible(true); 

     } 


    }); 
    } 

    public void actionPerformed(ActionEvent e) { 
    // throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
    int x, y, size; 
    Graphics paper = panel.getGraphics(); 
    x = random.nextInt(200); 
    y = random.nextInt(200); 
    size = random.nextInt(20); 
    paper.fillOval(x, y, size, size); 

    } 

    @Override 
    public void changed(ObservableValue observable, Object oldValue, Object newValue) { 
     // throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
    int timeGap = slider.getValue(); 
    gapField.setText(Integer.toString(timeGap)); 
    timer.setDelay(timeGap); 

    } 

    private void createGUI() { 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     Container window = getContentPane(); 
     window.setLayout(new FlowLayout()); 
     random = new Random(); 

     panel = new JPanel(); 
     panel.setPreferredSize(new Dimension(200,200)); 
     panel.setBackground(Color.white); 
     window.add(panel); 

     gapLabel = new JLabel("TIme Gap: "); 
     window.add(gapLabel); 
     gapField = new JTextField(10); 
     window.add(gapField); 

     slider = new JSlider(JSlider.HORIZONTAL,200,2000,1000); 
     window.add(slider); 
     slider.addChangeListener(ChangeListener()); 
     gapField.setText(Integer.toString(slider.getValue())); 
     timer = new javax.swing.Timer(1000, this); 
     timer.start(); 



//  throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
    } 

} 

Старый

Я не могу показаться, чтобы выяснить, почему я получаю ошибку здесь

slider.addChangeListener(this); 

(this) появляется подчеркнуто красным

Консоль считывания я получаю:

Exception in thread "main" java.lang.ClassCastException: areaofrectangleslider.Areaofrectangleslider cannot be cast to javax.swing.event.ChangeListener 
    at areaofrectangleslider.Areaofrectangleslider.createGUI(Areaofrectangleslider.java:91) 
    at areaofrectangleslider.Areaofrectangleslider.main(Areaofrectangleslider.java:46) 
Java Result: 

Полный код ниже

package areaofrectangleslider; 

import java.awt.Color; 
import java.awt.Container; 
import java.awt.Dimension; 
import java.awt.FlowLayout; 
import java.awt.Graphics; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.Random; 
import javafx.beans.value.ChangeListener; 
import javafx.beans.value.ObservableValue; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JSlider; 
import javax.swing.JTextField; 


public class Areaofrectangleslider extends JFrame implements 
     ActionListener, ChangeListener { 

    private JPanel panel; 
    private Random random; 
    private javax.swing.Timer timer; 
    private JSlider slider; 
    private JTextField gapField; 
    private JLabel gapLabel; 



    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     // TODO code application logic here 
     Areaofrectangleslider frame = new Areaofrectangleslider(); 
     frame.setSize(250,300); 
     frame.createGUI(); 
     frame.setVisible(true); 


    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
    // throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
    int x, y, size; 
    Graphics paper = panel.getGraphics(); 
    x = random.nextInt(200); 
    y = random.nextInt(200); 
    size = random.nextInt(20); 
    paper.fillOval(x, y, size, size); 

    } 

    @Override 
    public void changed(ObservableValue observable, Object oldValue, Object newValue) { 
     // throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
    int timeGap = slider.getValue(); 
    gapField.setText(Integer.toString(timeGap)); 
    timer.setDelay(timeGap); 

    } 

    private void createGUI() { 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     Container window = getContentPane(); 
     window.setLayout(new FlowLayout()); 
     random = new Random(); 

     panel = new JPanel(); 
     panel.setPreferredSize(new Dimension(200,200)); 
     panel.setBackground(Color.white); 
     window.add(panel); 

     gapLabel = new JLabel("TIme Gap: "); 
     window.add(gapLabel); 
     gapField = new JTextField(10); 
     window.add(gapField); 

     slider = new JSlider(JSlider.HORIZONTAL,200,2000,1000); 
     window.add(slider); 
     slider.addChangeListener(this); 
     gapField.setText(Integer.toString(slider.getValue())); 
     timer = new javax.swing.Timer(1000, this); 
     timer.start(); 



//  throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
    } 

} 
+1

НЕ ИСПОЛЬЗУЙТЕ 'getGraphics()', это не то, как работает обычная роспись. См. [Живопись в AWT и Swing] (http://www.oracle.com/technetwork/java/painting-140037.html) и [Выполнение пользовательской живописи] (http://docs.oracle.com/javase/tutorial/ uiswing/painting /) для получения более подробной информации – MadProgrammer

+0

Хорошее описание вашей проблемы и полного кода. Больше людей должны задавать такие вопросы. – markspace

ответ

5

javafx.beans.value.ChangeListener; не то же самое, как javax.swing.event.ChangeListener

НИКОГДА не используйте getGraphics, чтобы попытаться выполнить собственную картину, это а не как живопись работает в Swing. См Painting in AWT and Swing и Performing Custom Painting для получения более подробной информации о том, как на заказ работ живописи и должны быть реализованы в Swing,

Кроме того (как комментировал ниже), все UI создания и модификации должны осуществляться в рамках мероприятия Диспетчерская тему ...

public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      Areaofrectangleslider frame = new Areaofrectangleslider(); 
      frame.setSize(250,300); 
      frame.createGUI(); 
      frame.setVisible(true); 
     } 
    }); 
} 

См Initial Threads для более подробной информации

+2

Кроме того, весь код Swing должен быть выполнен в [Event Dispatch Thread.] (Http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html). Точка входа 'main()' не , как минимум. – markspace

+1

@markspace. По крайней мере, вы никогда не должны предполагать, что 'main' будет вызываться в контексте EDT. – MadProgrammer

0

Метод подписи addChangeListner в JSlider является public void addChangeListener(ChangeListener l) где ChangeListner является javax.swing.event.ChangeListener. Таким образом, в вашем коде вы передаете javafx.beans.value.ChangeListener тип, который является неправильным, и он не может быть запущен.

+0

. Я не понимаю, javax.swing.event.ChangeListener не доступен для импорта. – Ingram

+0

@MrAssistance [Да, это так] (http : //docs.oracle.com/javase/7/docs/api/javax/swing/event/ChangeListener.html) – MadProgrammer

+0

Я разместил свой новый код выше - я довольно застрял в этом – Ingram

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