Java 从Jcombo抓取所选数据

Java 从Jcombo抓取所选数据,java,swing,jcombobox,Java,Swing,Jcombobox,尝试将用户选择保存为字符串,以便在代码中进一步使用。但是我无法检索用户选择的数据。我不知道我做的是对是错,也不知道如何诚实地做,因为我觉得我做的好像是错的。代码在脚本底部附近被注释掉。而且是 //String stationS = (String)station.getSelectedItem(); 剩下的代码就是为了参考我如何创建jcombobox import javax.swing.*; import java.awt.Dialog.ModalityType; import java

尝试将用户选择保存为字符串,以便在代码中进一步使用。但是我无法检索用户选择的数据。我不知道我做的是对是错,也不知道如何诚实地做,因为我觉得我做的好像是错的。代码在脚本底部附近被注释掉。而且是

 //String stationS = (String)station.getSelectedItem();
剩下的代码就是为了参考我如何创建jcombobox

import javax.swing.*;

import java.awt.Dialog.ModalityType;
import java.awt.event.*;
import java.awt.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;

public class TouchOn extends JDialog {
private JPanel mainPanel;

public ArrayList Reader(String Txtfile) {
    try {

    ArrayList<String> Trains = new ArrayList<String>();
    int count = 0;
    String testing = "";
    File file = new File(Txtfile);
    FileReader fileReader = new FileReader(file);
    BufferedReader bufferedReader = new BufferedReader(fileReader);
    StringBuffer stringBuffer = new StringBuffer();
    String line;
    while ((line = bufferedReader.readLine()) != null) 
    {
        stringBuffer.append(line);
        count += count;
        if(!line.contains("*")){
            Trains.add(line + "\n");
        }
        stringBuffer.append("\n");



    }
    fileReader.close();
    //Arrays.asList(Trains).stream().forEach(s -> System.out.println(s));
    return Trains;
} catch (IOException e) {
    e.printStackTrace();
}
//return toString();
return null;




 }


public TouchOn()
{
    setPanels();

    setModalityType(ModalityType.APPLICATION_MODAL);
    setSize(400, 300);
    setVisible(true);
}
public void setPanels()
{
    mainPanel = new JPanel(new GridLayout(0, 2));
    JPanel containerPanel = new JPanel(new GridLayout(0, 1));
    JLabel startDay = new JLabel("Day:");
    JTextField sDay = new JTextField();

    JLabel startMonth = new JLabel("Month:");
    JTextField sMonth = new JTextField();

    JLabel startYear = new JLabel("Year:");
    JTextField sYear = new JTextField("2015");
    String trainline;
    String checked = "";

    JLabel touchOnTimehr = new JLabel("Time Hour: ");
    JLabel touchOnTimem = new JLabel("Time Minute:");
    JLabel station = new JLabel("Station: ");


    JTextField touchOnTimeFieldhour = new JTextField();
    JTextField touchOnTimeFieldminute = new JTextField();

    JPanel lowerPanel = new JPanel(new FlowLayout());
    ArrayList<String> stations = Reader("TrainLines.txt");
    JComboBox<String> cb = new JComboBox<>(stations.toArray(new String[stations.size()]));
    JRadioButton belgrave = new JRadioButton("Belgrave Line");      
    JRadioButton glenwaverly = new JRadioButton("Glen Waverly Line");
    ButtonGroup bG = new ButtonGroup();
    JButton apply = new JButton("Touch on");
    JButton cancel = new JButton("Cancel");
    cancel.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            dispose();
        }
    });
    apply.addActionListener(new ActionListener()
    {
        @SuppressWarnings("unused")
        public void actionPerformed(ActionEvent e)
        {

            String timestamp = new java.text.SimpleDateFormat("dd/MM/yyyy").format(new Date());
            String day = sDay.getText();
            String month = sMonth.getText();
            String year = sYear.getText();
            String trainline = "";
            String hour = touchOnTimeFieldhour.getText();
            String minute = touchOnTimeFieldminute.getText();
            if(belgrave.isSelected()){
                trainline = belgrave.getText();
            }
            if(glenwaverly.isSelected()){
                trainline = glenwaverly.getText();
            }


            //String stationS = (String)station.getSelectedItem();

            // The code above is the one that doesnt im not to sure how it works 
            System.out.println(trainline);
        }
    });



    cb.setVisible(true);
    bG.add(belgrave);
    bG.add(glenwaverly);
    mainPanel.add(startDay);
    mainPanel.add(sDay);
    mainPanel.add(startMonth);
    mainPanel.add(sMonth);
    mainPanel.add(startYear);
    mainPanel.add(sYear);
    mainPanel.add(touchOnTimehr);
    mainPanel.add(touchOnTimeFieldhour);
    mainPanel.add(touchOnTimem);
    mainPanel.add(touchOnTimeFieldminute);
    mainPanel.add(belgrave);
    mainPanel.add(glenwaverly);
    mainPanel.add(station);
    mainPanel.add(new JLabel());
    mainPanel.add(cb);
    lowerPanel.add(apply);
    lowerPanel.add(cancel);
    touchOnTimeFieldhour.setSize(10,10);
    containerPanel.add(mainPanel);
    containerPanel.add(lowerPanel);

    add(containerPanel);
}



  }
