Как в JPanel -JTextField в работающем приложении поменять значение? - Java
Формулировка задачи:
Пишу программу, которая загружает в указанную папку по ссылке файлы.
есть интерфейс, на панели которого отображаются список загружаемых элементов (количество) и список уже загруженных (количество).
не могу в JPanel -JTextField в работающем приложении поменять значение.
В этом классе я создаю JPanel и все элементы на ней:
пытаюсь менять значения здесь:
Листинг программы
- public class MyFrame {
- private int width = 0;
- private int height = 0;
- private JFrame frame;
- private String urlString;
- private String inscription = "Input your URL";
- private JTextField textfield1;
- private JButton button;
- private String count = "0"; //список загружаемых елементов (количество)
- private String countLoaded = "0"; // список уже загруженных (количество)
- private static MyFrame start = new MyFrame();
- public String getCount() {
- return count;
- }
- public void setCount(String count) {
- this.count = count;
- }
- public String getCountLoaded() {
- return countLoaded;
- }
- public void setCountLoaded(String countLoaded) {
- this.countLoaded = countLoaded;
- }
- public int getWidth() {
- return width;
- }
- public int getHeight() {
- return height;
- }
- public void createDimension() {
- Toolkit kit = Toolkit.getDefaultToolkit();
- Dimension dim = kit.getScreenSize();
- width = dim.width / 4;
- height = dim.height / 6;
- }
- public void createFrame() {
- start.createDimension();
- frame = new JFrame("Download");
- frame.setSize(width, height);
- frame.setResizable(false);
- Image image = new ImageIcon("icon.gif").getImage();
- frame.setIconImage(image);
- start.createPanel1();
- start.createPanel2();
- frame.setLocationRelativeTo(null);
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- frame.setVisible(true);
- }
- public void createPanel1() {
- JPanel panel1 = new JPanel();
- textfield1 = new JTextField(inscription, 25);
- ImageIcon aboutIcon = new ImageIcon("greenhttps.png");
- JLabel label1 = new JLabel("URL", aboutIcon, textfield1.RIGHT);
- button = new JButton("start Download");
- button.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent arg0) {
- urlString = textfield1.getText().trim();
- startDownload();
- }
- });
- JDialog dialog = new JDialog();
- dialog.add(textfield1);
- textfield1.setToolTipText("<html><b><font color=red>"
- + "Please enter some text here" + "</font></b></html>");
- textfield1.addMouseListener(new MouseListener() {
- @Override
- public void mouseReleased(MouseEvent arg0) {
- // TODO Auto-generated method stub
- }
- @Override
- public void mousePressed(MouseEvent arg0) {
- // TODO Auto-generated method stub
- }
- @Override
- public void mouseExited(MouseEvent arg0) {
- if (textfield1.getText().trim().equals("")) {
- textfield1.setText(inscription);
- button.setEnabled(false);
- textfield1.setForeground(Color.DARK_GRAY);
- }
- }
- @Override
- public void mouseEntered(MouseEvent arg0) {
- if (textfield1.getText().trim().equals(inscription)) {
- textfield1.setText("");
- button.setEnabled(true);
- textfield1.setForeground(Color.GRAY);
- }
- }
- @Override
- public void mouseClicked(MouseEvent arg0) {
- // TODO Auto-generated method stub
- }
- });
- textfield1.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- urlString = textfield1.getText();
- urlString.trim();
- System.out.println(urlString);
- }
- });
- panel1.add(label1);
- panel1.add(textfield1);
- panel1.add(button, BorderLayout.AFTER_LAST_LINE);
- frame.getContentPane().add(panel1, BorderLayout.CENTER);
- }
- public void createPanel2() {
- JPanel panel2 = new JPanel();
- JTextField textfield2 = new JTextField(count, 5);
- JLabel label2 = new JLabel("downloads", textfield2.RIGHT);
- textfield2.setEnabled(false);
- textfield2.setHorizontalAlignment(JTextField.CENTER);
- JTextField textfield3 = new JTextField(countLoaded, 5);
- JLabel label3 = new JLabel("loaded", textfield3.RIGHT);
- textfield3.setEnabled(false);
- textfield3.setHorizontalAlignment(JTextField.CENTER);
- JTextField textfield4 = new JTextField(5);
- JLabel label4 = new JLabel("run", textfield4.RIGHT);
- textfield4.setEnabled(false);
- textfield4.setBackground(Color.RED);
- textfield4.setHorizontalAlignment(JTextField.CENTER);
- panel2.add(label2);
- panel2.add(textfield2);
- panel2.add(label3);
- panel2.add(textfield3);
- panel2.add(label4);
- panel2.add(textfield4);
- frame.getContentPane().add(panel2, BorderLayout.NORTH);
- }
- public void startDownload() {
- Logic startDownload = new Logic(urlString, start);
- startDownload.createDirectory();
- startDownload.createList();
- try {
- startDownload.writeList();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- startDownload.downloadSong();
- }
- public void paintComponent(Graphics g) {
- }
- public static void main(String[] args) {
- start.createFrame();
- }
Листинг программы
- private List<String> list;
- private File musicDirectory;
- private ArrayList<Future<String>> result = new ArrayList<Future<String>>();
- private MyFrame frame;
- private int countLoaded = 0;
- public DownloadSong(List<String> list, File musicDirectory, MyFrame frame) {
- this.list = list;
- this.musicDirectory = musicDirectory;
- this.frame = frame;
- }
- public ArrayList<Future<String>> getResult() {
- return result;
- }
- public void downloadSong() {
- ExecutorService service = Executors.newFixedThreadPool(4);
- for (int i = 0; i < list.size(); i++) {
- Future<String> action = service.submit(new MyThread(list.get(i),
- musicDirectory));
- if (action.isDone()) {
- countLoaded++;
- result.add(action);
- }
- }
- service.shutdown();
- try {
- boolean flag = service.awaitTermination(5, TimeUnit.MINUTES);
- if (flag) {
- System.out.println("End");
- }
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- frame.setCountLoaded(Integer.toString(countLoaded));
- }
- @Override
- public void run() {
- downloadSong();
- }
Разобрался сам. надо было просто воспользоваться методами JTextField - методы setText и append.
Решение задачи: «Как в JPanel -JTextField в работающем приложении поменять значение?»
textual
Листинг программы
- import javax.swing.*;
- import java.awt.*;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- /**
- * Created by the535 on 28.07.15.
- */
- public class Test extends JFrame {
- Test() {
- super("Test");
- JTextField field = new JTextField();
- JButton button = new JButton("Change");
- JPanel panel = new JPanel();
- panel.setLayout(new GridLayout(1,2));
- button.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- field.setText("fdas");
- }
- });
- panel.add(field);
- panel.add(button);
- add(panel);
- setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
- setVisible(true);
- pack();
- }
- public static void main(String[] args) {
- new Test();
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д