JAVA JPanel里怎么添加组件?

JAVA JPanel里怎么添加组件?,第1张

add(Component comp)

将指定组件追加到此容器的尾部。

add(Component comp, int index)

将指定组件添加到此容器的给定位置上。

add(Component comp, Object constraints)

将指定的组件添加到此容器的尾部。

add(Component comp, Object constraints, int index)

使用指定约束,将指定组件添加到此容器的指定索引所在的位置上。

1.选择文件路径输出

package com.dao

import java.awt.FlowLayout

import java.awt.event.ActionEvent

import java.awt.event.ActionListener

import javax.swing.JButton

import javax.swing.JFileChooser

import javax.swing.JFrame

public class Win {

static JFrame f = new JFrame()

static JButton jb = new JButton("上传")

public void Show() {

jb.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

JFileChooser jfc = new JFileChooser()

if(jfc.showOpenDialog(f)==JFileChooser.APPROVE_OPTION ){

//解释下这里,d出个对话框,可以选择要上传的文件,如果选择了,就把选择的文件的绝对路径打印出来,有了绝对路径,通过JTextField的settext就能设置进去了,那个我没写

System.out.println(jfc.getSelectedFile().getAbsolutePath())

}

}

})

//这下面的不用在意 一些设置

f.add(jb)

f.setLayout(new FlowLayout())

f.setSize(480, 320)

// f.setDefaultCloseOperation(EXIT_ON_CLOSE)

f.setLocationRelativeTo(null)

f.setVisible(true)

}

public static void main(String[] args) {

// TODO Auto-generated method stub

new Win().Show()

}

}

2.选择文件夹路径在控制台输出

package com.dao

import javax.*

import javax.swing.*

import java.awt.*

import java.awt.event.ActionEvent//添加鼠标事件必备引用

import java.awt.event.ActionListener//添加鼠标事件必备引用

public class Test {

// extends JPanel implements ActionListener

static JFrame frame = new JFrame("")

static JPanel p = new JPanel()

JButton jb = new JButton("上传")

JFileChooser chooser

String choosertitle

public static void main(String s[]) {

new Test().Show()

}

public void Show() {

jb.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

int result

chooser = new JFileChooser()

chooser.setCurrentDirectory(new java.io.File("."))

chooser.setDialogTitle(choosertitle)

System.out.println("---"+choosertitle)

chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY)

chooser.setAcceptAllFileFilterUsed(false)

if (chooser.showOpenDialog(p) == JFileChooser.APPROVE_OPTION) {

System.out.println("getCurrentDirectory(): "

+ chooser.getCurrentDirectory())

System.out.println("getSelectedFile() : "

+ chooser.getSelectedFile())

} else {

System.out.println("No Selection ")

}

}

})

// frame.addWindowListener(new WindowAdapter() {

// public void windowClosing(WindowEvent e) {

//System.exit(0)

// }

// })

p.add(jb)

frame.add(p, "Center")

frame.setSize(320, 240)

frame.setVisible(true)

}

}

3.网上找的一些资料说明文件,没事看看。

JFileChooser

其实JFileChooser基本使用方法还是很简单的,下面写两个示例看了就明白了,如果还要增加一些功能,我们还可以添加过滤器,只显示过滤后的文件。还可以再保存的时候,如果保存的是目录里已经存在的文件,那么对话框不会关闭,并且d出一个JOptionPane提示用户是否保存文件。

打开文件对话框:

import java.io.File

import javax.swing.JFileChooser

import javax.swing.filechooser.FileFilter

public class FileChooserTest {

public static void main(String [] args) {

//首先是创建JFileChooser 对象,里面带个参数,表示默认打开的目录,这里是默认打开当前文件所在的目录。

JFileChooser file = new JFileChooser (".")

//下面这句是去掉显示所有文件这个过滤器。

file.setAcceptAllFileFilterUsed(false)

//添加excel文件的过滤器

file.addChoosableFileFilter(new ExcelFileFilter("xls"))

//添加exe文件的过滤器

file.addChoosableFileFilter(new ExcelFileFilter("exe"))

int result = file.showOpenDialog(null)

String fileName = file.getName()

int index = fileName.lastIndexOf('.')

if (index >0 &&index <fileName.length() - 1)

{

String extension = fileName.substring(index + 1).toLowerCase()

if (extension.equals(ext))

return true

}

return false

}

public String getDescription() {

if (ext.equals("xls"))

{

return "Microsoft Excel文件(*.xls)"

}

if(ext.equals("exe"))

{

return "可执行文件(*.exe)"

}

return ""

}

}

}

