以上就是给各位分享从JButton显示/隐藏JPopupMenu;FocusListener无法正常工作?,其中也会对button隐藏不可见进行解释,同时本文还将给你拓展Androiddrawable
以上就是给各位分享从JButton显示/隐藏JPopupMenu;FocusListener无法正常工作?,其中也会对button隐藏不可见进行解释,同时本文还将给你拓展Android drawable ic_menu_star无法正常工作?、Android listfragment onItemClick无法正常工作?、Android ScaleListener无法正常工作、android – ListView setOnItemClickListener无法正常工作等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:- 从JButton显示/隐藏JPopupMenu;FocusListener无法正常工作?(button隐藏不可见)
- Android drawable ic_menu_star无法正常工作?
- Android listfragment onItemClick无法正常工作?
- Android ScaleListener无法正常工作
- android – ListView setOnItemClickListener无法正常工作
从JButton显示/隐藏JPopupMenu;FocusListener无法正常工作?(button隐藏不可见)
我需要一个带有附加的下拉样式菜单的JButton。因此,我采用了JPopupMenu并将其附加到JButton上,就像在下面的代码中看到的那样。它需要做的是:
- 单击时显示弹出窗口
- 如果第二次单击则将其隐藏
- 如果在弹出窗口中选择了一项,则将其隐藏
- 如果用户单击屏幕上的其他位置,则将其隐藏
这4种方法都可以使用,但是由于我使用的是boolean标志,如果用户单击其他位置或选择了一个项目,则必须在该按钮上再次单击两次才能再次显示它。这就是为什么我尝试添加一个FocusListener(它绝对没有响应)来解决此问题,并在这种情况下将标志设置为false的原因。
编辑:在答案中的最后尝试…
这里是侦听器:(它在扩展JButton的类中,因此第二个侦听器在JButton上。)
// Show popup on left click.menu.addFocusListener(new FocusListener() { @Override public void focusLost(FocusEvent e) { System.out.println("LOST FOCUS"); isShowingPopup = false; } @Override public void focusGained(FocusEvent e) { System.out.println("GAINED FOCUS"); }});addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println("isShowingPopup: " + isShowingPopup); if (isShowingPopup) { isShowingPopup = false; } else { Component c = (Component) e.getSource(); menu.show(c, -1, c.getHeight()); isShowingPopup = true; } }});
我已经为此打了太久了。如果有人可以告诉我这是怎么回事,那太好了!
谢谢!
码:
public class Button extends JButton { // Icon. private static final ImageIcon ARROW_SOUTH = new ImageIcon("ArrowSouth.png"); // Unit popup menu. private final JPopupMenu menu; // Is the popup showing or not? private boolean isShowingPopup = false; public Button(int height) { super(ARROW_SOUTH); menu = new JPopupMenu(); // menu is populated somewhere else // FocusListener on the JPopupMenu menu.addFocusListener(new FocusListener() { @Override public void focusLost(FocusEvent e) { System.out.println("LOST FOCUS"); isShowingPopup = false; } @Override public void focusGained(FocusEvent e) { System.out.println("GAINED FOCUS"); } }); // ComponentListener on the JPopupMenu menu.addComponentListener(new ComponentListener() { @Override public void componentShown(ComponentEvent e) { System.out.println("SHOWN"); } @Override public void componentResized(ComponentEvent e) { System.out.println("RESIZED"); } @Override public void componentMoved(ComponentEvent e) { System.out.println("MOVED"); } @Override public void componentHidden(ComponentEvent e) { System.out.println("HIDDEN"); } }); // ActionListener on the JButton addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println("isShowingPopup: " + isShowingPopup); if (isShowingPopup) { menu.requestFocus(); isShowingPopup = false; } else { Component c = (Component) e.getSource(); menu.show(c, -1, c.getHeight()); isShowingPopup = true; } } }); // Skip when navigating with TAB. setFocusable(true); // Was false first and should be false in the end. menu.setFocusable(true); }}
答案1
小编典典这是另一种方法,即使不是很优雅,也算是不错的,据我所知,它是可行的。首先,在最顶部,我添加了一个名为的第二个布尔值showPopup
。
的FocusListener
必须如下:
menu.addFocusListener(new FocusListener() { @Override public void focusLost(FocusEvent e) { System.out.println("LOST FOCUS"); isShowingPopup = false; } @Override public void focusGained(FocusEvent e) { System.out.println("GAINED FOCUS"); isShowingPopup = true; } });
该isShowingPopup
布尔没有得到改变其他地方-如果它获得焦点,它假定它表示,如果它失去焦点,它假定它不是。
接下来,ActionListener
按钮上的有所不同:
addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println("isShowingPopup: " + isShowingPopup); if (showPopup) { Component c = (Component) e.getSource(); menu.show(c, -1, c.getHeight()); menu.requestFocus(); } else { showPopup = true; } } });
现在出现了真正的新东西。这是一个MouseListener
按钮:
addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { System.out.println("ispopup?: " + isShowingPopup); if (isShowingPopup) { showPopup = false; } } @Override public void mouseReleased(MouseEvent e) { showPopup = true; } });
基本上,mousePressed
在菜单失去焦点之前被调用,因此isShowingPopup
反映了是否在按下按钮之前显示了弹出窗口。然后,如果菜单在那里,我们将其设置showPopup
为false
,这样该actionPerformed
方法在调用菜单后(放开鼠标后)就不会显示菜单。
在每种情况下,它的行为均符合预期,但只有一种:如果显示菜单,并且用户在按钮上按下鼠标但将其释放到按钮外,actionPerformed
则永远不会调用。这意味着它showPopup
仍然为假,并且下次按下该按钮时不会显示菜单。要解决此问题,mouseReleased
方法将重置showPopup
。据我所知,该mouseReleased
方法在after之后被调用actionPerformed
。
我在结果按钮上玩了一点,对按钮做了所有我想得到的事情,并且按预期工作。但是,我不是100%肯定事件将始终以相同的顺序发生。
最终,我认为这至少值得一试。
Android drawable ic_menu_star无法正常工作?
我正在设计XML菜单:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:icon="@android:drawable/ic_menu_preferences" android:title="@string/menu_preferences" android:id="@+id/menu_preferences"/>
<item android:id="@+id/menu_bookmarks" android:title="@string/menu_bookmarks" android:icon="@android:drawable/ic_menu_star"></item>
<item android:title="@string/menu_history" android:id="@+id/menu_history" android:icon="@android:drawable/ic_menu_recent_history"></item>
</menu>
当我尝试使用android画眉笔ic_menu_star时,我的日食抛出错误:
[2011-07-06 00:52:28 - Testapp] W/ResourceType( 1852): Bad XML block: header size 51 or total size 3342532 is larger than data size 0
[2011-07-06 00:52:28 - Testapp] C:\eclipseprojects\Testapp\res\menu\search_menu.xml:4: error: Error: Resource is not public. (at 'icon' with value '@android:drawable/ic_menu_star').
我已经检查了项目中的android资源,它就在其中。我在android 2.1框架上构建我的项目。这是一个错误吗?
Android listfragment onItemClick无法正常工作?
我有一个ListFragment,我想使用onitemclick事件.但我有很多问题.你能帮助我吗 ?我把事件开始是正确的还是正确的?
提前致谢. ..
public class MesajFragment extends android.support.v4.app.ListFragment
...
@Override
public void onStart() {
// Todo Auto-generated method stub
super.onStart();
getListView().setonItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// Todo Auto-generated method stub
Toast.makeText(getActivity(), arg2 + " okwww ",
Toast.LENGTH_LONG);
}
});
}
解决方法:
你没有在吐司消息上调用.show().它应该如下所示:
Toast.makeText(getActivity(), arg2 + " okwww ",
Toast.LENGTH_LONG).show();
最后看到.show()?你的onClick可能正常工作.它似乎不是因为你的Toast消息没有显示
Android ScaleListener无法正常工作
如何解决Android ScaleListener无法正常工作?
我有以下问题:我想检测和区分同一视图上的用户“触摸”和“单击”。我已经在其他视图上方的视图上注册了onTouch-Listener(参见代码)。
预期的行为::如果用户点击它,则onClick事件将被传递到其下方的视图。如果用户执行缩放手势,则下面的视图将被缩放。
使用侦听器查看
trackpad.setonTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view,MotionEvent motionEvent) {
if(scaleDetector.onTouchEvent(motionEvent)) {
Log.d("PadLayout","Scaling");
return true;
} else {
Log.d("PadLayout","No Scale detected,this is a tap. Returning false.");
return false;
}
}
});
这是我的ScaleGestureDetector(“ scaleDetector”)中的ScaleListener:
private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
float factor = 1;
@Override
public boolean onScale(ScaleGestureDetector scaleGestureDetector) {
factor *= scaleGestureDetector.getScaleFactor();
factor = Math.max(1,Math.min(factor,ResourcesCompat.getFloat(getResources(),R.dimen.pad_large)));
setPadScaleFactor(factor); // this method sets scaleX and scaleY
return true;
}
@Override
public boolean onScaleBegin(ScaleGestureDetector scaleGestureDetector) {
return true;
}
}
此代码的问题在于,它永远不会检测到敲击。我可以缩放视图,但是一旦点击它,它什么也没做。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
android – ListView setOnItemClickListener无法正常工作
就像标题所说,我的setonItemClickListener不起作用.我查看了迄今为止我所看到的所有内容,并且无法找到我的错误.
这是代码:
这是有问题的课程.它不是主类,而是从意图调用:
package...;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.listadapter;
import android.widget.ListView;
public class GroupActivity extends Activity {
String group_id = "";
Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_group);
context = this;
Intent intent = getIntent();
group_id = intent.getStringExtra("group_id");
Log.i("bla", "Launched GroupActivity for group_id " + group_id);
final SubAdapter adapter = new SubAdapter(this, group_id);
ListView lv = (ListView) findViewById(R.id.listView1);
lv.setClickable(true);
lv.setAdapter(adapter);
lv.setonItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> av, View v, int idx, long lidx) {
Log.i("print here", "blaa " + idx);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
这是SubAdapter类:
package...;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.text.format.DateUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class SubAdapter extends BaseAdapter {
private static final int thumb_width = 128;
private static final int thumb_hight = 128;
private static Bitmap default_thumb = null;
private static LayoutInflater inflater = null;
private final String group_id_;
private final Activity activity;
private final SubAdapter t = this;
// used to keep selected position in ListView
private int selectedPos = -1; // init value for not-selected
public SubAdapter(Activity a, final String group_id) {
Drawable d = a.getResources().getDrawable(R.drawable.ic_contact_picture);
default_thumb = ((BitmapDrawable) d).getBitmap();
activity = a;
group_id_ = group_id;
inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int idx, View convertView, ViewGroup parent) {
Log.i("bla2", "getting view with index " + idx);
View vi = convertView;
if (convertView == null) {
vi = inflater.inflate(R.layout.sub_list_item, null);
vi.setClickable(true);
}
TextView tv1 = (TextView)vi.findViewById(R.id.textView1);
TextView tv2 = (TextView)vi.findViewById(R.id.textView2);
ImageView img = (ImageView)vi.findViewById(R.id.imageView1);
tv1.setText("first name" + " " + "last name");
tv2.setText("some date");
// put thumbnail
Bitmap thumb = default_thumb;
img.setimageBitmap(thumb);
Log.i("bla3", "index is " + idx + "selected index is " + selectedPos);
if(selectedPos == idx){
Log.i("bla4", "inside if");
}
return vi;
}
public void setSelectedPosition(int pos){
selectedPos = pos;
// inform the view of this change
notifyDataSetChanged();
}
@Override
public void notifyDataSetChanged() {
super.notifyDataSetChanged();
}
}
这是activity_group xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".GroupActivity" >
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:focusableInTouchMode="false"
android:focusable="false" >
</ListView>
</RelativeLayout>
这是sub_list_item xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:focusable="false"
android:focusableInTouchMode="false">
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_margin="6dp"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_margin="6dp"
android:layout_toLeftOf="@+id/toggleButton1"
android:layout_toRightOf="@+id/imageView1"
android:text="some text"
android:textAppearance="?android:attr/textAppearance" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView1"
android:layout_below="@+id/textView1"
android:layout_toLeftOf="@+id/toggleButton1"
android:text="more text"
android:textAppearance="?android:attr/textAppearance" />
<ToggleButton
android:id="@+id/toggleButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_margin="6dp"
android:text="present" />
</RelativeLayout>
除了点击监听器之外,其他一切似乎都有效. SubAdapter正确打开并填充列表.
基本上我正在寻找的是获取消息“Log.i(”print here“,”blaa“idx);”打印 – 它是ListView的setonItemClickListener中的日志(见上图)
如果缺少任何其他相关代码,请与我们联系
谢谢!!!
解决方法:
你可能应该删除这个电话
vi.setClickable(真);在您的SubAdapter类中,因为您的convertView将在onItemClick侦听器之前使用单击.
今天关于从JButton显示/隐藏JPopupMenu;FocusListener无法正常工作?和button隐藏不可见的讲解已经结束,谢谢您的阅读,如果想了解更多关于Android drawable ic_menu_star无法正常工作?、Android listfragment onItemClick无法正常工作?、Android ScaleListener无法正常工作、android – ListView setOnItemClickListener无法正常工作的相关知识,请在本站搜索。
本文标签: