
正文
java三级联动代码 java实现三级联动
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
NetBeans IDE 6.8 JAVA Swing控件三级联动下拉列表怎么写?
用else if不行啊,数据库里如果“系部”有30几个,难道你一个个写过去吗?可以用for循环,把系部加入第一个列表然后 对该列表添加监听器 addActionListener 通过该列表.getSelectedItem得到选中的项 然后专业可以写一个类。里面有一个属性是“系部” 当那些个专业的系部属性为 第一个列表中的值的时候把那些专业的“专业名”属性加入第二个列表中 依次类推我给你一个关于省份,城市,和营业网点的3级下拉列表的例子,你稍微修改就可以了
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel; @SuppressWarnings("serial")
public class Test extends JFrame{
private ListString provinces=new ArrayListString();
private ListCity citys=new ArrayListCity();
private ListBranch branchs=new ArrayListBranch();
private JComboBox provinceBox=new JComboBox();
private JComboBox cityBox=new JComboBox();
private JComboBox branchBox=new JComboBox();
public Test() {
init();
initData();
setBox();
addHandler();
}
public void init(){//初始化GUI界面
JPanel panel=new JPanel();
this.add(panel);
//panel.setLayout(new GridLayout(3,2));
panel.add(new JLabel("省份:"));
panel.add(provinceBox);
panel.add(new JLabel("城市:"));
panel.add(cityBox);
panel.add(new JLabel("营业网点"));
panel.add(branchBox);
}
private void initData(){//初始化省份 城市和营业网点 这些数据实际上应该从数据库里查询
provinces.add("浙江");
provinces.add("广西");
citys.add(new City("浙江","宁波"));
citys.add(new City("浙江","金华"));
citys.add(new City("广西","桂林"));
citys.add(new City("广西","南宁"));
branchs.add(new Branch("浙江","宁波", "宁波镇海网点"));
branchs.add(new Branch("浙江","宁波", "宁波北仑网点"));
branchs.add(new Branch("浙江","金华", "金华网点1"));
branchs.add(new Branch("浙江","金华", "金华网点2"));
branchs.add(new Branch("广西","桂林", "桂林网点1"));
branchs.add(new Branch("广西","桂林", "桂林网点2"));
branchs.add(new Branch("广西","南宁", "南宁网点1"));
branchs.add(new Branch("广西","南宁", "南宁网点2"));
}
private void setBox(){//设置下拉列表里的值
//设置先在各项列表里加入的值
provinceBox.removeAllItems();
cityBox.removeAllItems();
branchBox.removeAllItems();
provinceBox.addItem("所有");
cityBox.addItem("所有");
branchBox.addItem("所有");
for (int i = 0; i provinces.size(); i++) {
provinceBox.addItem(provinces.get(i));
}
for (int i = 0; i citys.size(); i++) {
cityBox.addItem(citys.get(i).getCity());
}
for (int i = 0; i branchs.size(); i++) {
branchBox.addItem(branchs.get(i).getBranch());
}
}
private void addHandler(){//设置3个下拉列表的级联关系
provinceBox.addActionListener(new ActionListener() {
//监听province下拉列表
@Override
public void actionPerformed(ActionEvent e) {
cityBox.removeAllItems();
cityBox.addItem("所有");
branchBox.removeAllItems();
branchBox.addItem("所有");
String province=provinceBox.getSelectedItem().toString();//得到当前点中的值
//在city下拉列表中 遍历citys,如果citys[i]的省份属性和它相同则添加进去,其中要考虑是所有的特殊情况
if(province.equals("所有")){
for (int i = 0; i citys.size(); i++) {
cityBox.addItem(citys.get(i).getCity());
}
}else{
for (int i = 0; i citys.size(); i++) {
if(citys.get(i).getProvince().equals(province)){
cityBox.addItem(citys.get(i).getCity());
}
}
}
//在branch下拉列表中 遍历branchs,如果branchs[i]的省份属性和它相同则添加进去,其中要考虑是所有的特殊情况
if(province.equals("所有")){
for (int i = 0; i branchs.size(); i++) {
branchBox.addItem(branchs.get(i).getBranch());
}
}else{
for (int i = 0; i branchs.size(); i++) {
if(branchs.get(i).getProvince().equals(province)){
branchBox.addItem(branchs.get(i).getBranch());
}
}
}
}
});
//监听cityBox下拉列表
cityBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
branchBox.removeAllItems();
branchBox.addItem("所有");
if(cityBox.getSelectedItem()==null){
return ;
}
String city=cityBox.getSelectedItem().toString();//得到当前点中的值
if(city.equals("所有")){//如果是所有,则看省份框中是什么值
if(provinceBox.getSelectedItem().equals("所有")){
for (int i = 0; i branchs.size(); i++) {
branchBox.addItem(branchs.get(i).getBranch());
}
}else{
for (int i = 0; i branchs.size(); i++) {
if(branchs.get(i).getProvince().equals(provinceBox.getSelectedItem())){
branchBox.addItem(branchs.get(i).getBranch());
}
}
}
}else{
for (int i = 0; i branchs.size(); i++) {
if(city.equals(branchs.get(i).getCity())){
branchBox.addItem(branchs.get(i).getBranch());
}
}
}
}
});
}
private void showMe(){
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.pack();
}
public static void main(String[] args) {
new Test().showMe();
}
} //下面是要用的2个类
class City{//城市类
private String city;//城市名
private String province;//所属省份
public City() {
// TODO Auto-generated constructor stub
}
public City(String province,String city) {
super();
this.province = province;
this.city = city;
} public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
}
class Branch{//网点类
private String province;//所属省份
private String city;//所属城市
private String branch;//网点名 public Branch(String province, String city, String branch) {
super();
this.province = province;
this.city = city;
this.branch = branch;
}
public String getBranch() {
return branch;
}
public void setBranch(String branch) {
this.branch = branch;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
}
相关问答
Q1: JAVA实现Ajax三级联动?
那就给你说下二级联动吧 ,三级道理也是一样的。
根据第一级下拉框,点击事件后,将id传递给服务器,服务器根据该id,经过数据库查询,获得二级下拉框的内容,这里的内容你可以用xml封装,或者是直接写成dom格式:如dom格式
服务端:
PrintWriter writer = response.getWriter();
writer.println("select");
while(rs.next()){
writer.println("option"+rs.getString("xxx")+"/option");
writer.flush();
}
writer.println("/select");
writer.close();
客户端:
var selectStr=xmlHttp.responseText;//二集菜单的内容
找个元素,将二级菜单项利用innerHTML插入到网页中
document.getElementById("xx").innerHTML=selectStr;
不知道这样说你明白不?
实现第三级,只需要在第二个下拉框里触发事件后,将id传递给服务器,在经过处理,将结果给第三级下拉框
Q2: 怎样使用pickerview来实现地址菜单的三级联动效果
现在很多的app,尤其是电商类的app在添加地址功能里面一般都会使用地址的三级联动,那么它是怎么实现的呢?其实很简单,现在简单的介绍一下使用第三方的依赖来实现三级联动的效果.
1.开始编写
1).在module的build.gradle文件中的dependencies节点里面添加这样一行代码引入依赖
[html] view plain copy
compile 'com.bigkoo:pickerview:2.0.8'
2).项目的目录结构
包括assets资产目录,三个类文件,分别是activity的代码逻辑类,省份的实体类以及获取省份信息json字符串的工具类.
3)实体类编写如下:
[java] view plain copy
public class AddressBean {
public String name;
public AddressBean(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPickerViewText() {
//这里是固定写法,依赖库会根据集合内容使用反射显示文本到省份栏的文本框中
return this.name;
}
@Override
public String toString() {
return "AddressBean{" +
"name='" + name + '\'' +
'}';
}
}
4).获取json字符串的工具类代码
[html] view plain copy
/**
* Created by yangtao on 2016/12/11.
* 从资产目录中获取json字符串
*/
public class JsonUtils {
public static String getJsonString(Context context,String name){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
AssetManager am = context.getAssets();
try {
InputStream inputStream = am.open(name);
byte[] buffer = new byte[1024];
int len =0;
while((len = inputStream.read(buffer)) != -1){
baos.write(buffer,0,len);
}
} catch (IOException e) {
e.printStackTrace();
}
return baos.toString();
}
}
5)MainActivity中的代码实现
[java] view plain copy
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import com.bigkoo.pickerview.OptionsPickerView;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private TextView tv_address;
private ArrayListAddressBean provinceList = new ArrayList();//创建存放省份实体类的集合
private ArrayListString cities ;//创建存放城市名称集合
private ArrayListListString citiesList= new ArrayList();//创建存放城市名称集合的集合
private ArrayListString areas ;//创建存放区县名称的集合
private ArrayListListString areasList ;//创建存放区县名称集合的集合
private ArrayListListListString areasListsList = new ArrayList();//创建存放区县集合的集合的集合
private OptionsPickerView mPvOptions;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv_address = (TextView) findViewById(R.id.tv_address);
//获取json字符串,用来解析以获取集合
String jsonString = JsonUtils.getJsonString(MainActivity.this,
"province_data.json");
//解析json字符串,向各级集合中添加元素
parseJson(jsonString);
mPvOptions = new OptionsPickerView(this);
//设置三级联动的效果
mPvOptions.setPicker(provinceList,citiesList,areasListsList,true);
//设置可以循环滚动,true表示这一栏可以循环,false表示不可以循环
mPvOptions.setCyclic(true,false,false);
//设置默认选中的位置
mPvOptions.setSelectOptions(0,0,0);
mPvOptions.setOnoptionsSelectListener(new OptionsPickerView.OnOptionsSelectListener() {
@Override
public void onOptionsSelect(int options1, int option2, int options3) {
//返回的分别是三个级别的选中位置
String city = provinceList.get(options1).getPickerViewText();
String address;
// 如果是直辖市或者特别行政区只设置市和区/县
if ("北京市".equals(city) || "上海市".equals(city) || "天津市".equals(city) || "重庆市".equals(city) || "澳门".equals(city) || "香港".equals(city)) {
address = provinceList.get(options1).getPickerViewText()
+ " " + areasListsList.get(options1).get(option2).get(options3);
} else {
address = provinceList.get(options1).getPickerViewText()
+ " " + citiesList.get(options1).get(option2)
+ " " + areasListsList.get(options1).get(option2).get(options3);
}
tv_address.setText(address);
Toast.makeText(MainActivity.this,"我被点击了",Toast.LENGTH_LONG).show();
}
});
//点击文本框的时候,显示地址选择框
tv_address.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mPvOptions.show();
}
});
}
//解析获得的json字符串,放在各个集合中
private void parseJson(String json){
try {
//得到一个数组类型的json对象
JSONArray jsonArray = new JSONArray(json);
for (int i = 0; i jsonArray.length(); i++) {//对数组进行遍历得到每一个jsonobject对象
JSONObject provinceObject = (JSONObject) jsonArray.get(i);
String provinceName = provinceObject.getString("name");//得到省份的名字
provinceList.add(new AddressBean(provinceName));//向集合里面添加元素
JSONArray cityArray = provinceObject.optJSONArray("city");
cities = new ArrayList();//创建存放城市名称集合
areasList = new ArrayList();//创建存放区县名称的集合的集合
for (int j = 0; j cityArray.length(); j++) {//遍历每个省份集合下的城市列表
JSONObject cityObject = (JSONObject) cityArray.get(j);
String cityName = cityObject.getString("name");
cities.add(cityName);//向集合里面添加元素
JSONArray areaArray = cityObject.optJSONArray("area");
areas = new ArrayList();//创建存放区县名称的集合
for (int k = 0; k areaArray.length(); k++) {
String areaName = areaArray.getString(k);
areas.add(areaName);
}
areasList.add(areas);
}
citiesList.add(cities);
areasListsList.add(areasList);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
Q3: 用Java连接mysql数据库编写省市区三级联动菜单选项JComboBox,在事件处理的时候出错
你应该考虑在所有事件联动响应时首先清空下拉,这样绑定的事件就不会影响了
Q4: 三级联动怎么回显 javaweb
以省java三级联动代码,市,城联动为例:
此小程序java三级联动代码的功能主要是采用异步请求方式从数据库中调取省市区信息显示到下拉列表:
代码如下:
建立数据库中java三级联动代码的代码和一些配置文件信息就省略java三级联动代码了,主要有JavaScript中的代码为:
$(document).ready(function(){
$.get("getProvince.do", function(result){
$("#showp").html(result);
});
})
var xmlhttp;
function mysend(str){
$(document).ready(function(){
$("#show2").html("");
})
var show = document.getElementByIdx_x_x_x_x_x_x_x_x_x("show");
show.innerHTML = "";
var province = document.getElementByIdx_x_x_x_x_x_x_x_x_x("province").value;
if(province!=0){
if(window.XMLHttpRequest){
xmlhttp = new XMLHttpRequest();
}else{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function(){
if(xmlhttp.readyState==4 xmlhttp.status==200){
show.innerHTML = xmlhttp.responseText;
}
}
var ss = encodeURIComponent(str);
xmlhttp.open("GET","getCity.do?provinceid="+ss,true);
xmlhttp.send(null);
}
}
function myarea(str){
if(window.XMLHttpRequest){
xmlhttp = new XMLHttpRequest();
}else{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function(){
if(xmlhttp.readyState==4 xmlhttp.status==200){
var show2 = document.getElementByIdx_x_x_x_x_x_x_x_x_x("show2");
show2.innerHTML = xmlhttp.responseText;
}
}
var ss = encodeURIComponent(str);
xmlhttp.open("GET","getArea.do?cityid="+ss,true);
xmlhttp.send(null);
}
html页面中的代码为:
所在地
action中的代码为:
package mobi.zhangsheng.jiejia.action;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import org.springframework.stereotype.Controller;
import mobi.zhangsheng.jiejia.domain.Areas;
import mobi.zhangsheng.jiejia.service.AgentsService;
import mobi.zhangsheng.jiejia.service.AreasService;
@Controller
public class ProvinceAction {
private int provinceid;
private int cityid;
@Resource
private AreasService as;
@Resource
private AgentsService ags;
public int getProvinceid() {
return provinceid;
}
public void setProvinceid(int provinceid) {
this.provinceid = provinceid;
}
public int getCityid() {
return cityid;
}
public void setCityid(int cityid) {
this.cityid = cityid;
}
public void getProvince(){
List provinceList = as.getAreasPrvinceList();
HttpServletResponse resp= ServletActionContext.getResponse();
HttpServletRequest request = ServletActionContext.getRequest();
//resp.setContentType("xml");
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
try {
PrintWriter out = resp.getWriter();
out.print("");
//out.print("shanghai");
} catch (IOException e) {
e.printStackTrace();
}
}
public void getCity(){
List cityList = as.getAreasCityList(provinceid);
HttpServletResponse resp= ServletActionContext.getResponse();
//resp.setContentType("xml");
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
try {
PrintWriter out = resp.getWriter();
out.print("");
//out.print("shanghai");
} catch (IOException e) {
e.printStackTrace();
}
}
public void getArea(){
List areaList = as.getAreasCityList(cityid);
if(areaList.size()==0){
}else{
HttpServletResponse resp= ServletActionContext.getResponse();
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
try {
PrintWriter out = resp.getWriter();
out.print("");
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Q5: 菜鸟求助,调用数据库实现三级联动问题js java?
后台能够打印出来,说明没有问题。问题应在前边的接收端。看代码返回的是json string,对于前端来说应该仅仅是个string,而不是JS对象。
记得JQuery,发送request的时候有参数,可以自动把返回的json string变成js的object的。
关于java三级联动代码和java实现三级联动的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。






