powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / nullpointer exception в интерфейсе swing
16 сообщений из 16, страница 1 из 1
nullpointer exception в интерфейсе swing
    #38937091
stut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Меня интересует почему при вводе в диалоговое окно (текстовые поля) координат ля рисования точки у меня выскакивает такое исключение. ВВОжу стандатрные координаты 3,3,9,9 (нач. И конечная точка с х и y). Также ввожу толщиную линии (stroke) например 3 или 5. Не умаю что дело в формате ибо ввод например 3.0f или 3D вместо 3 ничего не изменяет. Тем более если оставить пустым оно из этих 5 полей то нажатия на кнопку Draw вызывает NumberFormatException, а оставляюпустым ля цвета то никакой ошибки не появляется. В чем зесь дело? Каким образом вводить координаты --код правильный.
...
Рейтинг: 0 / 0
nullpointer exception в интерфейсе swing
    #38937161
stut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот код в котором возникает исключение.


try {
line = new Line(mainView.getFirstPointXCoordinate(),
mainView.getFirstPointYCoordinate(),
mainView.getSecondPointXCoordinate(),
mainView.getSecondPointYCoordinate());

try {
Graphics g = null;

mainView.setVisible(false);
lineView.setVisible(true);

lineView.paintComponent(g, line, mainView.getLineColor(),
(float) mainView.getLineThickness());


} catch (NullPointerException ex) {
System.out.println(ex);
}

} catch (NumberFormatException e) {
System.out.println(e);

} -- может дело в инициализации класа Graphics нулю. Как тогда это сделать?
...
Рейтинг: 0 / 0
nullpointer exception в интерфейсе swing
    #38937165
stut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот код в котором возникает исключение.


try {
line = new Line(mainView.getFirstPointXCoordinate(),
mainView.getFirstPointYCoordinate(),
mainView.getSecondPointXCoordinate(),
mainView.getSecondPointYCoordinate());

try {
Graphics g = null;

mainView.setVisible(false);
lineView.setVisible(true);

lineView.paintComponent(g, line, mainView.getLineColor(),
(float) mainView.getLineThickness());


} catch (NullPointerException ex) {
System.out.println(ex);
}

} catch (NumberFormatException e) {
System.out.println(e);

} -- может дело в инициализации класа Graphics нулю. Как тогда это сделать?
...
Рейтинг: 0 / 0
nullpointer exception в интерфейсе swing
    #38937190
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
https://docs.oracle.com/javase/tutorial/uiswing/painting/closer.html
Перечисленные в статье методы нужно не вызывать, а переопределять. Вызывает их платформа.
...
Рейтинг: 0 / 0
nullpointer exception в интерфейсе swing
    #38937292
stut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы думаете. Что дело в переопределение метода, а не присоение 0 Graphics. Не знаю как иначе инициализировать Graphics.
Вот переопределение:
public void paintComponent(Graphics g, Object object, String color,
float thickness) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setStroke(new BasicStroke(thickness));
g2.setColor(Color.getColor(color));
g2.draw((Shape) object);
}
...
Рейтинг: 0 / 0
nullpointer exception в интерфейсе swing
    #38937335
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stutВы думаете. Что дело в переопределение метода, а не присоение 0 Graphics.
Я не думаю. Я знаю.

stut Не знаю как иначе инициализировать Graphics.
Вот переопределение:
Вместо того чтобы постить несвязные текст, запустили бы любой из сотен примеров, которых легко найти гуглом
Например:
http://zetcode.com/gfx/java2d/basicdrawing/
...
Рейтинг: 0 / 0
nullpointer exception в интерфейсе swing
    #38937893
stut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот аналогичный но более нужный мне код для прямоугольника:
В принципе должен отвечать системе MVC
--работает, кроме того, что при заполнение формы, кнопка Draw неактивна-
потому не передает введеные знгачение в клас rectangleview для рисование заполненого
прямоугольника. Подскажите, в чем ошибка--код в 5 разных файлах.
1)
package recct;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;
import javax.swing.JComponent;
import javax.swing.JFrame;
import java.lang.Object;
import java.awt.geom.RectangularShape;
import java.awt.geom.Rectangle2D.Double;

