netbeans kullanılarak yapılır başvurum yükler, ilk JTextField otomatik odaklandığında, ve bu JTextField içinde, ben kullanıcı bu tıkladığında, bu gidecek "adınızı girin" yazdım uygulama yüklendiğinde alan ancak, bu alan, odaklanmıştır ben, nasıl başlangıçta bunu unfocus "adınızı girin" göremiyorum demektir?bir JTextField odaklamayın nasıl
cevap
bir log-in en iyi kalıcı bir iletişim kutusunda yapılan, ancak o sorunları tanıtır olacağını bileşen görünür sonra çağrılmalıdır, ama bu engellendi requestFocusInWindow()
yöntem aslında iletişim kiplidir!
Bu örnekte, iletişim kutusunun görünürlüğünden sonra odağı yönetmek için Rob Camick'in RequestFocusListener
(Dialog Focus'da sunulduğu gibi) kullanılır.
Not: kullanıcı herhangi bir şey yapmadan önce nasıl göründüğünü olduğunu. Şifre alanı varsayılan olarak odaklanmıştır.
package test.t100.t001;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.event.AncestorEvent;
import javax.swing.event.AncestorListener;
public class LoginRequired {
LoginRequired() {
JFrame f = new JFrame("Login Required");
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setSize(400, 300);
f.setResizable(false);
f.setLocationByPlatform(true);
f.setVisible(true);
showLogin(f);
}
private void showLogin(JFrame frame) {
JPanel p = new JPanel(new BorderLayout(5,5));
JPanel labels = new JPanel(new GridLayout(0,1,2,2));
labels.add(new JLabel("User Name", SwingConstants.RIGHT));
labels.add(new JLabel("Password", SwingConstants.RIGHT));
p.add(labels, BorderLayout.WEST);
JPanel controls = new JPanel(new GridLayout(0,1,2,2));
JTextField username = new JTextField("Joe Blogs");
controls.add(username);
JPasswordField password = new JPasswordField();
password.addAncestorListener(new RequestFocusListener(false));
controls.add(password);
p.add(controls, BorderLayout.CENTER);
//LayoutManager l = new GroupLayout(p);
//p.setLayout(l);
JOptionPane.showMessageDialog(
frame, p, "Log In", JOptionPane.QUESTION_MESSAGE);
}
/**
* @param args none
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run() {
new LoginRequired();
}
});
}
}
/**
* Convenience class to request focus on a component.
*
* When the component is added to a realized Window then component will
* request focus immediately, since the ancestorAdded event is fired
* immediately.
*
* When the component is added to a non realized Window, then the focus
* request will be made once the window is realized, since the
* ancestorAdded event will not be fired until then.
*
* Using the default constructor will cause the listener to be removed
* from the component once the AncestorEvent is generated. A second constructor
* allows you to specify a boolean value of false to prevent the
* AncestorListener from being removed when the event is generated. This will
* allow you to reuse the listener each time the event is generated.
*/
class RequestFocusListener implements AncestorListener
{
private boolean removeListener;
/*
* Convenience constructor. The listener is only used once and then it is
* removed from the component.
*/
public RequestFocusListener()
{
this(true);
}
/*
* Constructor that controls whether this listen can be used once or
* multiple times.
*
* @param removeListener when true this listener is only invoked once
* otherwise it can be invoked multiple times.
*/
public RequestFocusListener(boolean removeListener)
{
this.removeListener = removeListener;
}
@Override
public void ancestorAdded(AncestorEvent e)
{
JComponent component = e.getComponent();
component.requestFocusInWindow();
if (removeListener)
component.removeAncestorListener(this);
}
@Override
public void ancestorMoved(AncestorEvent e) {}
@Override
public void ancestorRemoved(AncestorEvent e) {}
}
hmmm benim kelimelerim de +1 – mKorbel
@AloneInTheDark Bu, ayrı bir soru sorulması gereken ayrı bir sorudur. soru. –
Kullanım requestFocusInWindow()
ziyade başka bir bileşen üzerinde JTextfield
ilk odaklamayı ayarlamak için.
Ama yerli odak sistemi, daha doğrusu setText(String s)
JTextField
constructor
yılında initComponents()
çağrısından sonra (netbeans içinde olduğu varsayılır) üzerinde değiştirmek için değil öneririm.
Başka isteğe bağlı okuma: How to Use the Focus Subsystem
Ne login için bir JMenuItem tıkla olsaydı?RequestFocusInWindow() 'ı başka bir öğede kullandım, fakat o JMenuItem'i tıklattığım anda, JTextField odaklanır, ikinci jeneratörü tıkladığımda, JTextField odaklanmaz, daha sonra çalışır, ancak ilk kez –
deniyor musunuz? 'JMenuItem' için NetBeans özellik editörü' nextFocusableComponent' özelliği? – Asif
Sabitledim, açılışta iki kez ur kodu kullandım ve Jmenuitem'e tıkladığımda teşekkürler –
Kullanıcı adı alanına klavye odağı vermenin, kullanıcının önce yapması gereken şey olduğunu varsayarak, doğru davranış olduğunu düşünüyorum. Bunun yerine odaklama, neden olmasın net sadece
import java.awt.*;
import javax.swing.*;
import javax.swing.text.Document;
public class PlaceholderTextField extends JTextField {
public static void main(final String[] args) {
final PlaceholderTextField tf = new PlaceholderTextField("");
tf.setColumns(20);
tf.setPlaceholder("All your base are belong to us!");
final Font f = tf.getFont();
tf.setFont(new Font(f.getName(), f.getStyle(), 30));
JOptionPane.showMessageDialog(null, tf);
}
private String placeholder;
public PlaceholderTextField() {
}
public PlaceholderTextField(
final Document pDoc,
final String pText,
final int pColumns)
{
super(pDoc, pText, pColumns);
}
public PlaceholderTextField(final int pColumns) {
super(pColumns);
}
public PlaceholderTextField(final String pText) {
super(pText);
}
public PlaceholderTextField(final String pText, final int pColumns) {
super(pText, pColumns);
}
public String getPlaceholder() {
return placeholder;
}
@Override
protected void paintComponent(final Graphics pG) {
super.paintComponent(pG);
if (placeholder.length() == 0 || getText().length() > 0) {
return;
}
final Graphics2D g = (Graphics2D) pG;
g.setRenderingHint(
RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g.setColor(getDisabledTextColor());
g.drawString(placeholder, getInsets().left, pG.getFontMetrics()
.getMaxAscent() + getInsets().top);
}
public void setPlaceholder(final String s) {
placeholder = s;
}
}
Eğer gerçekten sadece odağı kaldırmak isterseniz ?: kullanıcı türleri şeyin peşine üzerine temizleyerek nedeniyle, bazı seçenekleri:
component.setFocusable(false);
KeyboardFocusManager.getCurrentKeyboardFocusManager().focusNextComponent();
KeyboardFocusManager.getCurrentKeyboardFocusManager().clearGlobalFocusOwner();
textField.setFocusable(false);
textField.setFocusable(true);
ise textField odağı vardı ve sadece, eğer TAB dereceden sırayla sonraki bileşeni otomatik odak alacak. Efekt, bir TAB presiyle aynıdır.
- 1. JTextField öğesinden JTextField öğesinden JText
- 2. Özel bir JtextField
- 3. JTextField: Charaters sayısını nasıl sınırlandırırsınız?
- 4. Güncelleme JTextField açık düğmesi
- 5. JTextField düzenlenebilir DEĞİLDİR Nasıl kontrol edilir
- 6. JTextField öğesindeki Giriş Sınırı çalışmıyor
- 7. JTextField, JLabel stili ile GTKLookAndFeel
- 8. JTextField girişlerini metin dosyasına kaydedin
- 9. java mantıksız jtextfield boyutlandırma sorunu
- 10. JTextField öğesinin içeriğini diziye kaydetme
- 11. Bir JTextField belirli bir karakter sayısına ulaştığında bir sonraki
- 12. jTextField 'i son iyi değere dönüştürün
- 13. JTextField öğesinde imleç metni konumunu bulma
- 14. JTextField, odağı kazandığında tüm içeriği seç
- 15. JTEXTField java üzerinde nasıl saklanır ve yazılır java
- 16. salınım: JTextField değişiklik olayları için uygun Dinleyici
- 17. Devre dışı bırakılmış bir JTextField öğesinden metin kopyalama
- 18. Salıncak - JTextField ve JTextAreas nasıl karıştırılır ve aynı görsel görünüme sahiptir?
- 19. Sabit bir konumda nasıl bir tuşa sahip oluyorsunuz?
- 20. Boş bir alanı JFrame'de nasıl temizlerim?
- 21. nasıl JButton
- 22. Swing Uygulamasında JTextField ile Kes/Kopyala/Yapıştır için Global içerik menüsü?
- 23. Java'da bir düğmeye tıklandığında bir TextField nasıl görünür?
- 24. Ben bir kurucu (Ben düşünüyorum) bir hata arama (Bence) düzeltmek için nasıl bilmiyorum
- 25. Giriş doğrulama sırasında geçici bir balon araç ipucu nasıl görüntülenir?
- 26. Bu bileşenler JPanel'de nasıl ayarlanır?
- 27. Bean sınıfına bir JList nasıl bağlanır
- 28. Düzenlenebilir bir JComboBox
- 29. Bir dizide ikili sayıyı "etrafına sarmak" nasıl yapılır?
- 30. Yöntem hatası içinde bir JFrame'in eylem dinleyicide kapatılması
Orada 2 JTextFields, ilk kullanıcı adı için, şifre ikinci ve bir JMenuItem denilen Günlüğü (sadece bir odaklanabilir bileşeni :) ile bir GUI test değil)
, ben uygulamayı çalıştırmak an, ilk JTextField odaklanmıştır, ben istemiyorum –
BTW - her bir uygulama için kullanıcı adı eğer. Kurulum * Beklenecek * Beklenecek *, sadece kullanıcı adı alanını varsayılan olarak doldurun ve eğer doğruysa kullanıcı sekmesini bir sonraki alana bırakın. Sabit * garantili * ise, alanı doldurun ve devre dışı bırakın. ** ** odaklanabilir olmayacak ve odak varsayılan olarak 2. alana gidecektir. –