Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

layout


Suark

Öne çıkan mesajlar

Selam,
( Java - Gui )
Şimdi ben bi program için absolute layout kullanıorm. Daha önceden de bunu kullanmıştım ama pek verim alamamıştım istediğim gibi, ( sonra hard disk pert oldu baştan yazmak zorunda kaldım ).

Sahip olduğum nesneleri, birbirinden bağımsız bir şekilde dizicem, x ve y var hep elimde.
Tabi dizdikden sonra, jbutton yerine jlabel kullandığım için, ekranımın herhangi bir x ve y koordinatına tıklandığında bi tepki vermesini istiorm.

Yani eğer orda bir nesne varsa, o nesneye ait özellikleri göster gibi vs.

Şimdi bunun için, grid veya gridbag layout kullanmak iyi midir?
kendileri nedir ne değildir? Ne farkı vardır?

ya da bu iş için bambaşka bi layout önerebilir misiniz?
Link to comment
Sosyal ağlarda paylaş

eee hani nerdesiniz

Artariel said:

yarım java
c++

obj-c öğrenmeye çalışacam


Gladmir said:

c/c++
objective - c
java

pm den ziyade burdan ayri basliklar olarak discussion lara devam edilmesi daha yararli olur.


Sawer said:

Objective C
ABAP
Java

En fazla bildiğimden en aza doğru sıralanmış şekilde :D
(tabi c, c++, php flnda bilioz ama okulda öğrendiğim kadarıyla onlar )


Leopar said:

Java, sql, perl, css html ortaya karisik. gerci pek lazim olmuyor artik, unutmaya basladim hepsini :/


hehehehe
Link to comment
Sosyal ağlarda paylaş

Ben anlamadim tam olarak ne yapmak istedigini. Birbirinden bagimsiz, alakasiz bir sekilde diziceksen absolute layout kullan. Surekli ucuca eklensinler yanyana olsunlar diyorsan flowlayout kullan.

Yapmak istedigin seye gore degisir yani ve ben anlamadim tam olarak ne yapmak istedigini. En iyisi http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html burayi kullan sonra kendin karar ver.
Link to comment
Sosyal ağlarda paylaş

birbirinden bağımsız olucaklar evet, ama haritasal bi dizilimi olucak ve programların çoğu bunun için grid gibi şeyler kullanıyor.

neticede, koordinat sistemide bi grid sistemi felan deil mi?

aydınlatın beni patiler, orekıl dökümanını sevmedim ondan size soruorm
Link to comment
Sosyal ağlarda paylaş

Elbette absolut layout disinda kullanacaklarin pattern grid lerine giriyor. Ama aydinlatin demekle olmaz, ya Java nin Swing Grid Layout type larinin hepsini tek tek burda yazmak lazim yada senin properly visual ne yapmaya calistigini anlayip onun uzerinden konusmak lazim.
Link to comment
Sosyal ağlarda paylaş

hmm tmmdır,

anlatayım o zaman

n tane nesnem var. Bunların hepsinin bir unique id si var,

hepsinin bir koordinatı var. Dünya üzerinde işaretli saraylar ya da ne bileyim marketler gibi düşün.
Hepsinin bir koordinatı var.

Şimdi ben bunları koordinatıa göre ekran boyuna scale edicem. Tabi ekran düz, ama koordinat sistemi düze göre değil o yüzden bir iki extra hesap var ama onları kotarırsam absolute layoutla x ve y koordinatlarını girince yerleşicekler.

Şimdi bu noktaya kadar absolute layout ok. Buradan sonra, ben her nesneme tıklayınca bir aksiyon alınmasını istiyorum, ama jbutton değil de jlabel kullanıyorum grafiksel sebepler yüzünden.

Şimdi bu noktada, mouse şu şu x ve y koordinatları arasına tıkladığında demem lazım ama scale ettiğimde bunlar bozulacak falan fistan.