public class Pkutnyk extends Rectangle2D.Double {
private double x1;
private double y1;
private double w;
private double h;
private String color;
public Pkutnyk(double x1, double y1, double w, double h) {
this.x1=x1;
this.y1=y1;
this.w=w;
this.h=h;
}

public double getWidth(){ return w;}
public double getHeight(){ return h;}
public double getX1(){return x1;}
public double getY1(){return y1;}

public String getColor() {
return color;
}

public void setColor(String color) {
this.color = color;
}
}
2)
package recct;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class MainView extends JFrame {
private JLabel firstPointX = new JLabel(
"Enter X coordinate of first point");
private JTextField firstPointXt = new JTextField(10);
private JLabel firstPointY = new JLabel(
"Enter Y coordinate of first point");
private JTextField firstPointYt = new JTextField(10);
private JLabel secondPointX = new JLabel(
"Enter X coordinate of second point");
private JTextField secondPointXt = new JTextField(10);
private JLabel secondPointY = new JLabel(
"Enter Y coordinate of second point");
private JTextField secondPointYt = new JTextField(10);
private JLabel rectangleColor = new JLabel("Enter Color");
private JTextField rectangleColort = new JTextField(10);
private JButton button = new JButton("Draw");
public MainView() {
JPanel panel = new JPanel();
this.setTitle("Main");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
this.setSize(200, 500);
this.setLocationRelativeTo(null);
this.setLayout(new GridBagLayout());
this.setVisible(true);
panel.add(firstPointX);
panel.add(firstPointXt);
panel.add(firstPointY);
panel.add(firstPointYt);
panel.add(secondPointX);
panel.add(secondPointXt);
panel.add(secondPointY);
panel.add(secondPointYt);
panel.add(rectangleColor);
panel.add(rectangleColort);
panel.add(button);
this.add(panel, new GridBagConstraints(0, 0, 1, 1, 1, 1,
GridBagConstraints.NORTH, GridBagConstraints.BOTH, new Insets(
2, 2, 2, 2), 0, 0));
}
public double getFirstPointX() {
return Double.parseDouble(firstPointXt.getText());
}
public double getFirstPointY() {
return Double.parseDouble(firstPointYt.getText());
}
public double getWidtht() {
return Double.parseDouble(secondPointXt.getText())-getFirstPointX();
}
public double getHeightt() {
return Double.parseDouble(secondPointYt.getText())-getFirstPointY();
}
public String getrectangleColor() {
return rectangleColort.getText();
}
public void addButtonListener(ActionListener listenForButton) {
button.addActionListener(listenForButton);
}
void displayErrorMessage(String errorMessage){
JOptionPane.showMessageDialog(this, errorMessage);
}
}

3)
package recct;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.geom.Rectangle2D;
public class RectangleView extends JPanel {
double x;
double y;
double w;
double h;

public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
Pkutnyk rect = new Pkutnyk(x, y, w, h);
g2.setPaint(Color.RED);
g2.fill(rect);

}
public void main() {
RectangleView rects = new RectangleView();
JFrame frame = new JFrame("Pryamokutnyk");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E);
frame.add(rects);
frame.setSize(360, 300);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
4)
package recct;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Controller {

private Pkutnyk pkut;
private MainView mainView;
private RectangleView rview;

public Controller(Pkutnyk pkut, MainView mainView) {
this.pkut = pkut;
this.mainView = mainView;
this.mainView.addButtonListener(new ButtonListener());
}

class ButtonListener implements ActionListener {

public void actionPerformed(ActionEvent arg0) {
try {
rview.x = mainView.getFirstPointX();
rview.y = mainView.getFirstPointY();
rview.w = mainView.getWidtht();
rview.h = mainView.getHeightt();
rview.main();
mainView.setVisible(false);
rview.setVisible(true);


} catch (NumberFormatException ex) {
System.out.println(ex);

}
}
}
}

5)
package recct;
public class Appl {
public static void main(String[] args) {
MainView mainView = new MainView();
RectangleView rectView=new RectangleView();
mainView.setVisible(true);
rectView.setVisible(false);
}
}
...
Рейтинг: 0 / 0
nullpointer exception в интерфейсе swing
    #38937989
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мля, ну когда вы уже откроете для себя тэг src на форме ввода?
...
Рейтинг: 0 / 0
nullpointer exception в интерфейсе swing
    #38938116
