所以這就是我想要做的就是將絕對路徑放入 jtextfield,我做了系統列印,它顯示了路徑,但不會在 jtextfield 中設定文本。
向導類中的動作事件(按鈕):
//buttons
JButton openMapButton = new JButton("Load Map");
ImageLoader imgload = new ImageLoader();
openMapButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
imgload.fileChooser();
}
});
向導類中的 Jtextfield:
JTextField mapURLField = new JTextField(20);
ImageLoader 類:
public class ImageLoader extends Wizard{
private JLabel label;
JFileChooser chooser;
File file;
private BufferedImage img;
Wizard wiz = new Wizard();
JTextField mapURLField;
public void loadImg(){
}
public void fileChooser(){
wiz.mapURLField = new JTextField();
if(chooser == null){
chooser = new JFileChooser(".");
}
int returnVal = chooser.showOpenDialog(null);
if(returnVal == JFileChooser.APPROVE_OPTION){
wiz.mapURLField.setText(chooser.getSelectedFile().getAbsolutePath());
System.out.println(chooser.getSelectedFile().getAbsolutePath());
}else{
wiz.mapURLField.setText("");
}
chooser.setSelectedFile(null);
}
}
uj5u.com熱心網友回復:
您在錯誤的Wizard 物件中設定了錯誤的 JTextField 的狀態。應該更改的文本欄位是顯示在顯示的向導類中的文本欄位,而不是您在其他類中當場創建的 JTextField,該類位于新創建的非顯示向導類中,您也在 ImageLoader 中創建.
這個:
public class ImageLoader extends Wizard{
private JLabel label;
// ....
Wizard wiz = new Wizard();
JTextField mapURLField;
創建一個新的Wizard 物件,但它肯定不是當前正在顯示的 Wizard 物件,因此更改這個新創建且未顯示的物件的狀態對您沒有幫助。
相反,更改:
ImageLoader imgload = new ImageLoader();
到:
ImageLoader imgload = new ImageLoader(this);
如果不在 ActionListener 或其他匿名類中呼叫,則應將顯示的 Wizard 物件加載到 ImageLoader 類中。
在 ImageLoader 中做:
private Wizard wiz; // a field to hold the displayed Wizard
public ImageLoader(Wizard wiz) {
this.wiz = wiz; // set the field with the parameter passed in
....
}
然后在 ImageLoader 類中呼叫現在由 wiz 持有的 *true Wizard 物件的方法。
還有,擺脫
wiz.mapURLField = new JTextField();
創建一個新的JTextField毫無意義,它肯定不會顯示在原始的 Wizard 物件中。您想要更改顯示的 JTextField 的狀態。最好的方法是給 Wizard 一個允許你這樣做的公共方法:
// in the Wizard class:
public void setMapUrlField(String text) {
mapURLField.setText(text);
}
最后,ImageLoader 擴展了 Wizard 類:
public class ImageLoader extends Wizard {
可能沒有做你認為它在做的事情,也可能不是你想做的事情。
概念驗證代碼:
import java.io.File;
import javax.swing.*;
public class Wizard extends JPanel {
private ImageLoader imgload = new ImageLoader(this);
private JTextField mapURLField = new JTextField(30);
private JButton openMapButton = new JButton("Load Map");
private File file;
public Wizard() {
openMapButton.addActionListener(e -> {
file = imgload.fileChooser();
});
mapURLField.setFocusable(false);
add(mapURLField);
add(openMapButton);
}
public void setMapUrlField(String text) {
mapURLField.setText(text);
}
public File getFile() {
return file;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
Wizard wiz = new Wizard();
JFrame frame = new JFrame("Wizard");
frame.add(wiz);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
});
}
}
class ImageLoader {
private Wizard wiz;
public ImageLoader(Wizard wizard) {
this.wiz = wizard;
}
public File fileChooser() {
File file = null;
JFileChooser fileChooser = new JFileChooser();
int retValue = fileChooser.showOpenDialog(wiz);
if (retValue == JFileChooser.APPROVE_OPTION) {
file = fileChooser.getSelectedFile();
wiz.setMapUrlField(file.getAbsolutePath());
} else {
wiz.setMapUrlField("");
}
return file;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/359095.html