Итак, у меня есть программа, которая предназначена для обновления панели термометра (с использованием 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;
}
}
Спасибо, это был только я instansiating northenPanel неправильно. –