stut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
ну уже звиняйте за прямокутник (не прямоугольник) --надо так мне представить.
Надо как-то связать этот листенер с кликом--а то не активная кнопка при нажатие--и даные из полей ввода не передаются в клас ВидаПрямоугольника для инициализации постоения и заполнения этой фигуры.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
//1)
package recct;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;
import javax.swing.JComponent;
import javax.swing.JFrame;
import java.lang.Object; 
import java.awt.geom.RectangularShape;
import java.awt.geom.Rectangle2D.Double;

public class Pkutnyk extends Rectangle2D.Double {
private double x1;
private double y1;
private double w;
private double h;
private String color;
public Pkutnyk(double x1, double y1, double w, double h) {
this.x1=x1;
this.y1=y1;
this.w=w;
this.h=h;
}

public double getWidth(){ return w;}
public double getHeight(){ return h;}
public double getX1(){return x1;}
public double getY1(){return y1;}

public String getColor() {
return color;
}

public void setColor(String color) {
this.color = color;
} 
}
//2)
package recct;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class MainView extends JFrame {
private JLabel firstPointX = new JLabel(
"Enter X coordinate of first point");
private JTextField firstPointXt = new JTextField(10);
private JLabel firstPointY = new JLabel(
"Enter Y coordinate of first point");
private JTextField firstPointYt = new JTextField(10);
private JLabel secondPointX = new JLabel(
"Enter X coordinate of second point");
private JTextField secondPointXt = new JTextField(10);
private JLabel secondPointY = new JLabel(
"Enter Y coordinate of second point");
private JTextField secondPointYt = new JTextField(10);
private JLabel rectangleColor = new JLabel("Enter Color");
private JTextField rectangleColort = new JTextField(10);
private JButton button = new JButton("Draw");
public MainView() {
JPanel panel = new JPanel();
this.setTitle("Main");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
this.setSize(200, 500);
this.setLocationRelativeTo(null);
this.setLayout(new GridBagLayout());
this.setVisible(true);
panel.add(firstPointX);
panel.add(firstPointXt);
panel.add(firstPointY);
panel.add(firstPointYt);
panel.add(secondPointX);
panel.add(secondPointXt);
panel.add(secondPointY);
panel.add(secondPointYt);
panel.add(rectangleColor);
panel.add(rectangleColort);
panel.add(button);
this.add(panel, new GridBagConstraints(0, 0, 1, 1, 1, 1,
GridBagConstraints.NORTH, GridBagConstraints.BOTH, new Insets(
2, 2, 2, 2), 0, 0));
}
public double getFirstPointX() {
return Double.parseDouble(firstPointXt.getText());
}
public double getFirstPointY() {
return Double.parseDouble(firstPointYt.getText());
}
public double getWidtht() {
return Double.parseDouble(secondPointXt.getText())-getFirstPointX();
}
public double getHeightt() {
return Double.parseDouble(secondPointYt.getText())-getFirstPointY();
}
public String getrectangleColor() {
return rectangleColort.getText();
}
public void addButtonListener(ActionListener listenForButton) {
button.addActionListener(listenForButton);
}
void displayErrorMessage(String errorMessage){
JOptionPane.showMessageDialog(this, errorMessage);
}
}

//3)
package recct;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.geom.Rectangle2D;
public class RectangleView extends JPanel {
double x;
double y;
double w;
double h;

public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
Pkutnyk rect = new Pkutnyk(x, y, w, h);
g2.setPaint(Color.RED);
g2.fill(rect);

} 
public void main() {
RectangleView rects = new RectangleView();
JFrame frame = new JFrame("Pryamokutnyk");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E);
frame.add(rects);
frame.setSize(360, 300);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
//4)
package recct;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Controller {

private Pkutnyk pkut;
private MainView mainView;
private RectangleView rview;

public Controller(Pkutnyk pkut, MainView mainView) {
this.pkut = pkut;
this.mainView = mainView;
this.mainView.addButtonListener(new ButtonListener());
}

class ButtonListener implements ActionListener {

public void actionPerformed(ActionEvent arg0) {
try {
rview.x = mainView.getFirstPointX();
rview.y = mainView.getFirstPointY();
rview.w = mainView.getWidtht();
rview.h = mainView.getHeightt();
rview.main();
mainView.setVisible(false);
rview.setVisible(true);


} catch (NumberFormatException ex) {
System.out.println(ex);

}
}
}
}

