Ponieważ to mój pierwszy post - witam Wszystkich serdecznie.
Zwracam się do Was z pewnym problemem, którego sam, ani z pomocą kumpla nie potrafię rozwiązać. Otóż jako projekt w Javie na uczelni dostałem temat związany z dekodowaniem kodu barwnego rezystora. Tak w skrócie: wymyśliłem, że wstawię do okienka kilka prostokątnych obrazków a pomiędzy nie dam fillRect, które miałyby imitować kolorowe paski rezystora. Początkowo zmiana kolorów miała odbywać się za pomocą kliknięcia myszką, jednakże zrezygnowałem z tego pomysłu i postanowiłem zastosować ComboBox. W praktyce wygląda to tak:
http://i48.tinypic.com/11r6our.png
Otóż pojawił się problem, gdyż są 2 osobne klasy - jedna zajmuje się wyświetlaniem obrazków i fillRect a druga ComboBox'em etc. i całym "mechanizmem". W ComboBox'ie dodałem jak na razie jedną instrukcję warunkową, która miała zmieniać kolor prostokątów, jednakże problemem jest zaimplementowanie tego. Próbowałem stworzyć metodę,która by się tym zajmowała, jednakże nie chce ona współpracować z g.setColor().
Trudno mi powiedzieć - może i problem jest prosty (za to ja z programowania nie jestem mega zaawansowany), jednakże spędza mi sen z powiek.
Oto kod:
Klasa Okno
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class Okno extends JFrame implements ActionListener{
JLabel wartośćRezystancji;
JLabel prąd;
JComboBox listakolorów;
int[] rgb = new int[3] ;
BufferedImage img;
JButton Dalej;
JSlider napięcie = new JSlider(JSlider.HORIZONTAL);
public Okno(){
final JFrame okienko = new JFrame("Kod barwny rezystora");
okienko.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
okienko.setSize(600, 500);
okienko.setVisible(true);
okienko.setLocationRelativeTo(null);
String[] kolory = { "czerwony", "niebieski", "czarny", "brązowy", "pomarańczowy", "złoty", };
JComboBox listakolorów = new JComboBox(kolory);
listakolorów.setSelectedIndex(0);
listakolorów.setBounds(18,175, 100, 100);
okienko.add(listakolorów);
listakolorów.addActionListener(this);
okienko.add(napięcie);
napięcie.setMaximum(500);
napięcie.setPaintLabels(true);
napięcie.setPaintTicks(true);
napięcie.setMajorTickSpacing(50);
napięcie.setMinorTickSpacing(10);
napięcie.setPaintTrack(false);
napięcie.setBounds(0, 400, 300, 100);
napięcie.addChangeListener(new ChangeListener(){
public void stateChanged(ChangeEvent e){
double value = napięcie.getValue();
double maximumValue = napięcie.getMaximum();
double r = (value/2000)*1000;
prąd = new JLabel("Prąd wynosi: "+ r+ "mA");
prąd.setBounds(0, 400, 180, 30);
okienko.add(prąd);
}
}
);
wartośćRezystancji = new JLabel("Rezystancja");
wartośćRezystancji.setBounds(180, 350, 100, 30);
okienko.add(wartośćRezystancji);
//okienko.setLayout(new FlowLayout(FlowLayout.LEFT));
okienko.add(new LoadImageApp());
okienko.pack();
}
public Color Kolorki(int r, int g, int b){ //metoda która miała "wysyłać" kolory do innej klasy
Color kolor = new Color(rgb[0], rgb[1], rgb[2]);
rgb[0] = r;
rgb[1] = g;
rgb[2] = b;
System.out.println(kolor);
return kolor;
}
public void actionPerformed(ActionEvent e){
JComboBox listakolorów = (JComboBox)e.getSource();
String kolor = (String)listakolorów.getSelectedItem();
if(kolor == "czarny") {
// rgb[0] = 0x4d;
// rgb[1] = 0x71;
// rgb[2] = 0xa3;
Kolorki(0x4D, 0x71, 0xA3);
repaint();
System.out.println("Czarny");
}
if(kolor =="niebieski"){
System.out.println("Niebieski");
}
}
}
Klasa LoadImageApp
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JButton;
public class LoadImageApp extends Component {
BufferedImage img;
JButton Dalej;
int[] rgb = new int[3] ;
public void paint(Graphics g) {
// Color kolor = new Color(rgb[0], rgb[1], rgb[2]);
// Okno kolors = new Okno(); //próbowałem w g.setColor dać kolors.Kolorki(), jednakże bez większego sukcesu
g.drawImage(img, 0, 0, null);
g.setColor(kolor);
g.fillRect(18, 0, 22, 142);
g.drawImage(img, 40, 0, null);
g.setColor(kolor);
g.fillRect(58, 0, 22, 142);
g.drawImage(img, 80, 0, null);
g.setColor(kolor);
g.fillRect(98, 0, 22, 142);
g.drawImage(img, 120, 0, null);
g.setColor(kolor);
g.fillRect(138, 0, 22, 142);
g.drawImage(img, 160, 0, null);
g.setColor(kolor);
g.fillRect(178, 0, 22, 142);
g.drawImage(img, 200, 0, null);
}
public LoadImageApp() {
try {
img = ImageIO.read(new File("/home/dante/Studia/Programowanie obiektowe/Projekt/Rezystor/Rezystor-pasek_duzy.png"));
} catch (IOException e) {
}
}
public Dimension getPreferredSize() {
return new Dimension(280, 550);
}
}
Klasa Rezystor
public class Rezystor{
public static void main(String[] args) {
new Okno();
}
}
Program oczywiście nie jest jeszcze dokończony, więc może być kilka niedociągnięć (jak nieodpowiednia ilość ComboBox'ów).