import javax.swing.*;
导入java.awt.Dialog.ModalityType;
导入java.awt.event.*;
导入java.awt.*;
导入java.io.BufferedReader;
导入java.io.File;
导入java.io.FileReader;
导入java.io.IOException;
导入java.util.ArrayList;
导入java.util.Date;
公共类TouchOn扩展JDialog{
私人JPanel主面板;
公共ArrayList读取器(字符串Txtfile){
试一试{
ArrayList列=新的ArrayList();
整数计数=0;
字符串测试=”;
文件文件=新文件(Txtfile);
FileReader FileReader=新的FileReader(文件);
BufferedReader BufferedReader=新的BufferedReader(文件阅读器);
StringBuffer StringBuffer=新的StringBuffer();
弦线;
而((line=bufferedReader.readLine())!=null)
{
stringBuffer.append(行);
计数+=计数;
如果(!line.contains(“*”){
添加(行+“\n”);
}
stringBuffer.append(“\n”);
}
fileReader.close();
//Arrays.asList(Trains.stream().forEach->System.out.println(s));
回程列车;
}捕获(IOE异常){
e、 printStackTrace();
}
//返回到字符串();
返回null;
}
公众接触()
{
设置面板();
setModalityType(ModalityType.APPLICATION_MODAL);
设置大小(400300);
setVisible(真);
}
公共事务委员会()
{
主面板=新JPanel(新网格布局(0,2));
JPanel containerPanel=新的JPanel(新的网格布局(0,1));
JLabel startDay=新JLabel(“日”);
JTextField sDay=新的JTextField();
JLabel startMonth=新的JLabel(“月份”);
JTextField sMonth=新的JTextField();
JLabel startYear=新JLabel(“年份”);
JTextField sYear=新JTextField(“2015”);
列车线;
勾选字符串=”;
JLabel touchOnTimehr=新JLabel(“时间小时:”);
JLabel touchOnTimem=新的JLabel(“时间分钟:”);
JLabel站=新JLabel(“站:”);
JTextField touchOnTimeFieldhour=新的JTextField();
JTextField touchOnTimeFieldminute=新的JTextField();
JPanel lowerPanel=新的JPanel(新的FlowLayout());
ArrayList stations=读卡器(“TrainLines.txt”);
JComboBox cb=newjcombobox(stations.toArray(新字符串[stations.size()]);
JRadioButton-belgrave=新JRadioButton(“贝尔格雷夫线”);
杰拉迪布顿-格伦韦弗利=新杰拉迪布顿(“格伦韦弗利线”);
ButtonGroup bG=新建ButtonGroup();
JButton apply=新JButton(“触控”);
JButton cancel=新JButton(“取消”);
cancel.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e){
处置();
}
});
apply.addActionListener(新ActionListener()
{
@抑制警告(“未使用”)
已执行的公共无效操作(操作事件e)
{
String timestamp=new java.text.simpleDataFormat(“dd/MM/yyyy”).format(new Date());
String day=sDay.getText();
字符串month=sMonth.getText();
字符串year=sYear.getText();
字符串trainline=“”;
字符串hour=touchOnTimeFieldhour.getText();
字符串minute=touchOnTimeFieldminute.getText();
if(belgrave.isSelected()){
trainline=belgrave.getText();
}
if(glenwaverly.isSelected()){
trainline=glenwaverly.getText();
}
//String stationS=(String)station.getSelectedItem();
//上面的代码不是我不确定它是如何工作的
系统输出打印LN(列车线);
}
});
cb.setVisible(真);
背景添加(贝尔格雷夫);
背景添加(格伦韦弗利);
主面板。添加(开始日期);
主面板。添加(星期四);
主面板。添加(开始每月);
主面板。添加(sMonth);
主面板。添加(startYear);
主面板。添加(sYear);
主面板。添加(touchOnTimehr);
主面板。添加(touchOnTimeFieldhour);
主面板。添加(touchOnTimem);
主面板。添加(touchOnTimeFieldminute);
主面板。添加(贝尔格雷夫);
主面板。添加(glenwaverly);
主面板。添加(站);
添加(新的JLabel());
主面板。添加(cb);
下面板添加(应用);
下面板添加(取消);
touchOnTimeFieldhour.setSize(10,10);
集装箱面板添加(主面板);
容器面板添加(下面板);
添加(集装箱面板);
}
}

问题是,您从内部类访问局部变量。您不应该将ActionListener添加到按钮,而应该在TouchOn中实现ActionListener并覆盖actionPerformed()


您可以使用对JRadioButtons的引用

是一个
JLabel
,而不是一个组合框。你可能打算改成cb,是的,我一直想改变它,而不仅仅是在ActionListeners中,因为这是我写作的一个坏习惯。但为了保持不变,我决定
String stationS=(String)cb.getSelectedItem()
现在我得到一个错误
java.awt.IllegalComponentStateException:必须在屏幕上显示组件才能确定它的位置
如果你按下一个向上箭头,你会非常感激如果我帮了你,伙计:)嘿,对不起,我昨晚在键盘上睡着了,完全忘记了
@override
public void actionPerformed(ActionEvent ex){
    Object source = ex.getSource();
    if (source == apply){
        //your code here
    }
    if (source == cancel){
        //your code here
    }
//your code here