Как в 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(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д