Как установить заголовок фрейма в java через Combobox? - PullRequest
0 голосов
/ 13 января 2019

Я хочу создать что-то похожее на изображение ниже, когда пользователь выбирает год, месяц и день из опций Combobox, эти действия изменят заголовок, и он должен меняться в соответствии с выбранными данными, это что-то простое Я все еще новичок

enter image description here

Пока я это сделал, проблема в том, что это не работает, как я могу это сделать? Не могли бы вы помочь мне, пожалуйста?

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;


public class DateForm_Complete extends JFrame {

    private JLabel          year, month, day;
    private JComboBox       cmonth, cday, cyear;

    public DateForm_Complete() {

        setTitle("Date Selection");
        setSize(400,100);
        setupWidgets();
        setVisible(true);
    }

    private void setupWidgets() {
        year=   new JLabel("Year");
        month=  new JLabel("Month");
        day=    new JLabel("Day");
        cyear=  new JComboBox();
        cmonth= new JComboBox();
        cday=   new JComboBox();

        setLayout(new GridLayout (2,3));

        add(year);   add(month);    add(day);
        add(cyear);  add(cmonth);   add(cday);

        for (int i=1900; i<2019; i++)   
        {
            cyear.addItem(i);
        }

        String months[] = {"January","February","March","April","May","June","July","August","September","October","November","December"};

        for (int i=0; i<12; i++)
        {
            cmonth.addItem(months[i]);
        }

        for (int i=1; i<32; i++)    
        {
            cday.addItem(i);
        }
        setupEvents();
    }

    private void setupEvents() {

        setDefaultCloseOperation(EXIT_ON_CLOSE);

        cyear.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent ev) {
                JComboBox combo = (JComboBox)ev.getSource();
                String texty = (String)combo.getSelectedItem(); 
            }
        });

        cmonth.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent ev) {
                JComboBox combo = (JComboBox)ev.getSource();
                String textm = (String)combo.getSelectedItem();
            }
        });

        cday.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent ev) {
                JComboBox combo = (JComboBox)ev.getSource();
                String textd = (String)combo.getSelectedItem();     
            }
        });
        setTitle("Today is "+ texd+ "of "+ textm + "of " +texty);               
    }   
    public static void main(String[] args) {

        new DateForm_Complete();        
    }
}

Ответы [ 2 ]

0 голосов
/ 13 января 2019

Я исправил несколько вещей в вашем коде, и теперь он работает. Попробуй и посмотри. Основные изменения:

В setTitle("Today is "+ texd+ "of "+ textm + "of " +texty); в вашем коде переменные textd, textm и texty находятся вне области видимости (это означает, что они объявлены внутри каждого actionPerformed() метода. Поэтому они недоступны / не видны вне этих actionPerformed() методы.). Поэтому я сделал их переменными экземпляра класса DateForm_Complete.

Затем я вызывал setTitle("Today is "+ textd+ " of "+ textm + " of " +texty); из каждого actionPerformed() метода. Потому что, я полагаю, вам необходимо обновить заголовок, как только будет изменено значение каждого поля со списком.

Была также опечатка в texd имени переменной.

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class DateForm_Complete extends JFrame {

  private JLabel          year, month, day;
  private JComboBox       cmonth, cday, cyear;

  private String texty = "1900";
  private String textm = "January";
  private String textd = "1";

  public DateForm_Complete() {

    setTitle("Date Selection");
    setSize(400,100);
    setupWidgets();
    setVisible(true);
  }

  private void setupWidgets() {
    year=   new JLabel("Year");
    month=  new JLabel("Month");
    day=    new JLabel("Day");
    cyear=  new JComboBox();
    cmonth= new JComboBox();
    cday=   new JComboBox();

    setLayout(new GridLayout (2,3));

    add(year);   add(month);    add(day);
    add(cyear);  add(cmonth);   add(cday);

    for (int i=1900; i<2019; i++)
    {
      cyear.addItem(i);
    }

    String months[] = {"January","February","March","April","May","June","July","August","September","October","November","December"};

    for (int i=0; i<12; i++)
    {
      cmonth.addItem(months[i]);
    }

    for (int i=1; i<32; i++)
    {
      cday.addItem(i);
    }
    setupEvents();
  }

  private void setupEvents() {

    setDefaultCloseOperation(EXIT_ON_CLOSE);

    cyear.addActionListener(new ActionListener() {

      @Override
      public void actionPerformed(ActionEvent ev) {
        JComboBox combo = (JComboBox)ev.getSource();
        texty = combo.getSelectedItem().toString();
        setTitle("Today is "+ textd+ " of "+ textm + " of " +texty);
      }
    });

    cmonth.addActionListener(new ActionListener() {

      @Override
      public void actionPerformed(ActionEvent ev) {
        JComboBox combo = (JComboBox)ev.getSource();
        textm = (String)combo.getSelectedItem();
        setTitle("Today is "+ textd+ " of "+ textm + " of " +texty);
      }
    });

    cday.addActionListener(new ActionListener() {

      @Override
      public void actionPerformed(ActionEvent ev) {
        JComboBox combo = (JComboBox)ev.getSource();
        textd = combo.getSelectedItem().toString();
        setTitle("Today is "+ textd+ " of "+ textm + " of " +texty);
      }
    });

  }
  public static void main(String[] args) {

    new DateForm_Complete();
  }
}
0 голосов
/ 13 января 2019

При выборе элемента в поле со списком необходимо сбросить всю строку, которую вы хотите отобразить в качестве заголовка.

Итак, вам нужен метод в вашем классе, например:

public void changeTitle()
{
    String year = cyear.getSeletedItem().toString();
    String month = cmonth.getSelectedItem().toString();
    String day = cday.getSelectedItem().toString();

    setTitle("Today is "+ day + "of "+ month + "of " + year);      
}

Затем из 3 ActionListeners вы просто вызываете метод changTitle().

...