Robię właśnie program który ma w jakimś stopniu udawać painta. Wymyśliłem to sobie tak, że u góry (BorderLayout.NORTH) będę miał panel z przyciskami, zaś w środku (BorderLayout.CENTER) będę miał biały panel na którym będę rysował.
Są one w dwóch różnych plikach. W pliku górnego panelu posiadam publiczną metodę getPressedButton() która zwraca index wciśniętego klawisza. Jest ona potrzebna, żeby określić co będę rysował na centralnym panelu.
I teraz pytanie.
W jaki sposób mogę w klasie centralnego panelu skorzystać z metody z innej klasy w tym samym pakiecie?
Klasa górnego panelu:
package paint;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class TopPanel extends JPanel
{
public static final int RECTANGLE_1 = 1;
public static final int RECTANGLE_2 = 2;
public static final int CIRCLE_1 = 3;
public static final int CIRCLE_2 = 4;
private FirstPanel firstPanel;
private SecondPanel secondPanel;
private int pressedButton;
public TopPanel()
{
initComponents();
}
public void initComponents()
{
//setBorder(BorderFactory.createRaisedBevelBorder());
setBorder(BorderFactory.createEmptyBorder(0,15,0,15));
firstPanel = new FirstPanel();
add(firstPanel);
secondPanel = new SecondPanel();
add(secondPanel);
}
private class FirstPanel extends JPanel
{
private JButton rectangleButton, secondRectangleButton;
private JButton circleButton, secondCircleButton;
public FirstPanel()
{
initComponents();
initSettings();
}
private void initSettings()
{
setLayout(new GridLayout(2, 2, 5 , 5));
Dimension dimension = new Dimension((int)(MainFrame.WIDTH * 0.75-15), (int)(MainFrame.HEIGHT * 0.1));
setSize(new Dimension(dimension));
setMinimumSize(dimension);
setMaximumSize(dimension);
setPreferredSize(dimension);
setBorder(BorderFactory.createTitledBorder("Narzedza"));
//setBackground(Color.BLUE);
}
private void initComponents()
{
rectangleButton = new JButton("Prostokąt pierwszy");
secondRectangleButton = new JButton("Prostokąt drugi");
circleButton = new JButton("Pierwszy okrąg");
secondCircleButton = new JButton("Drugi okrąg");
rectangleButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { pressedButton = RECTANGLE_1; }
});
secondRectangleButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { pressedButton = RECTANGLE_2; }
});
circleButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { pressedButton = CIRCLE_1; }
});
secondCircleButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { pressedButton = CIRCLE_2; }
});
add(rectangleButton);
add(secondRectangleButton);
add(circleButton);
add(secondCircleButton);
pressedButton = RECTANGLE_1;
}
//public void actionPerformed(ActionEvent e) { pressedButton = RECTANGLE_1; }
}
public int getPressedButton(){ return pressedButton; }
private class SecondPanel extends JPanel
{
public SecondPanel()
{
initComponents();
}
private void initComponents()
{
Dimension dimension = new Dimension((int)(MainFrame.WIDTH*0.25)-15, (int)(MainFrame.HEIGHT * 0.1));
setSize(dimension);
setMinimumSize(dimension);
setMaximumSize(dimension);
setPreferredSize(dimension);
setBorder(BorderFactory.createTitledBorder("Atrybuty"));
}
}
}
Klasa środkowego panelu
package paint;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
public class CenterPanel extends JPanel
{
private Point pressed, relased;
public CenterPanel()
{
initSettings();
initComponents();
}
private void initSettings()
{
Dimension dimension = new Dimension(MainFrame.WIDTH, (int)(MainFrame.HEIGHT * 0.9));
setSize(dimension);
setMinimumSize(dimension);
setMaximumSize(dimension);
setPreferredSize(dimension);
setLocation(new Point(0, (int)(MainFrame.HEIGHT * 0.1)));
setBorder(BorderFactory.createEtchedBorder());
setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
setBackground(Color.WHITE);
addMouseListener(new KlasaZdarzenia());
}
public void paintComponent(Graphics g)
{
if(getPressedButton() == TopPanel.RECTANGLE_1) //?????????????????????????????????
}
private void initComponents()
{
pressed = new Point(-1, -1);
relased = new Point();
}
private class KlasaZdarzenia implements MouseListener
{
public void mouseClicked(MouseEvent arg0) {}
public void mouseEntered(MouseEvent arg0) {}
public void mouseExited(MouseEvent arg0) {}
public void mousePressed(MouseEvent e)
{
if(pressed.getX() == -1)
pressed = e.getPoint();
}
public void mouseReleased(MouseEvent e)
{
relased = e.getPoint();
pressed.setLocation(-1, -1);
}
}
}