Java 将JFileChooser嵌入到另一个组件中
我的意图是将JFileChooser嵌入到其他组件中,例如,可以选择一个文件并单击“添加”按钮,以便将该文件添加到JList中(在运行时)。我以以下形式创建了一个示例GUI: 我无法在JFileChooser和JList之间创建链接。有人能帮忙吗 您还可以看到我尝试过的内容:Java 将JFileChooser嵌入到另一个组件中,java,jlist,jfilechooser,Java,Jlist,Jfilechooser,我的意图是将JFileChooser嵌入到其他组件中,例如,可以选择一个文件并单击“添加”按钮,以便将该文件添加到JList中(在运行时)。我以以下形式创建了一个示例GUI: 我无法在JFileChooser和JList之间创建链接。有人能帮忙吗 您还可以看到我尝试过的内容: public Converter() { setForeground(Color.BLACK); getContentPane().setLayout(null); textFi
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);
}
}
公共转换器(){
设置前景(颜色为黑色);
getContentPane().setLayout(null);
textField=新的JTextField();
textField.setBounds(20,12714,20);
getContentPane().add(文本字段);
textField.setColumns(10);
final JScrollPane scrollPane=新JScrollPane();
片名(“ABC”);
滚动窗格.立根(0470766,-438);
getContentPane().add(滚动窗格);
列表=新JList();
列表.立根背景(颜色:浅灰色);
列表。设置前景(颜色。灰色);
向量=新向量();
field=新的JTextField();
final JFileChooser fileChooser=新JFileChooser();
文件选择器.setBounds(10,43,485,463);
getContentPane().add(文件选择器);
列表=新JList(向量);
列表.立根背景(颜色:浅灰色);
JButton btnNewButton=新JButton(“添加”);
btnNewButton.setBounds(505106,89,23);
addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e){
添加();
}
私有void add(){
//TODO自动生成的方法存根
{
对于(文件:fileChooser.getSelectedFiles()){
field.setText(file.getAbsolutePath());
添加(文件);
System.out.println(“添加..!!”;
}
//list.updateUI();
}
}
});
getContentPane().add(btnNewButton);
JButton btnNewButton_1=新JButton(“删除”);
Btnewbutton_1.立根(505190,89,23);
btnNewButton_1.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e){
删除();
}
私有无效删除(){
if(list.getSelectedIndices().length>0){
int[]selecteddinces=list.getselecteddinces();
for(int i=selecteddinces.length-1;i>=0;i--){
向量移除元素(i);
System.out.println(“删除..!!”;
}
}
list.updateUI();
}
});
getContentPane().add(btnNewButton_1);
JButton btnNewButton_2=新JButton(“解码”);
Btnewbutton_2.立根(505278,89,23);
getContentPane().add(btnNewButton_2);
JList list_1=新JList();
列表1.设置前景(颜色为黑色);
列表1.立根背景(颜色:浅灰色);
列表1.立根(604、109、162、328);
getContentPane().add(列表1);
最终JFrame JFrame=新JFrame();
setFont(新字体(“Arial”,Font.BOLD,14));
Jframe.setForeground(颜色:白色);
Jframe.setTitle(“附加加载器信息”);
Jframe.getContentPane().setLayout(null);
}
静态类PreviewPane扩展JPanel实现PropertyChangeListener{
/**
*
*/
私有静态最终长serialVersionUID=1L;
私人标签;
私人int maxImgWidth;
公共预览页(){
setLayout(新边界布局(5,5));
setboorder(BorderFactory.createEmptyByOrder(5,5,5,5));
添加(新JLabel(“预览”)、BorderLayout.NORTH;
label=新的JLabel();
标签.背景(颜色.白色);
label.set不透明(true);
label.setPreferredSize(新尺寸(200200));
最大宽度=195;
label.setboorder(BorderFactory.createEtchedBorder());
添加(标签、边框布局、中心);
}
公共作废属性更改(属性更改事件evt){
图标=空;
如果(JFileChooser.SELECTED\u FILE\u CHANGED\u PROPERTY.equals)(evt
.getPropertyName()){
File newFile=(File)evt.getNewValue();
if(newFile!=null){
字符串路径=newFile.getAbsolutePath();
if(path.endsWith(“.gif”)| | path.endsWith(“.jpg”)
||path.endsWith(“.png”)| | path.endsWith(“.bmp”)){
试一试{
BuffereImage img=
ImageIO.read(新文件);
浮动宽度=img.getWidth();
浮动高度=img.getHeight();
浮动比例=高度/宽度;
宽度=最大宽度;
高度=(宽度*比例);
//高度应从新宽度开始缩放
}
捕获(IOE异常){
//无法读取图像。
}
}
}
label.setIcon(图标);
这个。重新绘制();
}
}
}
公共静态void main(字符串args[]){
//创建测试应用程序的实例
转换器框架=新转换器();
frame.pack();
frame.setVisible(true);
}
}
如果有人能帮我解决这个问题,那将非常有帮助。A是A,因此您可以将其添加到A,它将填充整个面板。您遇到的问题是,您为您创建的
ListModel
列表不支持更改。您需要创建一个DefaultListModel
,并使用它代替向量
例:
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);
}
});
}