В настоящее время я пытаюсь создать то, что, как мне казалось, будет простой программой на Java. Я хочу создать графический интерфейс, который предложит пользователю ввести день недели и выдаст список дел, которые ему нужно выполнить в этот день. Я также хотел поставить флажки рядом с делами, чтобы можно было отмечать то, что выполнено. Я могу заставить код нормально работать в окне консоли (очевидно, за исключением флажков), но я не знаю, как заставить мой код работать в созданном мной JFrame. Я знаю, что есть также способ добавлять метки, кнопки, текстовые поля и т. д. без фактического написания кода и простого вывода их на JFrame, но я не могу заставить свой фрейм появиться без запуска кода, поэтому его нельзя редактировать.
Вот где мой код находится до сих пор:
/**
* @author AMoore
* @date 4/4/24
* The purpose of this program is to prompt a user to enter a day of the week, give them the daily chores, and allow them to check them off.
*
*/
import java.util.Scanner;
import javax.swing.JFrame;
public class ChoreChartBuilder {
JFrame frame;
public ChoreChartBuilder() {
initComponenent();
}
public void initComponenent() {
frame = new JFrame("Daily Chore Chart");
frame.setSize(600,600);
frame.setVisible(true);
}
public static void main(String[] args) {
new ChoreChartBuilder();
Scanner input = new Scanner(System.in);
String mon = "Monday";
String tue = "Tuesday";
String wed = "Wednesday";
String thu = "Thursday";
String fri = "Friday";
String sat = "Saturday";
String sun = "Sunday";
System.out.println("");
System.out.println("Please enter the day of the week: ");
String day = input.nextLine();
input.close();
if (day.equalsIgnoreCase(mon)) {
System.out.println("Monday Chores: ");
}
else if (day.equalsIgnoreCase(tue)) {
System.out.println("Tuesday Chores: ");
}
else if (day.equalsIgnoreCase(wed)) {
System.out.println("Wednesday Chores: ");
}
else if (day.equalsIgnoreCase(thu)) {
System.out.println("Thursday Chores: ");
}
else if (day.equalsIgnoreCase(fri)) {
System.out.println("Friday Chores: ");
}
else if (day.equalsIgnoreCase(sat)) {
System.out.println("Saturday Chores: ");
}
else if (day.equalsIgnoreCase(sun)) {
System.out.println("Sunday Chores: ");
}
else {
System.out.println("A day of the week was not entered. Goodbye.");
}
}
}
Я не понимаю фразу «но я не могу заставить свой фрейм появиться без запуска кода, поэтому его нельзя редактировать». часть. Если вы хотите, чтобы ваш вывод отображался в графическом интерфейсе, вам нужно добавить JLabel/JTextArea/... в JFrame и добавить свой вывод в этот JLabels вместо вызова System.out.println.
Как сказал f1sh выше, вам нужно добавить компоненты в ваш JFrame, например frame.add(component); или frame.add(new JLabel("Label text"));. Отличным местом для изучения того, как это работает, является официальное руководство Java по созданию графического интерфейса здесь: docs.oracle.com/javase/tutorial/uiswing/index.html Вы быстро увидите, как это работает, и сможете добавить свои с легкостью создавать собственные компоненты.
Прошло некоторое время с тех пор, как я в последний раз использовал Eclipse, и я не знаю текущих предустановленных плагинов, но раньше вам нужно было установить что-то вроде этого eclipse.dev/windowbuilder для возможности перетаскивания опустить компоненты поворота. В любом случае, как утверждают другие пользователи, непонятно, о чем именно вы спрашиваете.
@RubioRic Да, конструктор окон заставил меня застрять! Я не хотел «вручную» кодировать каждую кнопку, функцию и т. д. Спасибо!
@sorifiend Спасибо! Это руководство по Java было действительно полезным!
@ f1sh Извините, мне было сложно объяснить, что я имел в виду, но Рубиорик и Сорифенд смогли понять, что я пытался сказать, лол, спасибо!




Вот полный компилируемый пример с использованием графического интерфейса Java.
import javax.swing.*;
import java.util.List;
import java.awt.BorderLayout;
public class DayChooser{
void buildGui(){
JFrame frame = new JFrame();
List<String> days = List.of("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" );
JComboBox<String> box = new JComboBox<>(days.toArray(new String[0]));
JList<String> chores = new JList<>(new DefaultListModel<>());
box.addActionListener( evt->{
DefaultListModel<String> model = (DefaultListModel<String>)chores.getModel();
model.clear();
model.addElement(box.getSelectedItem() + " chores");
model.addElement("refactor code");
model.addElement("write tests");
model.addElement("Do java swing tutorial");
});
//add some junk for layout purposes.
DefaultListModel<String> model = (DefaultListModel<String>)chores.getModel();
model.addElement("chores by day");
model.addElement("1.");
model.addElement("2.");
model.addElement("3.");
model.addElement("4.");
frame.add(box, BorderLayout.NORTH);
frame.add(chores, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
public static void main(String[] args){
DayChooser dc = new DayChooser();
SwingUtilities.invokeLater( dc::buildGui );
}
}
Поток вашей программы должен реагировать на события графического интерфейса. Например. В этом примере вы выбираете день, и он заполняет список. Вероятно, вы захотите создать класс, представляющий рутинную работу.
Или, может быть, JComboBox<DayOfWeek> box = new JComboBox<>(DayOfWeek.values());, что, естественно, интернационализируется.
Это не очень хороший вопрос SO, потому что он слишком расплывчатый. Вероятно, вам следует сосредоточиться на конкретной задаче. Что ты хочешь сделать в первую очередь? Например. Я хочу, чтобы появилось окно с кнопкой. Когда пользователь нажимает кнопку, открывается диалоговое окно для выбора данных.