bunun yerine ben grid kullansam, gride maplesem ve her gridde 1 max nesne olsa; direk o gride referans versem olur mu?

kafam karışık biraz
Link to comment
Sosyal ağlarda paylaş


import javax.swing.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

/**
* Created with IntelliJ IDEA.
* User: gladmir
* Date: 10/4/12
* Time: 2:25 PM
* To change this template use File | Settings | File Templates.
*/
public class CustomLabel extends JFrame implements MouseListener {

private JLabel wrappedLabel;

public CustomLabel (String labelText) {

wrappedLabel = new JLabel(labelText);
wrappedLabel.addMouseListener(this);
add(wrappedLabel);
}

public CustomLabel (JLabel wrappedLabel) {
this.wrappedLabel = wrappedLabel;
this.wrappedLabel.addMouseListener(this);
add(this.wrappedLabel);
}


@Override
public void mouseClicked(MouseEvent e) {
// impl
}

@Override
public void mousePressed(MouseEvent e) {
// impl
}

@Override
public void mouseReleased(MouseEvent e) {
// impl
}

@Override
public void mouseEntered(MouseEvent e) {
// impl
}

@Override
public void mouseExited(MouseEvent e) {
// impl
}
}



//impl lerde UI logic ini execute edeceksin.
Link to comment
Sosyal ağlarda paylaş

Absolute coord. larda is yapmak seni bozmayacaksa aynen boyle devam et bence. Tek dez avantajin, en disdaki frame in (yada window) boyutu degisirse senin de yeni boundries e gore mevcut ui component larini relayout etmen gerekecek.

Edit: Constructor larda eksik kalan yer varmis, guncelledim.

Absolut coord. larda calisirken bu adami frame mis gibi boundries girip kullanabilirsin. Hani olabilecek zilyon tane cozumden sadece biri bu. Swing kullanmayali yillar oldu, eger UI in browser da calistirmayi dusunursen GWT kullanabilirsin.
Link to comment
Sosyal ağlarda paylaş

gene ben geldim,
tavsiyen çok işime yaradı, her şey süper şukela ama bir sorun var.
sorunun ne olduğunu anladığımı sanıyorum ama dolaysız çözüm bulamadım.

şimdi benim aynı location da yarattığım 3-4 tane jlabelım var.

Locationları aynı olsada, paintcomponenti override ettiğim için şekilleri farklı, ve her birinin unique bi id si falan var.


Görsel olarakta istediğim sonuca ulaştım ama, başka bir sıkıntı baş gösterdi.

Şimdi bu jlabellara tıkladığımda onlara unique olarak pasladığım şeyleri görmek istiyorum, bunları consola yazdırıyorum deneme amaçlı.
ama aynı locationda olanları, sanki üstüste koymuş gibi, o noktaya yetleştirilen ilk jlabela tıklamışım tepkisi veriyor.
( bundan eminim, çünkü farklı renklere boyattım falan. ).

Yani temelde sorun şu :
aynı locationda olan jlabellar, için sonradan gelenlere tıklayamıyorum. Tıkladığımda ilkine tıklamışım etkisi yapıyor. ( muhtemelen tıkladığımda, o locationa gidip ordaki nesneyi çekiyor meret ).

Şimdi ya, locationları gözle görülmeyecek boyutta kaydırıcam, ya da başka bir çözüm yapıcam.

onu sormaya geldim üstat
Link to comment
Sosyal ağlarda paylaş

O sıkıntıyı aşması epey zor olacaktır. Onun yerine label'a tıklamak yerine panel'in mouse_clicked action'ını kullansan?

Panel'e eklediğin tüm objeleri bir array'e alıp her panel'e tıkladığında tıkladığın noktarın kordinatlarından yola çıkarak array deki objelerin lokasyonlarını tarayıp hangi objeler üzerine düştüğüne hesaplasan. Üst üst'e gelen label'lar için de tıkladığın nokta hangi label'ın orta noktasına daha yakınsa o label'ı seçilmiş var sayacak şekilde tasarlasan?

