Как в 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();
}
}