Вот начал писать небольшую прогу для расчета бонусов.
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class Interface {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Interface();
}
});
}
Interface() {
//ОСНОВНОЕ ОКНО////////////////////////////////////////////////////
JFrame frame = new JFrame("Основное окно");
frame.setSize(240, 500);
frame.setResizable(false);
frame.setLocation(0/*(int) screenSize().getHeight() * 1/ 100*/, (int) screenSize().getWidth() * 25 / 100);
frame.setLayout(new BorderLayout());
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
//ПАНЕЛЬ
JPanel jpn = new JPanel();
JLabel lbl = new JLabel("Первая прога");
jpn.add(lbl);
//ПАНЕЛЬ 2
JPanel jpn2 = new JPanel();
JLabel lbl2 = new JLabel("Текущий бонус: ");
JButton btn = new JButton("0");
jpn2.add(lbl2);
jpn2.add(btn);
//ДОБАВЛЕНИЕ ПАНЕЛЕЙ
frame.add(jpn, BorderLayout.NORTH);
frame.add(jpn2, BorderLayout.CENTER);
//ОКНО БОНУСОВ//////////////////////////////////////////////////////
JFrame secondFrame = new JFrame("Окно бонусов");
secondFrame.setSize(250, 300);
secondFrame.setResizable(false);
secondFrame.setLocationRelativeTo(null);
secondFrame.setLayout(new BorderLayout());
secondFrame.setUndecorated(false);
//ПАНЕЛЬ 1
JPanel jppF1 = new JPanel(new GridLayout(3, 2, 3, 5));
//ПАНЕЛЬ 2
JPanel jppF2 = new JPanel(new GridLayout(5, 2));
JLabel lblpF3 = new JLabel("Тип объекта");
jppF2.add(lblpF3);
String[] getUnitNames = {"Тип1","Тип2","Тип3","Тип4","Тип5"};
JComboBox jcbpF = new JComboBox<>(getUnitNames);
jppF2.add(jcbpF);
JLabel lblpF4 = new JLabel("Количество");
jppF2.add(lblpF4);
JTextField tfpF = new JTextField(15);
jppF2.add(tfpF);
jppF2.add(new JLabel());
JButton btnpF = new JButton("Добавить");
jppF2.add(btnpF);
//ДОБАВЛЕНИЕ ПАНЕЛЕЙ
secondFrame.add(jppF1, BorderLayout.NORTH);
secondFrame.add(jppF2, BorderLayout.SOUTH);
///////////////К Н О П К И ////////////////////////////////////////////
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (!secondFrame.isVisible()) {
secondFrame.setVisible(true);
}
}
});
btnpF.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JLabel lblpF1 = new JLabel("");
if (lblpF1.getText().equals(jcbpF.getSelectedItem())) {
lblpF1.setText("asdasdas");
} else {
jppF1.add(lblpF1);
lblpF1.setText("" + jcbpF.getSelectedItem() + " (" + tfpF.getText() + ")");
new GroupLayout(jppF1);
jppF1.setLayout(new GridLayout(3, 2, 3, 5));
}
}
});
///////////////////////////////////////////////////////////////////////
}
private static Dimension screenSize() {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
return screenSize;
}
private static Integer typeCost(HashMap map, String z) {
int q = 0;
Iterator> qqe = map.entrySet().iterator();
while (qqe.hasNext()) {
Map.Entry para = qqe.next();
if (para.getKey().equals(z)) q = para.getValue();
}
return q;
}
}
Сейчас столкнулся с проблемой создания объектов во втором окне. Необходимо создать в верхней части объекты(можно метки, можно единую таблицу), данные из которых я смогу забирать. Сейчас при клике на кнопку "Добавить", мы создаём метку, и я не представляю как выдрать текст метки(например текст 2й метки, если после неё уже создал 3ю метку).
В идеале: создать таблицу. Взять число из второй строки второго столбца и записать его в название кнопки.
Прошу помочь начинающему java прогеру. Ну и в целом может это всё создаётся как то по другому?
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Например,
Если Вам нужно построить таблицу, то «копать» Вам нужно в направлении TableModel.
И еще, метод
Когда я создаю кнопкой новую метку, я не знаю как получить getText старой метки — вот мой вопрос.
Вообще я понял, что это лучше всего реализовать таблицей
Либо создай производный SecondFrame класс от JFrame, добавь в него геттеры/сеттеры, чтобы получать метки/таблицы и изменять их.
По Swing очень-очень много материалов на родном — смотри статьи Skipy, habr, можно посмотреть книги Портянкина, Шилдта и др.
Дело в том, что там буду только нужные метки. Когда число рядом с меткой будет равно 0, метка будет удалена(Пока не реализовано в коде выше). Поэтому в голову приходит только создание всех типов объектов (более 20)и, как написал выше AndreGold, играться с setVisible.
Сейчас я остановился на идее создать таблицу и её уже редактировать по ходу дела. Сижу, изучаю твои ссылки на них.
У тебя же при обработке нажатия кнопки постоянно создается новая метка, а старые метки не удаляются из окна.
Ты можешь создать метку ранее, сделать её final, у тебя будет постоянная ссылка на объект, но при этом ты можешь менять текст этой метки.
По таблицам посмотри официальный туториал "How to Use Tables". Вот JTable API.
Просто сделай чтобы работало, а потом будешь думать о красоте кода и быстродействии.