gpt4 book ai didi

java - 如何将另一个类的组合框的选定索引设置为 0

转载 作者:行者123 更新时间:2023-12-01 16:51:43 25 4
gpt4 key购买 nike

我尝试测试当我按下按钮时是否可以更改组合框选定的索引,但是如果我的组合框从另一个类添加到我的框架中,那么无论我尝试什么,它都不起作用,可以吗?告诉我我想念什么?

我创建组合框的类是:

package MyPackage;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;

public class AddMyBox {

private JComboBox combobox;
String[] array = {"Select", "1", "2", "3"};

public JComboBox theBox() {
combobox = new JComboBox();
combobox.setModel(new DefaultComboBoxModel(array));
combobox.setBounds(10, 11, 414, 20);
return combobox;
}

}

创建框架和添加组件的类是:

package MyPackage;

import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class MyFrame extends JFrame {

public MyFrame() {
getContentPane().setLayout(null);
setVisible(true);

// adding the comboBox from class AddMyBox
AddMyBox getBox = new AddMyBox();
getContentPane().add(getBox.theBox());

JButton btnNewButton = new JButton("New button");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
try {
// if selected index is 1 make it 0 when the button is pressed
if(getBox.theBox().getSelectedIndex() != 0) {
getBox.theBox().setSelectedIndex(0);
}
} catch (Exception e) {
// TODO: handle exception
}
}
});
btnNewButton.setBounds(10, 63, 414, 23);
getContentPane().add(btnNewButton);

setSize(500,400);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}

public void MyFrame1() {
// TODO Auto-generated method stub
}

}

我的主要类(class)是: 打包我的包;

public class MyMain {

public static void main(String[] args) {
// TODO Auto-generated method stub
MyFrame getFrame = new MyFrame();
getFrame.MyFrame1();
}

}

最佳答案

public JComboBox theBox() {
combobox = new JComboBox();
combobox.setModel(new DefaultComboBoxModel(array));
combobox.setBounds(10, 11, 414, 20);
return combobox;
}

每次调用 theBox() 方法时,都会创建一个新的组合框,因此 ActionListener 中的逻辑正在引用框架上不可见的组合框,因此您的可见组合框永远不会改变。

你的类结构是错误的。您需要:

  1. 为该类创建一个构造函数,该构造函数仅创建组合框。基本上,您需要将前 3 条语句移至构造函数。
  2. 更改 theBox() 方法以仅返回 comboBox 变量。 (这是删除前 3 条语句后剩下的唯一语句。

编辑:

我复制了 Hovercrafts 答案中的其他问题,因为 OP 无法引用它们:

其他问题:

  • 这个 combobox.setBounds(10, 11, 414, 20); 不是您想要做的事情 - 包括使用魔数(Magic Number),使此方法极其不灵活,并建议您'正在使用 null 布局,这是您真正想要避免的。
  • getContentPane().setLayout(null); 是的。不要这样做。虽然 null 布局和 setBounds() 对于 Swing 新手来说似乎是创建复杂 GUI 的最简单、最好的方法,但创建的 Swing GUI 越多,使用它们时遇到的困难就越严重。当 GUI 调整大小时,它们不会调整组件的大小,它们是增强或维护的皇家女巫,当放置在滚动 Pane 中时,它们会完全失败,在所有平台或与原始分辨率不同的屏幕分辨率上查看时,它们看起来非常糟糕.
  • catch (Exception e) {//TODO: 处理异常 } -- 按照注释的建议进行操作 -- 处理您的异常并且永远不要忽略它们。否则,您所做的编程就相当于闭着眼睛开车。

关于java - 如何将另一个类的组合框的选定索引设置为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38933817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com