Ja rectangle har jag kört, den kör jag varje gång jag öppnar programmet.
Ja Model.CHECKBOX_MSG har jag satt till checkbox
Citat:
Ursprungligen inskrivet av Teknocide
Tanken är att du ska använda arg1 för att se vilken typ av förändring som skett i modellen. Det är troligt att du behöver casta den till String först, glömde det i mitt kodexempel ovan.
Med casta om den till string, är det då detta du menar?
if (arg1.toString().equals(Model.CHECKBOX_MSG)) {
för att underlätta kan jag lägga upp hela properties också:
package view;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.util.Observable;
import java.util.Observer;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import model.Layer;
import model.Model;
import controller.Controller;
public class Properties extends JFrame implements Observer {
private Model model;
private Controller controller;
private JCheckBox cbBorder;
private GridBagLayout m;
private GridBagConstraints con;
private JLabel dl2 = new JLabel("Fil2: ", JLabel.RIGHT);
private JTextField dt2 = new JTextField(15);
public Properties(Model model, Controller controller){
this.model = model;
this.controller = controller;
model.addObserver(this);
setTitle("Properties");
setLocationRelativeTo(null);
}
public void rectangle(Layer layer){
// System.out.println("ObjectSettings " + layer);
m = new GridBagLayout();
setLayout(m);
//Label
JLabel dl = new JLabel("Properties for your " + layer.getType(), JLabel.CENTER);
con = new GridBagConstraints();
con.gridwidth = 2; //Upptar två kolumner
con.fill = GridBagConstraints.HORIZONTAL; //fyll ut båda
con.gridy = 0; con.gridx = 0; //rad och kolumn
con.insets = new Insets(10,0,10,0); //10 pixlar över och under
m.setConstraints(dl, con);
add(dl);
//Border Checkbox
cbBorder = new JCheckBox("Border");
cbBorder.addActionListener(controller);
cbBorder.setActionCommand("cbBorder");
boolean isCheckBoxSelected = model.getCbBorderSettings();
cbBorder.setSelected(isCheckBoxSelected);
con.gridwidth = 2; //Upptar två kolumner
con.fill = GridBagConstraints.HORIZONTAL; //fyll ut båda
con.gridy = 1; con.gridx = 0; //rad och kolumn
m.setConstraints(cbBorder, con);
add(cbBorder);
//Label
con = new GridBagConstraints();
con.gridy = 2; con.gridx = 0; //rad och kolumn
con.insets = new Insets(10,0,10,0); //10 pixlar över och under
m.setConstraints(dl2, con);
dl2.setVisible(false);
add(dl2);
//Textfield
con.gridy = 2; con.gridx = 1; //rad och kolumn
dt2.setVisible(false);
m.setConstraints(dt2, con);
add(dt2);
//Buttons
JButton btnPropSave = new JButton("Save");
JButton btnPropCancel = new JButton("Cancel");
con = new GridBagConstraints();
con.gridy = 3; con.gridx = 0; // rad och kolumn
con.ipadx = 5; //förstora knapparna före och efter texterna
con.anchor = GridBagConstraints.EAST; //Högerjustera
m.setConstraints(btnPropSave, con);
add(btnPropSave);
con.gridy = 3; con.gridx = 1; // rad och kolumn
con.anchor = GridBagConstraints.WEST; //Vänsterjustera
m.setConstraints(btnPropCancel, con);
add(btnPropCancel);
pack();
btnPropSave.addActionListener(controller);
btnPropSave.setActionCommand("btnPropSave");
btnPropCancel.addActionListener(controller);
btnPropCancel.setActionCommand("btnPropCancel");
}
public void circle(Layer layer){
//Label
JLabel dl = new JLabel(layer.getType(), JLabel.RIGHT);
add(dl);
pack();
}
@Override
public void update(Observable arg0, Object arg1) {
// TODO Auto-generated method stub
if (arg1.toString().equals(Model.CHECKBOX_MSG)) { // om vi fått ett checkbox-message av modellen...
boolean state = model.getCbBorderSettings(); // hämta checkboxens värde från modellen.
// OBS: detta hade man kunnat kolla redan i förra if-satsen. om man skulle ha fler modeller
// kopplade till viewen så går det att få tag i rätt model genom att casta source.
System.out.println("update " + state);
dl2.setVisible(state);
dt2.setVisible(state);
// ... osv. Vill du reagera på flera events från model (vilket är troligt) kan du använda en switch-case istället för if.
}
}
}
edit: det händer som sagt fortfarnde ingenting, därav att jag lade upp hela properties. För jag antar att det är i properties som det är något fel eftersom det är där jag sätter grejer till false och true. Jag kommer in i update() som sagt
Och om det nu inte skulle vara i properties så jag kan även visa hur jag öppnar den i controller:
properties = new Properties(this.model, this);
//Vad är det för typ av object vi vill ändra properties för
//Rectangle
if(layer.getType()=="Rectangle"){
for(Objects object : layer.getObjects()) {
if (object instanceof Rectangle) {
Rectangle r = (Rectangle) object;
if(r.getBorder()== true){
//sätt bordersettings ikryssat som default
model.setCbBorderSettings(true);
}
else{
model.setCbBorderSettings(false);
}
}
}
//Gå in rectangle view samt visa fönstret
properties.rectangle(layer);
// rectangle.getBorder();
properties.setVisible(true);
}