Java 如何在我没有调用的对象上调用方法';是否不为其指定引用名称?
例如,我试图对我在add方法的参数括号内构造的Java 如何在我没有调用的对象上调用方法';是否不为其指定引用名称?,java,arrays,swing,jpanel,jbutton,Java,Arrays,Swing,Jpanel,Jbutton,例如,我试图对我在add方法的参数括号内构造的JButton调用setEnable方法: add(new JButton()); 我知道我可以这样做: JButton button = new JButton(); button.setEnable(false); 但是有没有办法在我没有指定引用名称的JButton上调用setEnable 我没有为JButton分配引用名称的原因是,我应该向JPanel添加未知数量的JButton。我是如何做到这一点的,就是使用这个for循环 for (in
JButton
调用setEnable
方法:
add(new JButton());
我知道我可以这样做:
JButton button = new JButton();
button.setEnable(false);
但是有没有办法在我没有指定引用名称的JButton
上调用setEnable
我没有为JButton分配引用名称的原因是,我应该向JPanel添加未知数量的JButton。我是如何做到这一点的,就是使用这个for循环
for (int i = 0; i < numberOfButtonsToAdd; i++)
{
JPanelName.add(new JButton());
}
for(int i=0;i
我希望所有的JButtons都被禁用。如果你把它添加到一个面板中,你可以得到该面板的组件,并通过这些组件循环,如果其中一个是按钮,你可以调用
setEnabled(
),但是如果有多个按钮,你必须确定它是否正确
编辑:
既然您添加了希望禁用所有按钮,那么这个方法应该可以很好地工作。示例:
全部:
只是按钮:
for(Component c : panel.getComponents()){
if(c instanceof JButton){
((JButton)c).setEnabled(false);
}
}
不,你不能。如果
setEnabled()
返回了它正在启用的对象,则可以在一行中启用并添加该对象。但实际上,setEnabled()
返回void
,因此您别无选择,只能使用局部变量
但是,默认情况下,
JButton
是启用的,因此不需要显式地对其调用setEnabled()
,它已经启用了 唯一可行的方法是,如果要将其添加到的对象有get方法。除此之外,你没有其他选择。最好的方法就是你展示的
JButton button = new JButton();
button.setEnable(true);
您可以在新实例中调用方法,如
new JButton().setEnabled(true);
但是这将不允许您访问您在此处创建的JButton
实例,因此您无法调用add()
只有当方法调用返回调用它的实例对象时,这才可能发生。因此,如果例如setEnabled
将返回调用它的同一实例(即setEnabled
上下文中的this
),您可以执行add(new JButton().setEnabled(true))
无论如何,在您的情况下,不要害怕使用引用:
final JButton button = new JButton();
button.setEnabled(true);
add(button);
请注意,在这种情况下,可以按任何顺序调用最后2个方法,结果将是相同的。您在注释中声明:
我没有为JButton分配引用名称的原因是,我应该向JPanel添加未知数量的JButton。我如何做到这一点,是通过使用for循环:for(int I=0;I// in your field declarations
List<JButton> buttonList = new ArrayList<JButton>();
// elsewhere in your program
for (int i = 0; i < numberOfButtonsToAdd; i++) {
JButton button = new JButton();
buttonList.add(button);
somePanel.add(button);
}
请注意,这是您在最初的问题中应该提前与我们共享的关键信息
编辑 你现在说: 我希望所有的按钮都被禁用 然后,只需从一开始就将其禁用:
for (int i = 0; i < numberOfButtonsToAdd; i++) {
JButton button = new JButton();
button.setEnabled(false);
buttonList.add(button);
somePanel.add(button);
}
for(inti=0;i
尽管我很好奇——为什么所有人都是残疾人?为什么没有ActionListener?没有短信
编辑2
你说: 我以后还能访问这些单独的按钮吗,因为它们都被分配了“按钮” 请理解变量名并不重要,事实上,在我上面的示例中,名为button的变量不存在于声明它的for循环之外。相反,重要的是对JButton对象的引用。正如在其他答案中所讨论的,您也知道,这可以通过使用变量来获得,但它不必是直接指向JButton的变量,它可以是
ArrayList
的变量,就像在本例中一样。这就是为什么我建议你创建这个实体
编辑3
例如:
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;
public class ButtonLists extends JPanel {
private static final int ROWS = 6;
private static final int COLS = 6;
private List<JButton> allButtons = new ArrayList<JButton>();
private List<JButton> evenButtons = new ArrayList<JButton>();
public ButtonLists() {
JPanel gridPanel = new JPanel(new GridLayout(ROWS, COLS));
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
int buttonInt = i * COLS + j;
String buttonString = String.valueOf(buttonInt);
JButton button = new JButton(buttonString);
button.setEnabled(false);
gridPanel.add(button);
allButtons.add(button);
if (buttonInt % 2 == 0) {
evenButtons.add(button);
}
}
}
JPanel bottomPanel = new JPanel();
bottomPanel.add(new JButton(new AbstractAction("Activate All") {
@Override
public void actionPerformed(ActionEvent e) {
for (JButton btn : allButtons) {
btn.setEnabled(true);
}
}
}));
bottomPanel.add(new JButton(new AbstractAction("Activate Even") {
@Override
public void actionPerformed(ActionEvent e) {
for (JButton btn : allButtons) {
btn.setEnabled(false);
}
for (JButton btn : evenButtons) {
btn.setEnabled(true);
}
}
}));
bottomPanel.add(new JButton(new AbstractAction("Activate Odd") {
@Override
public void actionPerformed(ActionEvent e) {
for (JButton btn : allButtons) {
btn.setEnabled(true);
}
for (JButton btn : evenButtons) {
btn.setEnabled(false);
}
}
}));
setLayout(new BorderLayout());
add(gridPanel, BorderLayout.CENTER);
add(bottomPanel, BorderLayout.PAGE_END);
}
private static void createAndShowGui() {
JFrame frame = new JFrame("ButtonLists");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new ButtonLists());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
导入java.awt.BorderLayout;
导入java.awt.GridLayout;
导入java.awt.event.ActionEvent;
导入java.util.ArrayList;
导入java.util.List;
导入javax.swing.*;
公共类按钮列表扩展了JPanel{
私有静态最终整数行=6;
专用静态最终int COLS=6;
private List allButtons=new ArrayList();
private List=new ArrayList();
公共按钮列表(){
JPanel gridPanel=newjpanel(新网格布局(行、列));
对于(int i=0;ifor (int i = 0; i < numberOfButtonsToAdd; i++) {
JButton button = new JButton();
button.setEnabled(false);
buttonList.add(button);
somePanel.add(button);
}
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;
public class ButtonLists extends JPanel {
private static final int ROWS = 6;
private static final int COLS = 6;
private List<JButton> allButtons = new ArrayList<JButton>();
private List<JButton> evenButtons = new ArrayList<JButton>();
public ButtonLists() {
JPanel gridPanel = new JPanel(new GridLayout(ROWS, COLS));
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
int buttonInt = i * COLS + j;
String buttonString = String.valueOf(buttonInt);
JButton button = new JButton(buttonString);
button.setEnabled(false);
gridPanel.add(button);
allButtons.add(button);
if (buttonInt % 2 == 0) {
evenButtons.add(button);
}
}
}
JPanel bottomPanel = new JPanel();
bottomPanel.add(new JButton(new AbstractAction("Activate All") {
@Override
public void actionPerformed(ActionEvent e) {
for (JButton btn : allButtons) {
btn.setEnabled(true);
}
}
}));
bottomPanel.add(new JButton(new AbstractAction("Activate Even") {
@Override
public void actionPerformed(ActionEvent e) {
for (JButton btn : allButtons) {
btn.setEnabled(false);
}
for (JButton btn : evenButtons) {
btn.setEnabled(true);
}
}
}));
bottomPanel.add(new JButton(new AbstractAction("Activate Odd") {
@Override
public void actionPerformed(ActionEvent e) {
for (JButton btn : allButtons) {
btn.setEnabled(true);
}
for (JButton btn : evenButtons) {
btn.setEnabled(false);
}
}
}));
setLayout(new BorderLayout());
add(gridPanel, BorderLayout.CENTER);
add(bottomPanel, BorderLayout.PAGE_END);
}
private static void createAndShowGui() {
JFrame frame = new JFrame("ButtonLists");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new ButtonLists());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}