gpt4 book ai didi

java - 将 JFileChooser 嵌入到另一个组件中

转载 作者:行者123 更新时间:2023-12-01 15:26:45 25 4
gpt4 key购买 nike

我的目的是将 JFileChooser 嵌入到其他组件中,例如,可以选择一个文件并单击“添加”按钮,以便该文件被添加到 JList(在运行时)中。我已经创建了这种形式的 GUI 示例:

GUI

我无法在 JFileChooser 和 JList 之间创建链接。有人可以帮忙吗?

您还可以查看我尝试过的内容:

        public Converter() {
setForeground(Color.BLACK);
getContentPane().setLayout(null);

textField = new JTextField();
textField.setBounds(20, 12, 714, 20);
getContentPane().add(textField);
textField.setColumns(10);

final JScrollPane scrollPane = new JScrollPane();
setTitle("ABC");
scrollPane.setBounds(0, 470, 766, -438);
getContentPane().add(scrollPane);

list = new JList();
list.setBackground(Color.LIGHT_GRAY);
list.setForeground(Color.GRAY);

vector = new Vector<File>();
field = new JTextField();

final JFileChooser fileChooser = new JFileChooser();
fileChooser.setBounds(10, 43, 485, 463);
getContentPane().add(fileChooser);


list = new JList(vector);
list.setBackground(Color.LIGHT_GRAY);

JButton btnNewButton = new JButton("ADD");
btnNewButton.setBounds(505, 106, 89, 23);
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
add();
}

private void add() {
// TODO Auto-generated method stub

{
for (File file : fileChooser.getSelectedFiles()) {
field.setText(file.getAbsolutePath());
vector.add(file);
System.out.println("Added..!!");
}
//list.updateUI();
}
}
});
getContentPane().add(btnNewButton);


JButton btnNewButton_1 = new JButton("REMOVE");
btnNewButton_1.setBounds(505, 190, 89, 23);
btnNewButton_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
remove();
}

private void remove() {
if(list.getSelectedIndices().length > 0) {
int[] selectedIndices = list.getSelectedIndices();
for (int i = selectedIndices.length-1; i >=0; i--) {
vector.removeElementAt(i);
System.out.println("Removed..!!");
}
}
list.updateUI();

}
});
getContentPane().add(btnNewButton_1);

JButton btnNewButton_2 = new JButton("DECODE");
btnNewButton_2.setBounds(505, 278, 89, 23);

getContentPane().add(btnNewButton_2);

JList list_1 = new JList();
list_1.setForeground(Color.BLACK);
list_1.setBackground(Color.LIGHT_GRAY);
list_1.setBounds(604, 109, 162, 328);
getContentPane().add(list_1);

final JFrame Jframe = new JFrame();
Jframe.setFont(new Font("Arial", Font.BOLD, 14));
Jframe.setForeground(Color.WHITE);
Jframe.setTitle("Additional Loader Information");
Jframe.getContentPane().setLayout(null);

}

static class PreviewPane extends JPanel implements PropertyChangeListener {
/**
*
*/
private static final long serialVersionUID = 1L;
private JLabel label;
private int maxImgWidth;
public PreviewPane() {
setLayout(new BorderLayout(5,5));
setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
add(new JLabel("Preview:"), BorderLayout.NORTH);
label = new JLabel();
label.setBackground(Color.WHITE);
label.setOpaque(true);
label.setPreferredSize(new Dimension(200, 200));
maxImgWidth = 195;
label.setBorder(BorderFactory.createEtchedBorder());
add(label, BorderLayout.CENTER);
}

public void propertyChange(PropertyChangeEvent evt) {
Icon icon = null;
if(JFileChooser.SELECTED_FILE_CHANGED_PROPERTY.equals(evt
.getPropertyName())) {
File newFile = (File) evt.getNewValue();
if(newFile != null) {
String path = newFile.getAbsolutePath();
if(path.endsWith(".gif") || path.endsWith(".jpg")
|| path.endsWith(".png") || path.endsWith(".bmp")) {
try {
BufferedImage img =
ImageIO.read(newFile);
float width = img.getWidth();
float height = img.getHeight();
float scale = height / width;
width = maxImgWidth;
height = (width * scale);
// height should be scaled from new width

}
catch(IOException e) {
// couldn't read image.
}
}
}

label.setIcon(icon);
this.repaint();

}
}

}

public static void main(String args[]) {
// Create an instance of the test application
Converter frame = new Converter();
frame.pack();
frame.setVisible(true);
}
}

如果有人能帮助我解决这个问题,那将非常有帮助。

最佳答案

您遇到的问题是您的 JList 为您创建的 ListModel 不支持更改。您需要创建一个 DefaultListModel 并使用它来代替 Vector

例如:

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
final DefaultListModel<String> model = new DefaultListModel<>();
JList<String> list = new JList<>(model);

JButton add = new JButton("Click Me!");
add.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
model.addElement(model.getSize() + "");
}
});

JPanel p = new JPanel();
p.add(new JScrollPane(list));
p.add(add);

JFrame frame = new JFrame("Example");
frame.setContentPane(p);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}

关于java - 将 JFileChooser 嵌入到另一个组件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10057312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com