Dobra teraz rysuje, ale pojawił się inny problem kiedy jest bokA = Double.parseDouble(a.getText());
wywala taki błąd :
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: empty String
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1842)
at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
at java.lang.Double.parseDouble(Double.java:538)
at aplikacja.Okno$DrawPanel.paintComponent(Okno.java:48)
at javax.swing.JComponent.paint(JComponent.java:1056)
at javax.swing.JComponent.paintChildren(JComponent.java:889)
at javax.swing.JComponent.paint(JComponent.java:1065)
at javax.swing.JComponent.paintChildren(JComponent.java:889)
at javax.swing.JComponent.paint(JComponent.java:1065)
at javax.swing.JLayeredPane.paint(JLayeredPane.java:586)
at javax.swing.JComponent.paintChildren(JComponent.java:889)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5217)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1579)
at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1502)
at javax.swing.RepaintManager.paint(RepaintManager.java:1272)
at javax.swing.JComponent.paint(JComponent.java:1042)
at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39)
at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:79)
at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:116)
at java.awt.Container.paint(Container.java:1975)
at java.awt.Window.paint(Window.java:3904)
at javax.swing.RepaintManager$4.run(RepaintManager.java:842)
at javax.swing.RepaintManager$4.run(RepaintManager.java:814)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:814)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:789)
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:738)
at javax.swing.RepaintManager.access$1200(RepaintManager.java:64)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1732)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
BUILD SUCCESSFUL (total time: 2 seconds)
Kod:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package aplikacja;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionListener;
import java.awt.geom.Rectangle2D;
import javafx.event.ActionEvent;
import javax.swing.*;
/**
*
* @author Tomek
*/
public class Okno extends JFrame implements ActionListener {
public Tekst a;
public Tekst b;
public Tekst c;
public Tekst prom;
public Przyciski oblicz, rysuj;
public Labels pole, obwod, przekatna, wysokosc, wartosc_A, wartosc_B,wartosc_C, promien;
public Separator rysunek, dane, wyniki;
public RadioButton kwadrat, kolo, trojkat, prostokat;
public DrawPanel panel;
public class DrawPanel extends JPanel {
public DrawPanel(int x, int y, int dlugosc , int wysokosc){
setBounds(x,y,dlugosc,wysokosc);
setBackground(Color.WHITE);
setBorder(BorderFactory.createLineBorder(Color.black));
}
@Override
public void paintComponent(Graphics g){
Graphics2D g2d = (Graphics2D) g;
double bokA;
bokA = Double.parseDouble(a.getText());
int x = 30, y = 30;
Rectangle2D kwa = new Rectangle2D.Double(x, y, bokA, bokA);
g2d.draw(kwa);
}
}
public Okno() {
super("Pola powierzchni");
setSize(600, 600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(null);
panel = new DrawPanel(30,30,300,300);
add(panel);
oblicz = new Przyciski("Oblicz", 450, 280, 100, 20);
oblicz.addActionListener(this);
rysuj = new Przyciski("Rysuj", 450, 310, 100, 20);
rysuj.addActionListener(this);
add(rysuj);
add(oblicz);
a = new Tekst( 480, 30, 70, 25);
b = new Tekst( 480, 60, 70, 25);
c = new Tekst( 480, 90, 70, 25);
prom = new Tekst( 480, 120, 70, 25);
add(b);
add(a);
add(c);
add(prom);
rysunek = new Separator("Rysunek", 15, 15, 330, 330);
dane = new Separator("Dane wejściowe", 340, 15, 220, 330);
wyniki = new Separator("Wyniki obliczeń", 15, 341, 545, 190);
add(wyniki);
add(dane);
add(rysunek);
kwadrat = new RadioButton("Kwadrat", 350, 180, 100, 20);
kolo = new RadioButton("Koło", 350, 220, 100, 20);
trojkat = new RadioButton("Trójkąt", 350, 260, 100, 20);
prostokat = new RadioButton("Prostokąt", 350, 300, 100, 20);
ButtonGroup grupa = new ButtonGroup();
grupa.add(trojkat);
grupa.add(prostokat);
grupa.add(kolo);
grupa.add(kwadrat);
add(trojkat);
add(prostokat);
add(kolo);
add(kwadrat);
pole = new Labels("Pole powierzchni = ", 35, 360, 150, 20);
obwod = new Labels("Obwód = ", 35, 400, 150, 20);
przekatna = new Labels("Przekątna = ", 35, 440, 150, 20);
wysokosc = new Labels("Wysokość = ", 35, 480, 150, 20);
wartosc_A = new Labels("Bok A =",390,30,100,20);
wartosc_B = new Labels("Bok B =",390,60,100,20);
wartosc_C = new Labels("Bok C =",390,90,100,20);
promien = new Labels("Promień =",390,120,100,20);
add(obwod);
add(pole);
add(przekatna);
add(wysokosc);
add(wartosc_A);
add(wartosc_B);
add(wartosc_C);
add(promien);
setVisible(true);
}
public void Blokowanie() {
if (kwadrat.isSelected()){
b.setEditable(false);
c.setEditable(false);
prom.setEditable(false);
}
}
@Override
public void actionPerformed(java.awt.event.ActionEvent e) {
Object source = e.getSource();
if(source == rysuj && kwadrat.isSelected() ){
}
}
}
Mam jeszcze pytanie, gdzie powinienem umieścić/ wywołać metodę Blokowanie
, tak aby zadziałało tak, że jak zaznaczę RadioButton Kwadrat to wybrane JTextField będą niedostępne?