我正在研究一个java教程,看到在GridLayout中找到JButton的x/y索引的方法是遍历与布局关联的按钮b的二维数组,并检查是否
b[i][j] == buttonReference.
@Override
public void actionPerformed(ActionEvent ae) {
JButton bx = (JButton) ae.getSource();
for (int i = 0; i < 5; i++)
for (int j = 0; j < 5; j++)
if (b[i][j] == bx)
{
bx.setBackground(Color.RED);
}
}
Run Code Online (Sandbox Code Playgroud)
是否有更简单的方法来获取按钮的X/Y索引?
就像是:
JButton button = (JButton) ev.getSource();
int x = this.getContentPane().getComponentXIndex(button);
int y = this.getContentPane().getComponentYIndex(button);
Run Code Online (Sandbox Code Playgroud)
this是一个GameWindow实例,ev当用户按下按钮时触发ActionEvent.

在这种情况下,它应该得到:x == 2,y == 1
@ GameWindow.java:
package javaswingapplication;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.*;
import javax.swing.*;
public class …Run Code Online (Sandbox Code Playgroud) 我试图建立一个javax.swing.JTextField与javax.swing.JList用于自动完成像谷歌.
当写一个单词时,Google显示几个匹配和
我的应用是关于圣经,我想在研究圣经时寻找一个特定的词.我已经看过Java2sAutoTextField,但箭头键没有这种特殊的行为.
我一直在开发java程序一年半.我目前正在开展夏季项目,涉及相当大的图形用户界面.
我的GUI由几个选项卡式窗格组成.每个窗格都有自己的类.每个窗格都有几个jButtons.
现在,我已经到了一个点,在我的选项卡式窗格类中有很多匿名内部类(对于ActionListeners),我确信必须有更好的方法; 如果不是为了效率,那么为了可维护性 - 它变得非常混乱.
我的问题是:当你在每个班级中有很多听众时,是否有更好的组织听众?我已经考虑过在相关类中集中监听器 - 如下面的示例代码:
public class SomeListeners implements ActionListener{
@Override
public void actionPerformed(ActionEvent e){
String command = e.getActionCommand();
switch(command){
case "This button":
doThis();
break;
case "That button":
doThat();
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
或者可能有更好的方法?
提前致谢 :)
我正在尝试创建一个由单元格组成的10 x 10网格的Java游戏.网格看起来像这样:
public class Grid extends JPanel implements MouseListener {
public static final int GRID_SIZE = 10;
public Grid() {
setPreferredSize(new Dimension(300, 300));
setLayout(new GridLayout(GRID_SIZE, GRID_SIZE));
for (int x = 0; x < GRID_SIZE; x++)
for (int y = 0; y < GRID_SIZE; y++)
add(new Cell(x, y));
addMouseListener(this);
}
// All Mouse Listener methods are in here.
Run Code Online (Sandbox Code Playgroud)
Cell类看起来像这样:
public class Cell extends JPanel {
public static final int CELL_SIZE = 1;
private int xPos;
private int yPos;
public Cell …Run Code Online (Sandbox Code Playgroud) 对于路由操作请求,我想为所有组件使用单个ActionListener实例.可以使用setActionCommand区分对actionPerformed的调用.
这是建议吗?在MVC环境中,这种方法是否有任何潜在的缺点?
我有一个对话框,它有四个按钮,分别是New,Save,Delete,Cancel.现在,每个人都需要执行他们的行动.所以我定义了一个实现了一个单独的类ActionListener.我已经使用这个类来执行每个按钮操作.
public class MyClass implements ActionListener {
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().toString() == "OK") {
// Code
} else if( .. ){
}
}
}
Run Code Online (Sandbox Code Playgroud)
我所做的是,我定义了一个内部类,我曾经用它来做同样的功能.但是我没有得到的是,最好的做法是编写一个单独的类,还是最好使用内部类.我被建议在公共课上写,所以明天有人可以用这个课来表演他们的行动.所以我有以下问题,
如果任何对象都没有调用该功能(我不能说)那么我可以在内部类中编写它吗?要么
总是编写执行该对话框操作的内部类是一个好习惯吗?
我正在编写一个Java程序,其中有一系列按钮(不是计算器!),我正在寻找一种有效的方法来了解哪个JButton被点击了.据我所知,到目前为止,Java的唯一方法是将它们全部放在同一个ActionListener中,然后循环查找匹配项.
我刚想到的另一个解决方案是扩展JButton以在构造函数中包含唯一的ID号变量.在检查instanceof后将事件对象强制转换为JButton时,似乎应该可以工作.有点像使用分配给索引号的VB的Tag属性.
有更好/更优雅的方式吗?
我在JFrame中添加了大约10个复选框,这些是添加在for循环中的迭代,代码是这样的
JFrame f=new JFrame("hello ");
FlowLayout fl= new FlowLayout();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(300,300);
f.setVisible(true);
f.setLayout(fl);
for (int i=0 ; i<10; i++)
{
b[i]=new JCheckBox();
b[i].setVisible(true);
b[i].addItemListener(this);
f.add(b[i]);
} /// and so on .
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我实现ItemListener时,我必须访问每个CheckBox,例如This
if(b [1] .isSelected()),if(b [2] .isSelected())或者还有其他任何技术可以使用一个循环或像这样的东西..在此先感谢
我无法弄清楚如何添加Actionlisteners到JButtons,任何帮助将非常感激.
public class Translator extends JPanel implements MouseListener, ActionListener {
private JButton french = new JButton();
private JButton german = new JButton();
private JButton irish = new JButton();
public Translator(){
french = new JButton("French");
german = new JButton("German");
irish = new JButton("Irish");
setLayout(new GridLayout(2,1));
buttonPanel.setLayout(new GridLayout(1,3));
buttonPanel.add(french);
buttonPanel.add(german);
buttonPanel.add(irish);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public …Run Code Online (Sandbox Code Playgroud) java ×9
swing ×9
jbutton ×3
arrays ×2
grid-layout ×2
awt ×1
itemlistener ×1
jcheckbox ×1
jpanel ×1
jtextfield ×1
text ×1