Taranan herhangi bir grafiği alacağı ve değerlerini bir CSV'ye dönüştürecek bir grafik okuyucu programı oluşturmaya çalışıyorum. Aşağıdaki grafik temel kontrol benim temel gereksinimleri yerine getiren bir yukarı prototip ve çalışan varGUI durumlarını ve alt kümelerini koruyun ve kontrol edin
akış açıklar, ancak gelişimini devam etmeden önce GUI devletleri ve substates korumak için en iyi yolu bilmek istiyorum . Şu anda bir enum kullanıyorum:
public enum UIState {
MAKING_SELECTION, SELECTING_AXIS_POINTS, SETTING_VALUES, SELECTING_GRAPH_POINTS
}
denetleyici vardır
public void setUiState(UIState uiState) {
switch (this.uiState = uiState) {
case MAKING_SELECTION:
frame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
break;
case SELECTING_AXIS_POINTS:
clearSelection();
frame.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
break;
case SETTING_VALUES:
clearSelection();
break;
case SELECTING_GRAPH_POINTS:
frame.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
clearSelection();
break;
}
updateView(); //Repaints frame
setChanged();
notifyObservers(uiState);
}
Benim OptionsPanel arayarak düğmeleri ve fare dinleyici tarafından ayarlanabilir bir UIState
, tüm düğmeleri ve giriş içeriyor paneli alanlar, kontrolör gözlemler ve değiştirmek gözlemler ise büyük bir anahtarı çağırır:
@Override
public void update(Observable o, Object arg) {
if (arg instanceof UIState) {
switch ((UIState)arg) {
case MAKING_SELECTION:
//Set component statuses
break;
case SELECTING_AXIS_POINTS:
//Set component statuses
break;
case SETTING_VALUES:
//Set component statuses
break;
case SELECTING_GRAPH_POINTS:
//Set component statuses
break;
}
}
}
bileşenlerin ayararayarak hemen yapılır Düğümlerimin ve metin alanlarının her birinde, az miktarda bileşenle zaten belirsiz hale geliyor. Benim fare dinleyicileri de, her şeyi gerçekten kafa karıştırıcı yapan isLeftMouseButton()
ve isRightMouseButton()
sorgularına ek olarak benzer anahtarlara sahiptir.
Benim uygulamamın alt satırlar bile içermiyor ve şu anda çalışmam var olsa bile, imlecin ayarlanmasıyla zaten tutarsızlık var.
Bu yüzden sorum şu: Bu GUI durumlarını sürdürmek ve daha düşük tutarlılık sağlayan daha kolay bir kullanıcı girişine dayalı kullanıcı arabirimi durumunu ve alt girişlerini ayarlamak için daha iyi bir çözüm var mı? hangi temsilci görev yürütme için beton Devletler için
http://en.wikipedia.org/wiki/State_pattern
Sen genel amaçlı giriş dinleyicileri vardır:
Güzel düzenleme. Artı bir .. –
Belki de durum tasarım desenine bakın? http://en.wikipedia.org/wiki/State_pattern –
@MattCoubrough, eğer doğru bir şekilde anladıysam, "getCursor()" veya "changePanelCompStates (OptionPanel panel)" gibi soyut yöntemlere sahip olacak bir arayüze sahip olurdum. UI devlet sınıfları tarafından uygulanabilir. Yine de dinleyicileri nasıl dinleyebilirim? Bu devlet sınıflarının her biri, devlet her değiştiğinde benim panelimden eklenecek ve çıkarılacak kendi dinleyicilerine sahip olur mu? – Marv