打开选择文件的对话框就建立好了。但是上面的程序还有瑕疵。因为只有当用户点取消或关闭该窗口时才不会执行任何 *** 作。而如果用户在对话框里输入的文件在当前目录中不存在时,那么窗口依然会关闭,这时可能就需要在程序中再来做判断。那么可不可以在当用户输入错误的文件名后,窗口不会关闭,而是不执行任何 *** 作或者d出个对话框提示用户,可以看看大多数window程序中的选择对话框都是这么做的,其实要实现这个功能也不难, 只需要再重写一下JFileChooser类的approveSelection()方法就行了。

我们将上面的程序做下修改,首先还是需要创建一个继承于JFileChooser的类,这个类可以写成外部或者内部类,我们这里依然写为内部类,注意,如果需要在静态方法中调用它,则需要将它设置为静态的。

private static class MyChooser extends JFileChooser {

MyChooser(String path) {

super(path)

}

public void approveSelection() {

File file = new File(getSelectedFile().getPath())

if (file.exists())

super.approveSelection()

else

JOptionPane.showMessageDialog(null, "你选择的文件不存在,请重新选择!")

}

把上面这段代码添加进刚才的类里面,然后把

JFileChooser file = new JFileChooser (".")改成

JFileChooser file = new MyChooser (".")

好了,现在我们就可以在不关闭该对话框的情况下判断用户的输入是否错误了。还可以加入正则表达式,判断用户输入是否符合规定, *** 作方式按照这个框架来写就没问题了。这里不再赘述。下面是保存对话框!

保存对话框:

其实保存对话框和打开文件对话框在使用上没什么区别,他们都是使用同一个类JFileChooser,因为在swing当中打开和保存对话框不会做出任何对文件进行处理的功能,所有的这些功能需要我们自己去实现,而仅仅是提供了1个这样的窗口模型而已。因此这两种窗口其实只是将按钮的标签进行了替换而已 。创建他们唯一的区别就是打开是调用showOpenDialog()方法,保存则是调用showSaveDialog(),创建形式几乎一样。我们在使用他们的时候就需要分别对这两种窗口的返回后进行不同的处理,设置过滤器是一样的,因此过滤器我们就复用上面打开文件窗口的方法,但是在判断输入保存文件是否在当前目录下时,我们需要做出不一样的处理。当用户输入了与当前目录相同的文件名后,要d出对话框询问用户是否需要覆盖原文件,如果用户选择否,那么返回保存文件的对话框允许用户继续选择或者输入保存的文件名。

下面我只需要修改上面代码的两个地方就能够达到目的。首先将修改一下MyChooser这个类

private static class MyChooser extends JFileChooser {

MyChooser(String path) {

super(path)

}

public void approveSelection() {

File file = this.getSelectedFile()

if (file.exists())

{

int copy = JOptionPane.showConfirmDialog(null,

"是否要覆盖当前文件?", "保存", JOptionPane.YES_NO_OPTION,

JOptionPane.QUESTION_MESSAGE)

if (copy == JOptionPane.YES_OPTION)

super.approveSelection()

}

else

super.approveSelection()

}

}

再把上面的

int result = file.showOpenDialog(null)

改成

int result = file.showSaveDialog(null)

两个基本的选择文件对话框就创建完成了。

如果需要多选,那么要设置setMultiSelectionEnabled(true)

那么File file = this.getSelectedFile()这句我们就要改成

File [] files = this.getSelectedFiles()

files这个数组里面就存放的是选择多个文件File对象,然后我们只需要对这个数组进行 *** 作即可。

创建一个类ImagePanel继承JPanel

构造函数重写成要求一个参数(ImageIcon image)

然后对paintComponent进行Override。

附代码吧:

-------------------------------------ImagePanel.java-----------------------------------------------

import java.awt.Graphics

import java.awt.Dimension

import javax.swing.ImageIcon

import javax.swing.JPanel

public class ImagePanel extends JPanel{

private ImageIcon image = null

public ImagePanel( ImageIcon image ) {

this.image = image

this.setLayout(null)

}

protected void paintComponent( Graphics g ) {

setOpaque(true)

super.paintComponent(g)

Dimension dimension = getSize()

for ( int x = 0 x <dimension.width x+= image.getIconWidth() )

for ( int y = 0 y <dimension.height y+= image.getIconHeight())

g.drawImage(image.getImage(), x, y, null, null)

}

}

-----------------------------------------MainFrame.java---------------------------------------------

只给出部分代码

加载图片,参数是路径:ImageIcon image = new ImageIcon( 路径写在这里 )

再用这个图去实例化对象 mainPanel = new ImagePanel(image)

后面的 *** 作就和JPanel一样的。要加控件就是mainPanel.add(控件名)

----------------------------------------------------------------------------------------------------------

我也刚学,是个菜,希望回答对你有帮助。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11652802.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存