//5)
package recct;
public class Appl {
public static void main(String[] args) {
MainView mainView = new MainView();
RectangleView rectView=new RectangleView();
mainView.setVisible(true);
rectView.setVisible(false);
} 
}
...
Рейтинг: 0 / 0
nullpointer exception в интерфейсе swing
    #38938705
stut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так в чем проблема-- в "addActionListener", "ButtonListener","Action perfomed"?
Почему собития не работает. Почему при нажатия на кнопку она остается "глухой"?
...
Рейтинг: 0 / 0
nullpointer exception в интерфейсе swing
    #38938937
YamahaR1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stut,

Как у вас тут все сложно...
Что делает класс RectangleView? Как вы инициализируете его данные: x,y,w,h?
ActionListener у вас определен в классе Controller внутренним классом и никак с кнопкой класса MainView не связан...
Ну и гуи рекомендуется запускать в отдельном потоке https://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html
...
Рейтинг: 0 / 0
nullpointer exception в интерфейсе swing
    #38939525
stut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
package recct;
public class Appl {
public static void main(String[] args) {
MainView mainView = new MainView();
RectangleView rectView=new RectangleView();
Controller contr=new Controller(mainView,rview);//Если это поле добавить то кнопка работает, появляется пустой фрейм без -///прямоугольника--ибо если передать Rectangle.x вместо названия фрейма то появится 0.0--то есть действительно
rview.x = mainView.getFirstPointX();--не работают как и еще три поля. То есть батонлисенер не может выбрать этих даных.
Даже если заменить на rview1.x = Double.parseDouble(mainView.firstPointXt.getText() );

mainView.setVisible(true);
rectView.setVisible(false);

Даже помещал
public void main() {
RectangleView rects = new RectangleView();
JFrame frame = new JFrame("Pryamokutnyk");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E);
frame.add(rects);
frame.setSize(360, 300);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
} в клас Jframe implements Runnable--но ничего не меняется.
...
Рейтинг: 0 / 0
nullpointer exception в интерфейсе swing
    #38939547
stut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Что делает класс RectangleView? Как вы инициализируете его данные: x,y,w,h?".
В него есть метод для рисования.
public void main() {
RectangleView rects = new RectangleView();
Здесь поля 0 инициализируются.
И последующая инициализация скласа контролер неправильная:
rview.x = mainView.getFirstPointX();
rview.y = mainView.getFirstPointY();
rview.w = mainView.getWidtht();
rview.h = mainView.getHeightt();--по факту да--но как иначе присвоить знчаения этим четырем переменным класа,
чтобы их уже поместить в конструктор
прямоугольника--Pkutnyk rect = new Pkutnyk(x, y, w, h);?
Если я присвою
public class RectangleView extends JPanel {
double x=1;
double y=1;
double w=7;
double h=8; --напрямую то прямоуг. нарисуется.
То есть проблема передачи в клас прямоугольника значений из полей.

В MainView есть public void addButtonListener(ActionListener listenForButton) {
button.addActionListener(listenForButton);--с помощью которого то и кнопка запускает фрейм.
И то что екшн листенер внутренний что-то меняет--он не может присоить созданному
во внешнем класе обьекту rview даные полученые через метод getFirstPointX();--которые в свою очередь
получены через gettext--хотя может там парсинг текста в дабл не работает? Ибо проблема очевидно в строке rview.x = mainView.getFirstPointX() и 3ех последующих.
...
Рейтинг: 0 / 0
nullpointer exception в интерфейсе swing
    #38939710
stut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invoke later может подойдет но как сделать обьект типа runnable--да и задания не для аплета предназначено в общем.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
public class RectangleView extends JPanel {
      double x;//double x=5; если так инициализировать поля то x передается в конструктор
      double y;//new Pkutnyk(this.x, this.y, this.w, this.h) и возможно построить прямоугольник;-- а если поле через листенер инициализируется что видно на примере Frame frame = new JFrame(""+x+"");--то его значение не передается конструктору прямоугольника--куда оно теряется?
      double w;
      double h;
  public void paintComponent(Graphics g) {
      Graphics2D g2 = (Graphics2D) g;
      Pkutnyk rect = new Pkutnyk(this.x, this.y, this.w, this.h);
      g2.setPaint(Color.RED);
      g2.fill(rect);
  }   
  public void main() {
    RectangleView rects = new RectangleView();
    JFrame frame = new JFrame(""+x+"");// даже если  double x=5; а в первое поле ввести 2
    //то заголовок фрейма будет 2.0
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.add(rects);
    

.
...
Рейтинг: 0 / 0
nullpointer exception в интерфейсе swing
    #38939730
stut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С использованием статических переменных обьектов класа "вид прямоугольника" мне удалось нарисовать прямоугольник. Хотя он почему воспринимает лиш относительные ккординаты и берет во внимание лиш высоту и ширину, а начальные координаты почему то помещаются в начальную верхнюю левую точку.
Надо также сделать рабочим поле для ввода цвета--где должно ьыить несколько основных вариантов, чтобы не вводить в кодировке RGB--но вот создаю метод и компилятор мне говорит что -- found : java.lang.String
Код: java
1.
2.
 required: int
      switch (color) 

--почему он требует int если я получаю из поля строку, и даже цвет
есть типа java.awt.Color;
....
Код: java
1.
2.
3.
4.
5.
6.
7.
 public Color getColor() {
		String color=rectangleColort.getText();
      switch (color){
      case "blue":
      return Color.blue;
      break;
	}
...
Рейтинг: 0 / 0
nullpointer exception в интерфейсе swing
    #38939742
YamahaR1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stut,

Немного изменил ваш код, подредактируйте под себя.

Rectangle.java :

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
package recct.Model;

import java.awt.Color;
import java.awt.geom.Rectangle2D;

// The model notifies the view when its state has changed.
public class Rectangle extends Rectangle2D.Double {

    private double x1;
    private double y1;
    private double w;
    private double h;
    private Color color;

    public double getX1() {
        return x1;
    }

    public void setX1(double x1) {
        this.x1 = x1;
    }

    public double getY1() {
        return y1;
    }

    public void setY1(double y1) {
        this.y1 = y1;
    }

    public double getW() {
        return w;
    }

    public void setW(double w) {
        this.w = w;
    }

    public double getH() {
        return h;
    }

    public void setH(double h) {
        this.h = h;
    }

    public Color getColor() {
        return color;
    }

    public void setColor(Color color) {
        this.color = color;
    }

    public Rectangle(double x1, double y1, double w, double h, Color color) {
        this.x1=x1;
        this.y1=y1;
        this.w=w;
        this.h=h;
        this.color = color;
    }

    @Override
    public String toString() {
        return "X1=" + String.valueOf(x1) +
                ", Y1=" + String.valueOf(y1) +
                ", w=" + String.valueOf(w) +
                ", h=" + String.valueOf(h) +
                ", color=" + String.valueOf(color.toString());
    }

 }




MainView.java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
package recct;

import recct.Model.Rectangle;

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

enum Colors {
    RED,
    GREEN,
    BLUE,
    BLACK
}

// View hold the reference to controller
public class MainView extends JFrame {
    private JLabel firstPointX = new JLabel("Enter X coordinate of first point");
    private JTextField firstPointXt = new JTextField(10);
    private JLabel firstPointY = new JLabel("Enter Y coordinate of first point");
    private JTextField firstPointYt = new JTextField(10);
    private JLabel secondPointX = new JLabel("Enter X coordinate of second point");
    private JTextField secondPointXt = new JTextField(10);
    private JLabel secondPointY = new JLabel("Enter Y coordinate of second point");
    private JTextField secondPointYt = new JTextField(10);
    private JLabel rectangleColor = new JLabel("Enter Color");
    private JTextField rectangleColort = new JTextField(10);
    private JButton button = new JButton("Draw");

    public MainView() {
    }

    public void createGraphics() {
        JPanel panel = new JPanel();
        this.setTitle("Main");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
        this.setSize(200, 500);
        this.setLocationRelativeTo(null);
        this.setLayout(new GridBagLayout());
        this.setVisible(true);
        panel.add(firstPointX);
        panel.add(firstPointXt);
        panel.add(firstPointY);
        panel.add(firstPointYt);
        panel.add(secondPointX);
        panel.add(secondPointXt);
        panel.add(secondPointY);
        panel.add(secondPointYt);
        panel.add(rectangleColor);
        panel.add(rectangleColort);
        panel.add(button);
        //
        Rectangle rectangle = new Rectangle(0, 30, 0, 60, Color.BLACK);
        RectangleView rView = new RectangleView();
        this.add(panel, new GridBagConstraints(0, 0, 1, 1, 1, 1,GridBagConstraints.NORTH, GridBagConstraints.BOTH, new Insets(2, 2, 2, 2), 0, 0));
        AbstractAction action = new DrawRectangleAction(rectangle, this, rView);
        button.addActionListener(action);
    }

    public double getFirstPointX() {
        return Double.parseDouble(firstPointXt.getText());
    }

    public double getFirstPointY() {
        return Double.parseDouble(firstPointYt.getText());
    }

    public double getWidtht() {
        return Double.parseDouble(secondPointXt.getText())-getFirstPointX();
    }

    public double getHeightt() {
        return Double.parseDouble(secondPointYt.getText())-getFirstPointY();
    }

    public Color getColor() {

        Colors clr = Colors.valueOf(rectangleColort.getText().toUpperCase());

        switch (clr) {
            case RED: return Color.RED;
            case BLACK: return Color.BLACK;
            case BLUE: return Color.BLUE;
            case GREEN: return Color.GREEN;

            default: return Color.BLACK;
        }

    }

}



DrawRectangleAction.java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
package recct;

import recct.Model.Rectangle;

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


// The controller asks the model to change its state.
// The controller may also ask the view to change.
public class DrawRectangleAction extends AbstractAction {

    private Rectangle rectangle;
    private MainView mainView;
    private RectangleView rectView;

    public DrawRectangleAction(Rectangle rectangle, MainView mainView, RectangleView rectView) {
        this.rectangle = rectangle;
        this.mainView = mainView;
        this.rectView = rectView;
    }

    public void actionPerformed(ActionEvent event) {
        System.out.println("We are in action...");
        try {
            // We should update rectangle object here
            rectangle.setX1(mainView.getFirstPointX());
            rectangle.setY1(mainView.getFirstPointY());
            rectangle.setW(mainView.getWidtht());
            rectangle.setH(mainView.getHeightt());
            rectangle.setColor(mainView.getColor());
            System.out.println("Rectangle debug info:" + rectangle.toString());
            rectView.setRectangle(rectangle);
            rectView.init();
            rectView.setVisible(true);
            } catch (Exception ex) {
              ex.printStackTrace();
            }
    }

}



RectangleView.java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
package recct;
import recct.Model.Rectangle;

import java.awt.*;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class RectangleView extends JPanel {

    private Rectangle rectangle;

    public void setRectangle(Rectangle rectangle) {this.rectangle = rectangle;}

    public void paint(Graphics g) {
        System.out.println("Drawing rectangle...");

        g.setColor(rectangle.getColor());
        g.fillRect((new Double(rectangle.getX1())).intValue(), (new Double(rectangle.getY1())).intValue(),
                (new Double(rectangle.getW())).intValue(), (new Double(rectangle.getH()).intValue()));

    }

    public void init() {
        JFrame frame = new JFrame("Pryamokutnyk");
        frame.add(this);
        frame.setSize(800, 700);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}



Appl.java

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
package recct;

import javax.swing.*;

public class Appl {
    public static void main(String[] args) {

        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                MainView mainView = new MainView();
                mainView.createGraphics();
                mainView.setVisible(true);
            }
        });
    }
}
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / nullpointer exception в интерфейсе swing
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]