JavaRush /Java блог /Архив info.javarush /Нужна помощь с Jframe. Пишем первую маленькую прогу
DenisJNewb
11 уровень

Нужна помощь с Jframe. Пишем первую маленькую прогу

Статья из группы Архив info.javarush
Вот начал писать небольшую прогу для расчета бонусов. 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 прогеру. Ну и в целом может это всё создаётся как то по другому?
Комментарии (10)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
DenisJNewb Уровень 11
13 августа 2015
Спасибо за Ваши комментарии, буду копать в сторону
По таблицам посмотри официальный туториал «How to Use Tables». Вот JTable API.
хоть в английском не силен, но попробую.
AndreGold Уровень 28
12 августа 2015
все просто, методы get() и set() Вам в помощь.
Точно так же как, методом set() Вы устанавливаете какое-либо значение, так же методом get() вы это значение у любого компонента можете брать.
Например,
JLabel label = new JLabel("Метка 1");
String str = label.getText(); // "Метка 1"
blacky Уровень 23
12 августа 2015
Чтобы получить данные откуда-нибудь нужно иметь информацию об источнике, например, ссылку на объект.
У тебя же при обработке нажатия кнопки постоянно создается новая метка, а старые метки не удаляются из окна.
Ты можешь создать метку ранее, сделать её final, у тебя будет постоянная ссылка на объект, но при этом ты можешь менять текст этой метки.
По таблицам посмотри официальный туториал "How to Use Tables". Вот JTable API.