2014-12-11 2 views
1

Итак, у меня есть программа, которая предназначена для обновления панели термометра (с использованием drawRect) динамически в зависимости от положения JSlider. Я пытаюсь передать это значение внешнему методу, поэтому я могу использовать его для обновления размера прямоугольника. Я парень VB, поэтому мне трудно понять, как это сделать.Передача значения внешнему методу в Java

Вот мой основной класс:

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

public class ThermoProject extends JApplet 
{ 
    JSlider mySlider; 
    JPanel sliderPanel; 
    JPanel northernPanel = new NorthPanel(); 
    JLabel printLabel = new JLabel(""); 
    static int fillSize = 0; 
    int topSize = 100; 


    public void init() //init is the "main" for an applet 
    { 
     buildSliderPanel(); 
     sliderPanel.setBackground(Color.gray); 
     add(northernPanel, BorderLayout.NORTH); //separate class 
     add(printLabel, BorderLayout.WEST); //add label to top 
     add(sliderPanel, BorderLayout.SOUTH); //add the panel to the south of the borderLayout 
    } 



    private void buildSliderPanel() 
    { 
     sliderPanel = new JPanel(); 
     //JSlider(direction, beginning, end, initial location) 
     mySlider = new JSlider(JSlider.HORIZONTAL, 0, 100, 0); 
     mySlider.setMajorTickSpacing(10); 
     mySlider.setPaintTicks(true); 
     mySlider.setPaintLabels(true); 
     mySlider.setSnapToTicks(true); 

     //add listener 
     mySlider.addChangeListener(new SliderListener()); 

     //add to panel 
     sliderPanel.add(mySlider); 

    } 


    public class SliderListener implements ChangeListener 
    { 

     public void stateChanged(ChangeEvent e) 
     { 
      //change when slider is moved 
      updateThermo(mySlider.getValue()); 
      //topSize = 100 - fillSize; 
      //drawRect(x, y, width, height) 
      //fillRect(x, y, width, height) 
      repaint(); 
     } 
    } 
} 

А вот мой подкласс, который в основном используется для создания отдельного JPanel.

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

public class NorthPanel extends JPanel 
{ 
    JPanel theNorthernPanel; 
    int fillSize = 0; 

    public void paint(Graphics g) 
    { 
     //drawRect() and fillRect() args are x, y, width, height 
     g.drawRect(90, 90, 200, 30); 
     g.setColor(Color.red); 
     g.fillRect(90, 90, fillSize, 30); 
    } 

    public NorthPanel() 
    { 
     JPanel theNorthernPanel = new JPanel(); 
     setPreferredSize(new Dimension(200, 200)); 
     JLabel printLabel = new JLabel(String.valueOf(fillSize)); 
     theNorthernPanel.add(printLabel); 
     add(theNorthernPanel); 

    } 

    public void updateThermo(int temperature) 
    { 
     fillSize = temperature; 
    } 

} 

ответ

0

попробовать это:

NorthPanel northernPanel = новый NorthPanel(); // объявить

, а затем,

northernPanel.updateThermo (mySlider.getValue()); // для звонка

+0

Спасибо, это был только я instansiating northenPanel неправильно. –

0

Вы рисуете код сломанный, начните с просмотра Painting in AWT and Swing и Performing Custom Painting для получения более подробной информации.

Для вызова метода необходима ссылка на экземпляр класса, который вы хотите позвонить ...

Началу пути изменения

JPanel northernPanel = new NorthPanel(); 

в

NorthPanel northernPanel = new NorthPanel(); 

А потом использовать его для вызова метода ....

northernPanel.updateThermo(mySlider.getValue()); 
0

Я верю, что вы должны изменить содержание SliderListener к:

public class SliderListener implements ChangeListener 
{ 

    public void stateChanged(ChangeEvent e) 
    { 
     //change when slider is moved 
     ((NorthPanel)northernPanel).updateThermo(mySlider.getValue()); 
     //topSize = 100 - fillSize; 
     //drawRect(x, y, width, height) 
     //fillRect(x, y, width, height) 
     northernPanel.repaint(); 
    } 
} 

В фрагменте кода вы представили вы пытаетесь вызвать член ThermoProject. принять также понятие приведения к NorthPanel, которая необходима, потому что вы объявили northernPanel как более общего типа:

JPanel northernPanel = new NorthPanel(); 
Смежные вопросы