java 中jcombobox怎么用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 中jcombobox怎么用相关的知识,希望对你有一定的参考价值。
参考技术A 1. 构造方法:* JComboBox() 建立一个JComboBox组件.
* JComboBox(ComboBoxModel model) 根据model建立一个JComboBox组件.
* JComboBox(Objext[] items) 利用数组对象建立一个JComboBox组件.
* JComboBox(Vector items) 利用Vector对象建立一个JComboBox组件.
2. 增加item和侦听器等操作:
* additem 增加item
*insertitemAt 插入item
*removeitem 删除item
*removeitemAt 将某个item删除
*setselectitem 设置选择的item
*setselectitemIndex 设置选择的item序号
*Seteditable 可编辑
下面是一个例子:
String[] schoolage = "本科", "硕士", "博士" ;
schoolageComboBox = new JComboBox(schoolage);
schoolageComboBox.addItem("其他");
schoolageComboBox.insertItemAt("请选择", 0);
schoolageComboBox.setSelectedIndex(0);
schoolageComboBox.addItemListener(new ItemListener()
public void itemStateChanged(ItemEvent e)
if (e.getStateChange() == ItemEvent.SELECTED) // 查看是否为新选中的选项触发
if (e.getItem().equals("其他") || e.getItem().equals("")) // 查看触发的选项
schoolageComboBox.setEditable(true); // 设置选择框为可编辑
schoolageComboBox.setSelectedItem(""); // 将选项值修改为0字节
else
schoolageComboBox.setEditable(false); // 设置选择框为不可编辑本回答被提问者和网友采纳 参考技术B 构造函数
JComboBox()
创建具有默认数据模型的 JComboBox。
JComboBox(ComboBoxModel aModel)
创建一个 JComboBox,其项取自现有的 ComboBoxModel 中。
JComboBox(Object[] items)
创建包含指定数组中的元素的 JComboBox。
JComboBox(Vector<?>
items)
创建包含指定 Vector 中的元素的 JComboBox。
方法详细信息
installAncestorListener
protected void installAncestorListener()
setUI
public void setUI(ComboBoxUI ui)
设置呈现此组件的 L&F 对象。
参数:
ui - ComboBoxUI L&F 对象
另请参见:
UIDefaults.getUI(javax.swing.JComponent)
updateUI
public void updateUI()
将 UI 属性重置为当前外观的值。
覆盖:
类 JComponent 中的 updateUI
另请参见:
JComponent.updateUI()
getUIClassID
public String getUIClassID()
返回呈现此组件的 L&F 类的名称。
覆盖:
类 JComponent 中的 getUIClassID
返回:
字符串“ComboBoxUI”
另请参见:
JComponent.getUIClassID(),
UIDefaults.getUI(javax.swing.JComponent)
getUI
public ComboBoxUI getUI()
返回呈现此组件的 L&F 对象。
返回:
呈现此组件的 ComboBoxUI 对象。
setModel
public void setModel(ComboBoxModel aModel)
设置 JComboBox 用于获取项列表的数据模型。
参数: 参考技术C 构造函数
JComboBox()
创建具有默认数据模型的 JComboBox。
JComboBox(ComboBoxModel aModel)
创建一个 JComboBox,其项取自现有的 ComboBoxModel 中。
JComboBox(Object[] items)
创建包含指定数组中的元素的 JComboBox。
JComboBox(Vector<?>
items)
创建包含指定 Vector 中的元素的 JComboBox。
方法详细信息
installAncestorListener
protected void installAncestorListener()
setUI
public void setUI(ComboBoxUI ui)
设置呈现此组件的 L&F 对象。
参数:
ui - ComboBoxUI L&F 对象
另请参见:
UIDefaults.getUI(javax.swing.JComponent)
updateUI
public void updateUI()
将 UI 属性重置为当前外观的值。
覆盖:
类 JComponent 中的 updateUI
另请参见:
JComponent.updateUI()
getUIClassID
public String getUIClassID()
返回呈现此组件的 L&F 类的名称。
覆盖:
类 JComponent 中的 getUIClassID
返回:
字符串“ComboBoxUI”
另请参见:
JComponent.getUIClassID(),
UIDefaults.getUI(javax.swing.JComponent)
getUI
public ComboBoxUI getUI()
返回呈现此组件的 L&F 对象。
返回:
呈现此组件的 ComboBoxUI 对象。
setModel
public void setModel(ComboBoxModel aModel)
设置 JComboBox 用于获取项列表的数据模型。
参数:
aModel - 提供显示的项列表的 ComboBoxModel
Java JComboBox 接受 ArrayList 但不显示 ArrayList 的项目
【中文标题】Java JComboBox 接受 ArrayList 但不显示 ArrayList 的项目【英文标题】:Java JComboBox takes in ArrayList but doesn't show items of ArrayList 【发布时间】:2020-09-11 11:56:07 【问题描述】:我正在尝试用我的数据库中的记录填充组合框。在我的控制器中,我使用 MVC,在我的模型中,我有一个 getAllRoutes() 方法,它将数据库中的所有路由名称放入一个 ArrayList 中。此方法按预期工作,因为我在其中添加了一个 System.out.println() ,表明 ArrayList 确实填充了数据库值。
在我的控制器中,我创建了一个名为“routes”的新 ArrayList,并使用我在 getAllRoutes() 方法的返回中放入的 ArrayList 对其进行初始化。这也有效,因为我添加了 System.out.println() 并打印。
在我的视图中,我创建了一个新的 JComboBox、一个新的 ArrayList 组合框值和一个新方法 setComboBoxValues(),它只填充了 ArrayList 组合框值。回到控制器中,我调用 setComboBoxValues() 方法并用“路由”ArrayList 填充它。
但由于某种原因,当我运行程序时,JComboBox 保持为空(见下图)。我做错了什么?
我的模特:
package main.java.models;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import main.java.controllers.MapController;
import main.resources.ConnectionManager;
import javax.swing.*;
public class MapModel
List<String> coordinateList = new ArrayList<String>(); //deze moet naar fillCoordinateListArray
public List<String> fillCoordinateListArray(int selected)
try (Connection connection = ConnectionManager.getConnection())
String query = "SELECT RouteLocationID, RouteLocations.RouteID, X, Y FROM RouteLocations WHERE RouteID = ?";
PreparedStatement stmt = connection.prepareStatement(query);
stmt.setInt(1, 1);
ResultSet results = stmt.executeQuery();
while (results.next())
double X = results.getDouble(3);
double Y = results.getDouble(4);
coordinateList.add(X + "," + Y);
catch (SQLException e)
System.out.println("Er is een fout opgetreden.");
e.printStackTrace();
return coordinateList;
//method end
public String parseCoordinates()
String text = "";
for(int i = 0; i<coordinateList.size(); i++)
text+="&markers=label:" + (i+1) + "%7C" + coordinateList.get(i) + "%7C";
return text;
//method end
public ArrayList getAllRoutes()
ArrayList<String> routeArrayList = new ArrayList<String>();
try (Connection connection = ConnectionManager.getConnection())
String query = "SELECT RouteID, RouteName FROM route";
PreparedStatement stmt = connection.prepareStatement(query);
ResultSet results = stmt.executeQuery();
while (results.next())
String routeName = results.getString(2);
routeArrayList.add(routeName);
catch (SQLException e)
System.out.println("Er is een fout opgetreden.");
e.printStackTrace();
System.out.println(routeArrayList);
return routeArrayList;
//method end
//class end
我的控制器:
import main.app.view.MapView;
import main.java.models.MapModel;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import javax.imageio.ImageIO;
import javax.swing.*;
public class MapController
private MapView view;
private MapModel model;
public MapController(MapView view, MapModel model)
this.view = view;
MapController.ListenerOfActions listener = new MapController.ListenerOfActions();
view.addListenerOfActions(listener);
this.model = model;
this.model.getAllRoutes();
ArrayList<String> routes = model.getAllRoutes();
this.view.getRouteComboBox().getSelectedItem();
this.view.setComboBoxValues(routes);
System.out.println(routes);
this.updateMap(1);
this.view.setVisible(true);
//constructor end
private void updateMap(int routeID)
model.fillCoordinateListArray(routeID);
Image image = null;
try
URL url = new URL("https://maps.googleapis.com/maps/api/staticmap?" +
"&size=600x450" +
"&maptype=roadmap" +
this.model.parseCoordinates() +
//"San+Francisco,CA" + "%7C" +
//"&markers=label:1%7C40.702147,-74.015794" + "%7C" +
"&key=AIzaSyAbLM94WcbkB-cf_ubHXOHmCDSsNWEz7XE");
image = ImageIO.read(url);
// System.out.print(url);
catch (IOException e)
System.out.println("Ongeldige URL");
e.printStackTrace();
this.view.setImage(image);
this.view.repaint();
//method end
class ListenerOfActions implements ActionListener
int selected = 0;
@Override
public void actionPerformed(ActionEvent e)
String actionCommand = e.getActionCommand();
if(actionCommand.equals("OK"))
int selected = view.getRouteComboBox().getSelectedIndex() + 1;
System.out.println(selected);
System.out.println("hallo");
updateMap(selected);
public int getSelected()
return this.selected;
//class end
//class end
我的观点:
package main.app.view;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.border.Border;
import main.java.models.MapModel;
import main.resources.ConnectionManager;
public class MapView extends JPanel
public Image image;
private JLabel jlImage;
private JLabel jlName;
private static JButton jbOk;
private ArrayList<String> comboBoxValues;
private JComboBox routeComboBox = new JComboBox();
//private JComboBox<ArrayList<>>;
private ActionListener actionListener;
public MapView()
super(new FlowLayout());
setSize(900, 450);
this.add(getRouteComboBox());
jbOk = new JButton("OK");
jbOk.setActionCommand("OK");
jbOk.addActionListener(this.actionListener);
add(jbOk);
// comboBoxValues.toArray();
//constructor end
public void setComboBoxValues(ArrayList<String> comboBoxValues)
this.comboBoxValues = comboBoxValues;
public void setImage(Image image)
this.image = image;
public MapView getView()
jlImage = new JLabel(new ImageIcon(this.image));
add(jlImage);
return this;
public void addListenerOfActions(ActionListener listenForAction)
this.actionListener = listenForAction;
public JComboBox getRouteComboBox()
return routeComboBox;
//class end
空JComboBox的图片: enter image description here
【问题讨论】:
【参考方案1】:在我的视图中,我创建了一个新的 JComboBox、一个新的 ArrayList comboBoxValues 和一个新方法 setComboBoxValues(),它只填充了 ArrayList comboBoxValues。
所以你有一个包含数据的 ArrayList。
如何期望数据神奇地出现在组合框中?答案是不会。
您需要将 ArrayList 中的数据复制到 setComboBoxValues(…)
method 中的组合框:
类似:
for (String item: comboBoxValues)
comboBox.addItem( item );
实际上你甚至不需要在你的视图类中使用 ArrayList,因为数据将存储在组合框的模型中。
阅读 How to Use Combo Boxes 上的 Swing 教程部分了解基础知识。
【讨论】:
以上是关于java 中jcombobox怎么用的主要内容,如果未能解决你的问题,请参考以下文章