Aklıma böyle birşey geldi, yardımı olur belki :)
Link to comment
Sosyal ağlarda paylaş

Simdi Frame den extend ettik ya adami, frame de dahil olmak uzere butun UI objeleri kendilerini wrap eden (oz turkcesi ihtiva eden) container in "UI Objects Stack" de hayatini devam ettirir. Stack deki yerine gore mouse/touch event leri firlatilir vs.

Ilk koydugun CustomLabel in surekli mouse clicked event ini intercept etmesinin sebebi stack de en ustte olmasi, ha stack de en altta olmasida sana cozum degil. Bu sefer en son stack e giren adam intercept etmeye baslar event leri.

Aklima gelen pratik cozum, guzel bir ContextDropDownMenu yazman. Bunu yazmakla kalmayip, same coordinates deki CustomLabel larini mark layip, ayni coordinate larda olduklarindan haberdar olmalarini saglayip, touch event i geldigi zaman o coordinate larda baska kordintlaslari varmi check ini yapip, bu adamlari drop down menu de gosterip kullaniciya secim yapabilme option i vermek.

Drop down menu ile ugrasmak istemiyorsan, menu yerine ekrana ufak bir JPanel (panel miydi?), icine clicked JLabel ile birlikte adamin kordintlaslari JLabel larini ekleyip secim yaptirmak da bir secenek olabilir.

Bu arada bu isi java da da yapsan C# da da yapsan, Obj-C de de yapsan basina ayni sey gelecekti. UI Frameworkleri nereye gitsen ayni calisir.
Link to comment
Sosyal ağlarda paylaş

bu tarz etraftan dolaşmak yerine, hala layerlarla uğraşıyorum :) ( yapan yapmış abi, bir sürü program var böle çalışan ).

jlayeredpane yaptım, gerçektende layerlara ayırıyor falan ama mouse eventler en üst layerdaki objeye işlem yapıyor sadece
:/

bunu nasıl aşarım? yani layer bazlı listener nasıl tanımlarım? ( ya da overall global bişide olur np )

http://stackoverflow.com/questions/12835633/jlabel-overlapping

şurdada yardımcı oluyorlar tabi
Link to comment
Sosyal ağlarda paylaş

şimdilik etrafından dolanmayayım dedim, yoksa ipledim yav.

bide kodu zaten anladın ki sen =). Sıkıntı, senin de bahsettiğin gibi en üst layerda ki componentle interact oluyor mouse listener.

http://weblogs.java.net/blog/alexfromsun/archive/2006/09/a_wellbehaved_g.html

şuna bakıcam bi ara ama, bu kadar zor olmamalıydı ya bu :/
Link to comment
Sosyal ağlarda paylaş

  • 2 hafta sonra ...
@Gladmir

hocam saolasın.
Senin tavsiyenden yola çıkıp sorunumu çözdüm.

nası yaptım?


bastıgım noktada eğer, birden fazla component varsa listele onları bul dedim.
sonra bastığım noktaya componentlerin ortak noktaları arasında ki açıyı hesaplayıp, en yakın componenti boyattım

böle yazınca çok kolay geldi gözüme yav, eheh epey uğraştım ama.
asıl sorunu sourcelara inip bulabildim, java bi elementin basılacak alanını belirlerken ( contains hedesi ) x,y locationı ve w,h ye bakıyor. e benimkiler arc da olsa, w,h leri ve x,y leri aynı oldugundan ilk yaratılana gidiyor.

ya methodu ovveride edip onu arc formülüne değiştiricektim ( kasar dedim ) ya da böle yapıcaktım.

OHŞ, çalıştı ^^.

kodu koysammı gerek var mı buraya
Link to comment
Sosyal ağlarda paylaş

×
×
  • Yeni Oluştur...