如何设置JTextField的大小呢?

最近用swing做了一个界面,说真的,swing的布局,外观太不好调了。
请问谁能告诉我如下将下面的textfild的大小调成跟光标那么高的高度吗?
[img]http://dl.iteye.com/upload/attachment/248398/8cfbd67e-8461-3563-bff1-87a91db92255.jpg[/img]

6个回答

是性别单选按键组的问题,你性别单选按钮组是用的JPanel装的两个JRadioButton吧,把这个JPanel的Layout设为 new FlowLayout(FlowLayout.CENTER, 0, 0)就OK了,见下面代码:
[code="java"]
package org.zergle.test.swing;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.border.LineBorder;

public class ReaderAddIFrame extends JFrame {
private JLabel lblName = new JLabel("姓名");
private JTextField txtName = new JTextField();
private JLabel lblSex = new JLabel("性别");
private JRadioButton radMale = new JRadioButton("男");
private JRadioButton radFemale = new JRadioButton("女");
private JLabel lblAge = new JLabel("年齡");
private JTextField txtAge = new JTextField();
private JLabel lblCareer = new JLabel("职业");
private JTextField txtCareer = new JTextField();

private JPanel pnl1 = new JPanel();
private JPanel pnl1_1 = new JPanel(new GridLayout(2, 4));
private JPanel pnlSexGroup = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 0));

public ReaderAddIFrame() {
    this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    this.pnlSexGroup.add(this.radMale);
    this.pnlSexGroup.add(this.radFemale);
    this.pnl1_1.add(this.lblName);
    this.pnl1_1.add(this.txtName);
    this.pnl1_1.add(this.lblSex);
    this.pnl1_1.add(this.pnlSexGroup);
    this.pnl1_1.add(this.lblAge);
    this.pnl1_1.add(this.txtAge);
    this.pnl1_1.add(this.lblCareer);
    this.pnl1_1.add(this.txtCareer);
    this.pnl1.add(this.pnl1_1);
    this.add(this.pnl1, BorderLayout.CENTER);
    this.setSize(600, 400);
    this.setVisible(true);
}

public static void main(String[] args) {
    new ReaderAddIFrame();
}

}
[/code]

setSize(宽度,高度)

试试

如果父容器使用了布局管理器,则使用setPreferredSize(). 对于一些会调整组件大小的布局管理器(例如BorderLayout)来说,无法精确设置组件的大小.
如果父容器未使用布局管理器,使用setSize()方法.

你是用的BorderLayout 套的 GridLayout 的吧,这样会导致控件被拉伸,建议这样嵌套:

BorderLayout -> FlowLayout(ALIGN_CENTER) -> GridLayout

把代码粘出来看看

我是看了GridLayout的源码才知道这个问题:
[code="java"]
/**
* Determines the preferred size of the container argument using
* this grid layout.
*


* The preferred width of a grid layout is the largest preferred
* width of all of the components in the container times the number of
* columns, plus the horizontal padding times the number of columns
* minus one, plus the left and right insets of the target container.
*


* The preferred height of a grid layout is the largest preferred
* height of all of the components in the container times the number of
* rows, plus the vertical padding times the number of rows minus one,
* plus the top and bottom insets of the target container.
*
* @param parent the container in which to do the layout
* @return the preferred dimensions to lay out the
* subcomponents of the specified container
* @see java.awt.GridLayout#minimumLayoutSize
* @see java.awt.Container#getPreferredSize()
*/
public Dimension preferredLayoutSize(Container parent) {
synchronized (parent.getTreeLock()) {
Insets insets = parent.getInsets();
int ncomponents = parent.getComponentCount();
int nrows = rows;
int ncols = cols;

if (nrows > 0) {
    ncols = (ncomponents + nrows - 1) / nrows;
} else {
    nrows = (ncomponents + ncols - 1) / ncols;
}
int w = 0;
int h = 0;
for (int i = 0 ; i < ncomponents ; i++) {
    Component comp = parent.getComponent(i);
    Dimension d = comp.getPreferredSize();
    if (w < d.width) {
    w = d.width;
    }
    if (h < d.height) {
    h = d.height;
    }
}
return new Dimension(insets.left + insets.right + ncols*w + (ncols-1)*hgap, 
             insets.top + insets.bottom + nrows*h + (nrows-1)*vgap);
  }
}[/code]

在GridLayout中,每个Component的宽度是以最宽的那个组件为基准,高度是以最高的那个组件为基准。而FlowLayout默认有个vgap = 5, hgap = 5。这样就把面板撑大了。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java如何 设置文本框输出文字的大小

admin = new JTextField(); admin.setText("用户名"); admin.setFont(new Font("宋体", Font.PLAIN, 30)); 这样写为什么不对?一般怎么写?

如何初始化JTextField以及如何使用JTextField中的selectAll方法

先列出代码 import javax.swing.*; import java.awt.*; import java.awt.event.*; public class JTextFieldGui{ JTextField textField; JLabel labelInput; JLabel labelOutput; public static void main(String[] args) { JTextFieldGui gui = new JTextFieldGui(); gui.go(); } public void go(){ JFrame frame = new JFrame(); JPanel panelInput = new JPanel(); JPanel panelOutput = new JPanel(); labelInput = new JLabel("Your first name: "); labelOutput = new JLabel("Enter your name, and you will see it here."); textField = new JTextField(20);//<---问题1 JButton enter = new JButton("Enter"); JButton selectAll = new JButton("Select all text"); frame.setSize(300,200); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); panelInput.setLayout(new BoxLayout(panelInput, BoxLayout.X_AXIS)); textField.addActionListener(new LabelActionListener()); enter.addActionListener(new LabelActionListener()); selectAll.addActionListener(new TextFieldActionlistener()); frame.getContentPane().add(BorderLayout.NORTH, panelInput); panelInput.add(labelInput); panelInput.add(textField); panelInput.add(enter); panelInput.add(selectAll); frame.getContentPane().add(BorderLayout.CENTER, panelOutput); panelOutput.add(labelOutput); } class LabelActionListener implements ActionListener{ public void actionPerformed(ActionEvent event){ labelOutput.setText(textField.getText()); } } class TextFieldActionlistener implements ActionListener{ public void actionPerformed(ActionEvent event){ textField.selectAll();//<---问题2 } } } 问题1:已经定义了textfield的大小为20列,但是,结果还是会占满整行 问题2:创建并监听了一个按钮selectall,用于全选textfield中的字符,但是并没有反应,是什么原因呢 问题3:另外之前还有个莫名其妙的错误,现在又没有了,无法将类 JTextField中的构造器 JTextField应用到给定类型,下面还有几行,写的是,需要:没有参数,总之就是说JTextField(int)是错误的 求指教!!!

关于Swing中Box跟JPanel以及setSize的疑问

<p>最近我在学习中发现了一些问题,就是下面的程序,有两个问题: </p> <p>1.JTextField与JPasswordField的setSize方法是用来设置大小的么?为什么我在使用的时候却没有任何效果呢?</p> <p>2.为什么要把Box加入JPanel,然后再加入JFrame,才能得到我要的效果呢?而当我直接把Box加入JFrame时,界面却变得很奇怪,特别是JTextField跟JPasswordField会膨胀开来?</p> <p>程序如下:</p> <pre name="code" class="java">package test.swing; import java.awt.event.*; import javax.swing.*; public class LoginTest extends JFrame implements ActionListener { private JPanel jp=new JPanel(); private JPanel jp1=new JPanel(); private JPanel jp2=new JPanel(); private JPanel jp3=new JPanel(); JLabel name=new JLabel("请输入用户名"); JLabel password=new JLabel("请输入密码"); JLabel show=new JLabel(); JButton login=new JButton("登陆"); JButton reset=new JButton("重置"); JTextField jtf_name=new JTextField("",10); JPasswordField jpf_password=new JPasswordField("",10); private Box horibox1=Box.createHorizontalBox(); private Box horibox2=Box.createHorizontalBox(); private Box horibox3=Box.createHorizontalBox(); private Box verbox=Box.createVerticalBox(); public LoginTest(){ name.setSize(10, 10); password.setSize(10, 10); //jt_name.setSize(200, 1000); //setSize为什么不起作用呢? //jpf_password.setSize(200,1000); //setSize为什么不起作用呢? jpf_password.setEchoChar('*'); horibox1.add(name); horibox1.add(Box.createHorizontalStrut(20)); horibox1.add(jtf_name); horibox2.add(password); horibox2.add(Box.createHorizontalStrut(20)); horibox2.add(jpf_password); horibox3.add(login); horibox3.add(Box.createHorizontalStrut(40)); horibox3.add(reset); jp1.add(horibox1); jp2.add(horibox2); jp3.add(horibox3); verbox.add(jp1); verbox.add(jp2); verbox.add(jp3); // verbox.add(horibox1); //把上面六行换成这三行,为什么效果会变得很奇怪呢? // verbox.add(horibox2); //JPanel跟Box之间有什么样的区别? // verbox.add(horibox3); verbox.add(show); login.addActionListener(this); reset.addActionListener(this); this.add(verbox); this.setTitle("登陆窗口"); this.setVisible(true); this.setBounds(200, 200, 300, 300); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String []args){ new LoginTest(); } @Override public void actionPerformed(ActionEvent e) { if(e.getSource()==login){ jtf_name.setText("login"); jpf_password.setText("login"); }else if(e.getSource()==reset){ jtf_name.setText("reset"); jpf_password.setText("reset"); } } } </pre>   <p> </p>

BorderLayout使用setPreferredSize方法定义东部大小后内部组件不会改变大小。

我给每个区域都加了布局的,东部加了GridBagLayout,但是内部的组件还是不会自己改变大小。![图片说明](https://img-ask.csdn.net/upload/201710/21/1508519593_398535.png) 有对JAVA SWING比较熟悉的大神指教一下吗?

java设置TextField初始状态,提示语句

提示语句颜色是比较暗的灰的,当我们要输入的时候提示语句自动消失

编程:创建如下图形界面,具体参数等自行设置。

编程:创建如下图形界面,具体参数等自行设置。 ![图片说明](https://img-ask.csdn.net/upload/202006/04/1591247253_559357.jpg) 这题我代码写了一半但里面的关于面板啥的细节写不出来,还请帮帮忙帮我补一下代码谢谢 package t1; import java.awt.*; import javax.swing.*; public class Test6 { static JFrame frm=new JFrame("简易计算器"); public static void main(String[] args) {FlowLayout flow=new FlowLayout(FlowLayout.LEFT,5,10); JLabel lab1=new JLabel("Number1"); JLabel lab2=new JLabel("Number2"); JLabel lab3=new JLabel("RESULT"); frm.setLayout(flow); frm.setSize(260,150); frm.add(lab1); frm.add(new JTextField("",5)); frm.add(lab2); frm.add(new JTextField("",5)); frm.add(lab3); frm.add(new JTextField("",5)); frm.add(new JButton("Add"),BorderLayout.EAST); frm.add(new JButton("Subtract"),BorderLayout.CENTER); frm.add(new JButton("Multiply"),BorderLayout.CENTER); frm.add(new JButton("Divide"),BorderLayout.WEST); frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frm.setVisible(true); } }

GUI 怎么设置新建窗口的默认焦点

百度了半天 ,乱七八糟的 两个问题。求助 1)怎么让jtextfield自动获得光标, 2)我的JFrame中还有个JTextArea,怎么实现光标锁定在jtextfield上,即便点击JTextArea,也无法输入,光标还是在jtextfield。 如图,怎么实现该窗口已出现 光标就在 jtextfield上?? ![图片说明](https://img-ask.csdn.net/upload/201508/15/1439631558_866118.jpg)

关于JTable渲染器Renderer的问题,求高手解答!!!!

``` public class MyButtonRender implements TableCellRenderer { private JPanel panel; private JButton add,reduce; private JTextField numbertf; public MyButtonRender() { this.initAdd(); this.initReduce(); this.initNumbertf(); this.initPanel(); // 添加按钮 this.panel.add(this.add); this.panel.add(this.numbertf); this.panel.add(this.reduce); } private void initAdd() { this.add = new JButton("+"); // 设置按钮的大小及位置。 this.add.setBounds(0, 0, 41, 20); } private void initReduce(){ this.reduce = new JButton("-"); // 设置按钮的大小及位置。 this.reduce.setBounds(82, 0, 41, 20); } private void initNumbertf(){ this.numbertf=new JTextField(); this.numbertf.setBounds(42,0,30,20); } private void initPanel() { this.panel = new JPanel(); // panel使用绝对定位,这样button就不会充满整个单元格。 this.panel.setLayout(null); } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { return this.panel; } } ``` 这是我渲染器的代码,就是在一个单元格内添加两个按钮和一个文本框 ``` public class AllTableModel extends AbstractTableModel{ private static final long serialVersionUID = 1L; protected Vector content=null; private String[] title_name = { "编号", "名称", "型号","数量"}; public void addRow(String ID, String name,String model,JPanel number) { Vector v = new Vector(title_name.length); v.add(0,ID); v.add(1,name); v.add(2, model); v.add(3,number); content.add(v); } //需要子类自行提供addRow方法 public AllTableModel(){ content = new Vector(); } public AllTableModel(int count){ content = new Vector(count); } public void removeRow(int row) { content.remove(row); } public void removeRows(int row, int count) { for (int i = 0; i < count; i++) { if (content.size() > row) { content.remove(row); } } } public int getColumnCount() { String[] inherit=getTitlename(); return inherit.length; } public int getRowCount() { return content.size(); } public Object getValueAt(int row, int col) { return ((Vector) content.get(row)).get(col); } public String getColumnName(int col) { String[] inherit=getTitlename(); return inherit[col]; } public void setValueAt(Object value, int row, int col) { ((Vector) content.get(row)).remove(col); ((Vector) content.get(row)).add(col, value); this.fireTableCellUpdated(row, col); } public boolean isCellEditable(int rowIndex, int columnIndex) { if (columnIndex == 0) { return false; } return true; } //需要在子类中定义自己的getTitlename方法 public String[] getTitlename(){ return title_name; } } ``` 这是我的TableModel的代码 我想问为什么我用DefaultTableModel,然后用两个数组初始化,就可以显示出来渲染器的效果,但是要是用自己写的TableModel,然后调用addRow方法添加,表格中就什么也不显示,这是为什么?

Java的GroupLayout问题,设置组件的问题

代码显示没有错误,但是运行的时候老是在控制台显示错误,错误提示如下《:Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: javax.swing.JLabel[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=8388608,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,horizontalAlignment=LEADING,horizontalTextPosition=TRAILING,iconTextGap=4,labelFor=,text=账号登录名:,verticalAlignment=CENTER,verticalTextPosition=CENTER] is not attached to a vertical group》 当然这个是我认为比较有依据的一句话 ![图片说明](https://img-ask.csdn.net/upload/201605/05/1462456424_680897.png) 源代码如下: public class AddAccount extends JPanel{ /** * */ private static final long serialVersionUID = 1L; //public static AddAccount addAccount; JLabel lblId,lblLoginName,lblPassword,lblRealName,lblType;//设置地址,登录名,登录密码,真实姓名, JLabel lblIdMess,lblNameMess,lblPassMess,lblRealMess;// JTextField txtId,txtName,txtRealName; JPasswordField txtPassword; JComboBox cboType; JButton btnOk,btnReset; public AddAccount(){ initComponent(); } public void initComponent(){ this.setPreferredSize(new Dimension(600,0));//设置初始大小 lblId=new JLabel("账号编号:"); lblLoginName=new JLabel("账号登录名:"); lblPassword=new JLabel(" 登录密码 :"); lblRealName=new JLabel(" 真实姓名 :"); lblType=new JLabel(" 账号类型 :"); //设置JLabel txtId=new JTextField(); txtName=new JTextField(); txtRealName=new JTextField(); //设置JTextField()方法 txtPassword=new JPasswordField(); String [] items =new String[]{"管理员","业务员","操作员"};//创建账号类型 cboType = new JComboBox(items); btnOk=new JButton("确定"); btnReset=new JButton("重置"); lblIdMess=new JLabel("编号由系统生成,不用修改"); lblNameMess=new JLabel("账号长度在5到20位之间"); lblPassMess=new JLabel("密码长度必须在5到20位之间"); lblRealMess=new JLabel("姓名长度必须在1到20位之间"); //F/GroupLayout创建文本框的横竖位置 GroupLayout group=new GroupLayout(this); GroupLayout.SequentialGroup hgroup=group.createSequentialGroup(); hgroup.addGroup(group.createParallelGroup(Alignment.LEADING) .addComponent(lblId,GroupLayout.PREFERRED_SIZE,100,GroupLayout.PREFERRED_SIZE) .addComponent(lblLoginName,GroupLayout.PREFERRED_SIZE,100,GroupLayout.PREFERRED_SIZE)//登录账号 .addComponent(lblPassword)//登录密码 .addComponent(lblRealName)//真实姓名 .addComponent(lblType) ); hgroup.addGroup(group.createParallelGroup(Alignment.CENTER)// .addComponent(txtId,GroupLayout.PREFERRED_SIZE,100,GroupLayout.PREFERRED_SIZE) .addComponent(txtName) .addComponent(txtPassword) .addComponent(txtRealName) .addComponent(cboType) .addGroup(group.createParallelGroup()) .addComponent(btnOk) .addComponent(btnReset) ); hgroup.addGroup(group.createSequentialGroup() .addComponent(lblIdMess) .addComponent(lblNameMess) .addComponent(lblPassMess) .addComponent(lblRealMess)); // GroupLayout.SequentialGroup vgroup=group.createSequentialGroup(); vgroup.addGroup(group.createParallelGroup(Alignment.CENTER) .addComponent(lblId) .addComponent(txtId) .addComponent(lblIdMess) ); vgroup.addGroup(group.createParallelGroup(Alignment.CENTER) .addComponent(lblLoginName) .addComponent(txtName) .addComponent(lblNameMess) ); vgroup.addGroup(group.createParallelGroup(Alignment.CENTER) .addComponent(lblPassword) .addComponent(txtPassword) .addComponent(lblPassMess) ); vgroup.addGroup(group.createParallelGroup(Alignment.CENTER) .addComponent(lblRealName) .addComponent(txtRealName) // .addComponent(lblRealMess) ); vgroup.addGroup(group.createParallelGroup(Alignment.CENTER) .addComponent(lblType) .addComponent(cboType) ); vgroup.addGroup(group.createParallelGroup(Alignment.CENTER) .addComponent(btnOk) .addComponent(btnReset) ); group.setHorizontalGroup(hgroup); group.setVerticalGroup(hgroup); this.setLayout(group); }

求教,为什么我这窗体的图片显示不出来,窗体大小也不按参数变

。。我想让窗体上面显示一张类似网页里logo的图片。。下面是一个文本框和一个用来打开文件的按钮,那个actionPerformed函数是用来获取文件路径的,重点是那个窗体的大小我设置了400*400但实际大小没有变化,而那张放在北边的图片也显示不出来,请指教,代码如下: package ft; import java.awt.BorderLayout; import java.awt.FileDialog; import java.awt.FlowLayout; import java.awt.Graphics; import java.awt.Image; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; public class MyTest extends JFrame implements ActionListener{ JButton jbtn = null; JTextField jtf = null; JPanel bp1 = new JPanel(); JPanel bp2 = new JPanel(); public MyTest(){ this.setLayout(new FlowLayout()); jbtn = new JButton("打开.."); jbtn.addActionListener(this); jtf = new JTextField(30); ImageP p = new ImageP(); bp2.add(p); bp1.add(jtf); bp1.add(jbtn); this.add(bp1,BorderLayout.SOUTH); this.add(bp2,BorderLayout.NORTH); this.setSize(400,400); this.setVisible(true); this.pack(); } public void actionPerformed(ActionEvent e) { if(e.getSource().equals(jbtn)){ int response = 1; do{ FileDialog fd = new FileDialog(this); fd.setVisible(true); String a = fd.getDirectory()+fd.getFile(); System.out.println(a); this.setVisible(false); Object[] options = {"是,我要继续生成新XML","否,我想退出程序"}; response=JOptionPane.showOptionDialog(this, "XML已生成,是否继续生成新XML?", "亿阳报表自动化系统",JOptionPane.YES_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[0]); if(response == 1) { System.exit(0); } }while(response == 0); } } public static void main(String[] args){ new MyTest(); } } class ImageP extends JPanel{ JPanel bp2 = new JPanel(); private Image image; public ImageP(){ try{ image = ImageIO.read(new File("E:\\未命名2.JPG")); }catch(IOException e){ e.printStackTrace(); } if(image == null){ System.out.println("222"); }else{ System.out.println("333"); } } public void ImageP2(Graphics g){ super.printComponents(g); g.drawImage(image,0,0,null); } }

Java题,编写一个JFrame窗口.......救救猫咪.jpg

Java题:编写一个JFrame窗口,要求如下: 窗口包含一个JLabel标签,一个JTextField文本框和一个JButton按钮。界面采用BorderLayout布局管理方式,其中,JLabel放在BorderLayout.CENTER区域,JTextField和JButton放在一个JPanel中,将JPanel放在BorderLayout.SOUTH区域。在文本框中输入任意文字,点击“确定”按钮,输入的内容在JLabel标签中显示,且字体为“华文行楷”,加粗(Font.BOLD),字号为40,字体颜色为Color.RED。JFrame窗口的初始大小为(600,400),显示位置为(200,300),窗口标题为“文本输入

下面登录界面怎么设置背景图,不覆盖控件。

package com.view; import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.sql.ResultSet; import java.sql.SQLException; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JTextField; import com.db.SqlHelper; public class LoginView extends JFrame{ private JPanel centerJpanel; private JTextField userName; private JPasswordField password; private JPanel southJpanel; private JButton loginBtn; private JButton regiestBtn; public LoginView() { setTitle("登录"); buildUi(); setSize(400, 200); setLocationRelativeTo(null); setResizable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } /** * 初使化界面 */ public void buildUi(){ setLayout(new BorderLayout(20,20)); //实例化中间容器 centerJpanel = new JPanel(); //实例化用户名密码控件 userName = new JTextField(20); password = new JPasswordField(20); //添加用户名密码控件到 中间容器中 centerJpanel.add(userName); centerJpanel.add(password); //实列化欢迎字,并添加到根容器的北边 JLabel welcomeJL = new JLabel("欢迎使用xxx销售管理系统!"); welcomeJL.setHorizontalAlignment(JLabel.CENTER); add(welcomeJL,BorderLayout.NORTH); //添加中间容器到根容器的中间 add(centerJpanel,BorderLayout.CENTER); southJpanel = new JPanel(); regiestBtn = new JButton("注册"); regiestBtn.setSize(100, 60); southJpanel.add(regiestBtn); regiestBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { new RegiestView(); } }); loginBtn = new JButton("登录"); loginBtn.setSize(100, 60); southJpanel.add(loginBtn); loginBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try { doLogin(); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } }); add(southJpanel,BorderLayout.SOUTH); } private void doLogin() throws SQLException{ String username = userName.getText().trim(); String password = this.password.getText().trim(); String sql = "select * from EmployeeInfo " + "where eid=? and password=? and isAdmin=1"; SqlHelper sqlHelper = new SqlHelper(); ResultSet result = sqlHelper. query(sql, new String[]{username,password}); if (result.next()) { //登录成功 new SystemMainView(); dispose(); } } public static void main(String[] args) { new LoginView(); } }

有没有大神能指点一下哪里错了。。。。

package Frame; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.sql.*; import javax.swing.*; import db.DButil; public class login extends JFrame implements ActionListener{ private JPanel jp=new JPanel(); //创建标签数组 private JLabel[] jlArray={new JLabel("用户名"), new JLabel("密 码"),new JLabel("")}; private JButton jb1; private JButton jb2; private JButton jb3; private JTextField jtf=new JTextField(); private JPasswordField jpf=new JPasswordField(); //布局构造实现方法 public login(){ Icon icon1=new ImageIcon("login.jpg"); Icon icon2=new ImageIcon("reset.jpg"); Icon icon3=new ImageIcon("zhuce.jpg"); JPanel jp=new JPanel(){ protected void paintComponent(Graphics g) { ImageIcon icon = new ImageIcon("bg.jpg"); Image img = icon.getImage(); g.drawImage(img, 0, 0, icon.getIconWidth(), icon.getIconHeight(), icon.getImageObserver()); }}; jp.setLayout(null); jb1=new JButton(icon1); jb2=new JButton(icon3); jb3=new JButton(icon2); jlArray[0].setBounds(70,120,90,32); jb1.setBounds(365,110,130,60); jb2.setBounds(365,170,130,60); jlArray[1].setBounds(70,170,90,32); //将标签与按钮添加到JPanel容器中 jp.add(jlArray[0]); jp.add(jlArray[1]); jp.add(jb1); jp.add(jb2); jb1.addActionListener(this); jb2.addActionListener(this);//为按钮注册动作事件监听器 //添加修改密码的按钮 jb3.setBounds(365,230,130,60); jp.add(jb3); jp.add(jtf); jtf.setBounds(140,120,180,30);//设置文本框位置 jp.add(jpf); jpf.setBounds(140,170,180,30);//设置密码框位置 jpf.setEchoChar('*'); //密码显示字符形式 jpf.addActionListener(this); //为密码框注册动作事件监听器 this.setVisible(true);//设置窗体的可见性 jpf.addActionListener(this); //为密码框注册动作事件监听器 //设置用于显示登陆状态的标签大小位置,并将其添加进JPanel容器 jlArray[2].setBounds(70,220,300,30); jp.add(jlArray[2]); this.setTitle("登陆");//设置窗体标题 this.setBounds(450,200,500,318);//设置窗体的大小 this.setResizable(false);//设置窗体不让用户调整大小 this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); this.setVisible(true);//设置窗体的可见性 this.add(jp);//将窗体添加到面板中 jp.setBackground(Color.blue); } public static void main(String[] args) { new login();//创建登陆窗体 } public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub //得到用户名与密码 String user=jtf.getText().trim(); String pwd=String.valueOf(jpf.getPassword());//返回密码的字符串表示方式 String sql=""; if(e.getSource()==jtf){//事件源为文本框,切换焦点到密码框 jpf.requestFocus(); } else if(e.getSource()==jb1||e.getSource()==jpf){ //判断用户名和密码是否匹配 查询数据库 if(DButil.check(user, pwd)){ //登陆成功 MainFrame mf=new MainFrame(jtf.getText());//主窗体 this.dispose(); } else{ //登陆失败 jlArray[2].setText("对不起,非法的用户名和密码"); this.clear(); } } else if(e.getSource()==jb2) {//事件源为注册按钮 if(user.equals("")||pwd.equals("")) {//如果注册的用户名为空或者密码为空 jlArray[2].setText("用户名和密码都不得为空!!!"); this.clear();//清空输入文本框 } else { sql="select uid from user where uid='"+user+"'"; if(DButil.isExist(sql)) {//用户名已经存在 jlArray[2].setText("对不起,用户名已存在!!!"); this.clear();//清空输入文本框 } else { sql="insert into user values('"+user+"','"+pwd+"')"; if(DButil.update(sql)>0) {//注册成功 jlArray[2].setText("恭喜您!!!注册成功,请登陆"); } } } } else if(e.getSource()==jb3)//修改密码的监听 { //判断是否已经输入用户名和密码 if(user.equals("")||pwd.equals("")) { jlArray[2].setText("修改密码先输入正确的用户名和密码!!!"); this.clear();//清空输入文本框 } //判断是否输入了正确的用户名和密码 else if(DButil.check(user,pwd)) { //正确的用户名和密码 String password=JOptionPane.showInputDialog(this,"修改密码:","请输入新密码", JOptionPane.PLAIN_MESSAGE); //得到新的密码为空 if(password==null||password.equals("")) { JOptionPane.showMessageDialog(this,"密码不得为空!!!","错误", JOptionPane.WARNING_MESSAGE); } else {//密码不为空 sql="update user set pwd='"+password+"' where uid='"+user+"'";//更新密码的SQL if(DButil.update(sql)>0) {//密码修改成功 this.clear();//清空输入文本框 jlArray[2].setText("恭喜您!!!密码修改成功,请用新密码登陆"); } } } else { JOptionPane.showMessageDialog(this,"用户名或者密码错误!!!","错误", JOptionPane.WARNING_MESSAGE); this.clear();//清空输入文本框 } } } package Frame; import javax.swing.*; import javax.swing.table.DefaultTableModel; import db.DButil; import java.awt.*; import java.awt.event.*; import java.sql.*; import java.io.*; import java.util.*; public class MainFrame extends JFrame implements ActionListener,ItemListener { private String uname=null;//当前用户的名字 private boolean isInsert=false;//是否为添加默认为否 private JPanel topjp=new JPanel();//界面上半部分的JPanel容器 private JButton jba=new JButton("模糊查询"); private JButton jbs=new JButton("查找"); private JTextField jtfs=new JTextField();//按给出信息查找联系人信息 private JRadioButton jrbxm=new JRadioButton("按姓名查找",true); private JRadioButton jrbbh=new JRadioButton("按学号查找",false); private ButtonGroup bg=new ButtonGroup();//单选按钮组 private JPanel jpbr=new JPanel();//单选按钮面板 private JPanel jpyInfo=new JPanel();//右侧显示个人信息的面板 private JTextArea jta=new JTextArea(); // 模糊查询得到的信息文本区 private JLabel[] jlInfo={new JLabel("学号:"),new JLabel("姓名:"), new JLabel("性别:"),new JLabel("出生日期:"), new JLabel("电话号码:"),new JLabel("QQ:"), new JLabel("Email:"),new JLabel("地址:"), new JLabel("添加相片")}; private JButton[] jbInfo={new JButton("编辑"),new JButton("保存"), new JButton("浏览"), new JButton("上传"),}; private JLabel jlPhoto=new JLabel();//显示图像的JLabel控件 private JTextField[] jtfInfo=new JTextField[10]; private JTextField jtfPhoto=new JTextField();//添加照片到相册的路径 private JFileChooser jfcPic=new JFileChooser();//上传图像的文件选择器 private DefaultTableModel tableModel; private JTable table; //性别部分 private JRadioButton jrbMale=new JRadioButton("男",true); private JRadioButton jrbFemale=new JRadioButton("女"); private ButtonGroup bgGender=new ButtonGroup(); private JPanel jpGender=new JPanel();//单选按钮面板 private JLabel jlDetail=new JLabel();//右侧显示一幅图片的标签 private JSplitPane jspOuter=//上下分割的JSplitPane new JSplitPane(JSplitPane.VERTICAL_SPLIT,true); //系统托盘部分 private PopupMenu popup=new PopupMenu(); private SystemTray tray;//定义SystemTray成员变量 private TrayIcon trayIcon;//定义TrayIcon成员变量 private MenuItem exit=new MenuItem("退出程序");//定义菜单 public void initJps() {//界面上半部分的初始化 topjp.setLayout(null);//设置topjp布局管理器为null //设置按钮大小并添加到JPanel面板里 jba.setBounds(5,10,120,26); jba.addActionListener(this);//为模糊查询按钮注册事件监听器 topjp.add(jba); jbs.setBounds(130,10,80,26); jbs.addActionListener(this);//为查找按钮注册事件监听器 topjp.add(jbs);//添加按钮到topjp面板里 //设置jtfs文本框大小并添加到jps面板里 jtfs.setBounds(215,10,120,26); jtfs.addActionListener(this);//为文本框注册事件监听器 topjp.add(jtfs); //设置单选按钮大小和位置并添加到jpbr面板里同时添加到bg单选按钮组里 jrbxm.setBounds(5,3,50,26); jrbxm.addItemListener(this);//为单选按钮注册ItemEvent事件监听器 bg.add(jrbxm); jpbr.add(jrbxm); jrbbh.setBounds(60,3,50,26); jrbbh.addItemListener(this); bg.add(jrbbh); jpbr.add(jrbbh); jpbr.setBounds(360,10,200,26); topjp.add(jpbr); } public void initInfo() {//初始化信息界面 jpyInfo.setLayout(null);//设置布局管理器为空 jpyInfo.setBounds(50,50,380,360);//设置信息面板的大小和位置 jlPhoto.setBounds(220,10,150,170);//设置联系人图像JLabel的大小和位置 jlPhoto.setBorder(BorderFactory.createLineBorder(Color.BLACK));//将JLbel的边框线显现出来 jpyInfo.add(jlPhoto);//将显示联系人照片的JLabel添加到信息面板 tableModel=new DefaultTableModel(); Vector vector1 = new Vector(); DButil db = new DButil(); vector1.add("学号"); vector1.add("姓名"); vector1.add("性别"); vector1.add("出生日期"); vector1.add("电话号码"); vector1.add("QQ"); vector1.add("Email"); vector1.add("地址"); vector1.add("照片路径"); tableModel.setDataVector(null, vector1); System.out.print(123); table=new JTable(tableModel); //table.addMouseListener((MouseListener) this); table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); JScrollPane js=new JScrollPane(table); //添加相片部分的控件 jtfPhoto.setBounds(80,250,200,26);//设置得到照片路径的文本框的大小和位置 jpyInfo.add(jtfPhoto);//将得到照片路径的文本框添加到信息面板 jbInfo[2].setBounds(285,250,80,26); jbInfo[2].addActionListener(this);//为添加照片的浏览按钮注册事件监听器 jpyInfo.add(jbInfo[2]); //上传按钮 jbInfo[3].setBounds(380,250,80,26); jbInfo[3].addActionListener(this);//为添加照片的浏览按钮注册事件监听器 jpyInfo.add(jbInfo[3]); for(int i=0;i<9;i++)//添加JLabel,并设置大小和位置 { jlInfo[i].setBounds(20,10+i*30,60,26); jpyInfo.add(jlInfo[i]); } for(int i=0;i<10;i++) {//初始化一些文本框 jtfInfo[i]=new JTextField(); } //学号 jtfInfo[0].setBounds(80,10,135,26); jpyInfo.add(jtfInfo[0]); //姓名 jtfInfo[1].setBounds(80,40,135,26); jpyInfo.add(jtfInfo[1]); //出生日期 jtfInfo[3].setBounds(80,100,135,26); jpyInfo.add(jtfInfo[3]); //电话号码 jtfInfo[4].setBounds(80,130,135,26); jpyInfo.add(jtfInfo[4]); //QQ jtfInfo[5].setBounds(80,160,135,26); jpyInfo.add(jtfInfo[5]); //Email jtfInfo[6].setBounds(80,190,135,26); jpyInfo.add(jtfInfo[6]); //地址文本框的添加 jtfInfo[7].setBounds(80,220,285,26); jpyInfo.add(jtfInfo[7]); //模糊查询信息文本区的添加 js.setBounds(0,350,600,100); jpyInfo.add(js); //编辑、保存按钮 jbInfo[0].setBounds(160,300,80,26); jbInfo[0].addActionListener(this); jpyInfo.add(jbInfo[0]); jbInfo[1].setBounds(260,300,80,26); jbInfo[1].addActionListener(this); jpyInfo.add(jbInfo[1]); //性别部分 jrbMale.setBounds(5,3,50,26); jrbMale.addItemListener(this); //为单选按钮注册ItemEvent事件监听器 bgGender.add(jrbMale); jpGender.add(jrbMale); jrbFemale.setBounds(60,3,50,26); jrbFemale.addItemListener(this); //为单选按钮注册ItemEvent事件监听器 bgGender.add(jrbFemale); jpGender.add(jrbFemale); jpGender.setBounds(60,70,125,26); jpyInfo.add(jpGender); } public void clearInfo()//清空信息面板 { for(int i=0;i<10;i++) { jtfInfo[i].setText("");//清空文本框 } jlPhoto.setIcon(null);//清空图像 } public void setjtaArea(String information){ if(information.isEmpty()){ JOptionPane.showMessageDialog(this,"所查用户不存在!!!","错误", JOptionPane.WARNING_MESSAGE); } else { jta.setText(information); } } public void setInfo(Vector<String> pInfo)//将信息向量设置到信息面板中 {//将信息向量按规则填到信息面板里 this.clearInfo(); if(pInfo.size()==0) { JOptionPane.showMessageDialog(this,"所查用户不存在!!!","错误", JOptionPane.WARNING_MESSAGE); } else { for(int i=0;i<2;i++) {//显示联系人编号和姓名 jtfInfo[i].setText(pInfo.get(i)); } if(pInfo.get(2).equals("男")) {//显示性别 jrbMale.setSelected(true); } else {//显示性别 jrbFemale.setSelected(true); } for(int i=3;i<9;i++) {//显示出生日期、电话号码和QQ jtfInfo[i].setText(pInfo.get(i)); } } } public Vector<String> getInfo()//从信息面板得到用户输入的信息 { Vector<String> pInfo=new Vector<String>(); pInfo.add(jtfInfo[0].getText().trim());//添加pid pInfo.add(jtfInfo[1].getText().trim());//添加pname String gender=jrbMale.isSelected()?"男":"女"; pInfo.add(gender);//添加性别 pInfo.add(jtfInfo[3].getText().trim());//出生日期 pInfo.add(jtfInfo[4].getText().trim());//电话号码 pInfo.add(jtfInfo[5].getText().trim());//QQ pInfo.add(jtfInfo[6].getText().trim());//Email pInfo.add(jtfInfo[7].getText().trim());//地址 String photoPath=jtfPhoto.getText().trim();//得到照片路径 pInfo.add(photoPath);//照片路径 return pInfo; } public void monitorSaveButton() //监听保存按钮的方法 { String sql=""; String pid=jtfInfo[0].getText().trim();//得到联系人的编号 String pname=jtfInfo[1].getText().trim();//得到联系人的姓名 String gender=jrbMale.isSelected()?"男":"女"; String s1=jtfInfo[3].getText().trim(); String s2=jtfInfo[4].getText().trim(); String s3=jtfInfo[5].getText().trim(); String s4=jtfInfo[6].getText().trim(); String s5=jtfInfo[7].getText().trim(); String s6=jtfPhoto.getText().trim(); String sqla="select * from contacts where pid='"+pid+"'";//判断此编号是否存在的SQL String sqlb="select * from contacts where pname='"+pname+"'";//判断此姓名是否存在的SQL boolean isIdExist=DButil.isExist(sqla);//得到编号是否存在 boolean isNameExist=DButil.isExist(sqlb);//得到姓名是否存在 if(!(pid.equals(" ")||pname.equals(" "))) { if(isIdExist||isNameExist){ JOptionPane.showMessageDialog(this,"联系人已存在"+ " , 添加联系人失败","错误",JOptionPane.WARNING_MESSAGE); } else { sql="insert into contacts values (?,?,?,?,?,?,?,?,?,?)"; String[] paras={pid,pname,gender,s1,s2,s3,s4,s5,s6,null}; if(DButil.update(sql,paras)>0){ JOptionPane.showMessageDialog(this,"联系人保存成功","提示", JOptionPane.INFORMATION_MESSAGE); } } } } public void setEditable(boolean Editable)//设置信息窗口是否可编辑 { jrbFemale.setEnabled(Editable);//设置性别是否可编辑 jrbMale.setEnabled(Editable);//设置性别是否可编辑 for(int i=0;i<8;i++) { jtfInfo[i].setEditable(Editable);//设置文本框是否可编辑 } } public void monitorSearchButton()//监听查找按钮的方法 { String name=jtfs.getText().trim(); String sql="";//声明查找字符串 if(name.equals("")) { JOptionPane.showMessageDialog(this,"查找条件不能为空!!!", "错误", JOptionPane.WARNING_MESSAGE); } else { if(jrbxm.isSelected()==true) {//按姓名查找 sql="select pid,pname,pgender,pbirthday,pnumber,pQQ,pemail,padress,pphoto from contacts where pname='"+name+"'"; this.setInfo(DButil.getPerInfo(sql));//设置信息面板为该联系人的信息 } else {//按编号查找 sql="select pid,pname,pgender,pbirthday,pnumber,pQQ,pemail,padress,pphoto from contacts where pid='"+name+"'"; this.setInfo(DButil.getPerInfo(sql));//设置信息面板为该联系人的信息 } } this.setEditable(false);//设置面板不可编辑 } public void monitorRandomSearchButton(String information){ //监听模糊查询按钮 String adress=jba.getText().trim(); String sql="";//声明查找字符串 if(adress.equals("")) { JOptionPane.showMessageDialog(this,"查找条件不能为空!!!", "错误", JOptionPane.WARNING_MESSAGE); } else{ sql="select pid,pname,pgender,pbirthday,pnumber,pQQ,pemail,padress,pphoto from contacts where padress like '%天河区%'"; } } public MainFrame(String uname) { //主窗体构造器 this.uname=uname;//设置用户名 this.initJps();//界面上半部分的搭建 this.initInfo(); jspOuter.setDividerLocation(46);//设置分割窗体JSplitPane的位置 jspOuter.setTopComponent(topjp);//设置窗体上半部分的控件 jspOuter.setBottomComponent(jpyInfo);//设置下半部分的控件 //设置窗体关闭按钮执行的动作 this.add(jspOuter); this.addWindowListener( new WindowAdapter() { @SuppressWarnings("deprecation") public void WindowClosing(WindowEvent e) { //将窗体隐藏 MainFrame.this.hide(); } } ); //设置主窗体的图标、标题、大小以及可见性 this.setResizable(false);//设置窗体不让调整大小 this.setTitle(uname+"的通讯录"); this.setBounds(420,80,618,550); this.setVisible(true); } public void actionPerformed(ActionEvent e) { if(e.getSource()==jbInfo[1]) {//保存按钮的监听 this.monitorSaveButton(); } else if(e.getSource()==jba) {//模糊查询按钮的监听 DButil db = new DButil(); Vector vector1 = new Vector(); vector1.add("学号"); vector1.add("姓名"); vector1.add("性别"); vector1.add("出生日期"); vector1.add("电话号码"); vector1.add("QQ"); vector1.add("Email"); vector1.add("地址"); vector1.add("照片路径"); String ad = jtfs.getText().trim(); tableModel.setDataVector(db.getData(ad),vector1); } else if(e.getSource()==jbInfo[2]) {//打开图像文件路径 jfcPic.showOpenDialog(this); if(jfcPic.getSelectedFile()!=null) { jtfPhoto.setText(""+jfcPic.getSelectedFile()); } } else if(e.getSource()==jbInfo[0]) {//编辑按钮的监听 this.setEditable(true);//设置信息面板可编辑 } else if(e.getSource()==jbs||e.getSource()==jtfs) {//查找,按按钮或者在文本框里敲回车 this.monitorSearchButton(); } } public void itemStateChanged(ItemEvent e) { } public static void main(String[] args){ } } package db; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Statement; import java.util.Vector; public class DButil { private static String jdbcName="org.gjt.mm.mysql.Driver";//声明驱动类字符串 //声明数据库连接字符串 private static String dbUrl="jdbc:mysql://127.0.0.1:3306/maillist"; private static String dbUserName="root"; private static String dbPassword="admin"; private static Connection con=null;//声明数据库连接对象引用 private static Statement stat=null;//声明语句对象引用 private static PreparedStatement pstmt=null; private static ResultSet rs=null;//声明结果集对象引用 private static PreparedStatement psInsert=null;//声明预编译语句对象引用 public static Connection getConnection()//得到数据库连接的方法 { System.out.println("连接中.."); try { Class.forName(jdbcName);//加载驱动类 con=DriverManager.getConnection(dbUrl,dbUserName,dbPassword);//得到连接 System.out.println("成功连接"); } catch(Exception e){e.printStackTrace();} return con;//返回连接 } public static boolean check(String user,String pwd)//登陆验证 { boolean flag=false; try { con=DButil.getConnection();//得到数据库连接 stat=con.createStatement();//创建语句对象 rs=stat.executeQuery("select pwd from user where uid='"+user+"'"); rs.next(); String spwd=rs.getString(1);//得到密码 if(spwd.equals(pwd)) { flag=true;//密码匹配,登陆成功 } } catch(Exception e) { flag=false;//有任何异常发生,登陆失败 } finally{DButil.closeCon();}//关闭数据库连接 return flag; } //某条记录是否存在 public static boolean isExist(String sql) { boolean flag=false;//设置返回值 try { con=DButil.getConnection();//得到数据库连接 stat=con.createStatement();//创建语句对象 rs=stat.executeQuery(sql);//执行查询 if(rs.next()) { flag=true;//存在,设置返回值为true } } catch(Exception e) { e.printStackTrace(); flag=false;//发生任何异常,置返回结果为false } finally{DButil.closeCon();}//关闭数据库连接 return flag;//返回结果 } public static int update(String sql,String[] paras)//更新数据库 { int count=0;//声明返回值 try { con=DButil.getConnection(); pstmt=con.prepareStatement(sql); for(int i=0; i<paras.length;i++){ pstmt.setString(i+1, paras[i]); } count=pstmt.executeUpdate(); } catch(Exception e) { e.printStackTrace(); count=-1;//更新失败返回值为-1 } finally{DButil.closeCon();}//关闭数据库连接 return count;//返回结果 } public static int update(String sql)//更新数据库 { int count=0;//声明返回值 try { con=DButil.getConnection(); stat=con.createStatement(); count=stat.executeUpdate(sql);//执行更新 } catch(Exception e) { e.printStackTrace(); count=-1;//更新失败返回值为-1 } finally{DButil.closeCon();}//关闭数据库连接 return count;//返回结果 } //====================添加联系人================================= public static String insertPerson(String uid,Vector<String> pInfo) { String isPathNull="isNotNull";//传过来的图像是不是合法,默认不为空 try{ con=getConnection();//得到数据库连接 if(pInfo.get(8).equals("")||pInfo.get(8)==null) {//照片路径为空,则不插入图像 psInsert=con.prepareStatement("insert into contacts(pid,pname,pgender,pbirthday,pnumber,"+ "pQQ,pemail,padress,uid)"+ "values(?,?,?,?,?,?,?,?,?)"); } else {//照片路径不为空,则插入图像 psInsert=con.prepareStatement("insert into contacts(pid,pname,pgender,pbirthday,pnumber,"+ "pQQ,pemail,padress,pphoto,uid)"+ "values(?,?,?,?,?,?,?,?,?,?,?)" ); File f=new File(pInfo.get(8));//获取选取的图片文件 byte[] b=new byte[(int)f.length()];//创建存储图片数据的数组 FileInputStream fin=new FileInputStream(f); fin.read(b);fin.close();//读取文件存于byte数组中并关闭输入流 psInsert.setBytes(11,b);//设置pphoto参数的数据 } for(int i=0;i<8;i++) {//设置公共信息 psInsert.setString(i+1,pInfo.get(i)); } psInsert.setString(10,uid);//所属用户 psInsert.execute();psInsert.close();//执行更新并关闭语句 } catch(FileNotFoundException fnfe){isPathNull="isNull";}//图片路径不对 catch(Exception e){e.printStackTrace();} finally{DButil.closeCon();}//关闭数据库连接 return isPathNull; } public static String updatePerson(String uid,Vector<String> pInfo){ String isPathNull="isNotNull";//传过来的path是不是合法 try{ con=getConnection(); if(pInfo.get(9).equals("")||pInfo.get(9)==null) {//更新时候,如果照片路径为空,则不更新图像 psInsert=con.prepareStatement("update contacts set pname=?,pgender=?,birthday=?,pnumber=?,"+ "pQQ=?,pemail=?,padress=?,pphoto=?,uid=? where pid='"+pInfo.get(0).trim()+"'"); } else {//如果照片路径不为空,则更新图像 psInsert=con.prepareStatement("update contacts set pname=?,pgender=?,page=?,pnumber=?,"+ "pemail=?,pgroup=?,ppostalcode=?,padress=?,uid=?,pphoto=? where pid='"+pInfo.get(0).trim()+"'"); File f=new File(pInfo.get(9));//获取选取的图片文件 byte[] b=new byte[(int)f.length()];//创建存储图片数据的数组 FileInputStream fin=new FileInputStream(f); fin.read(b);fin.close();//读取文件存于byte数组中并关闭输入流 psInsert.setBytes(10,b); } for(int i=1;i<8;i++){//设置公共的信息部分 psInsert.setString(i,pInfo.get(i)); } psInsert.setString(9,uid);//所属用户 psInsert.execute();psInsert.close();//执行更新并关闭语句 } catch(FileNotFoundException fnfe){isPathNull="isNull";}//路径不合法 catch(Exception e){e.printStackTrace();} finally{DButil.closeCon();}//关闭连接 return isPathNull; } public Vector getData(String ad){ Vector vector=new Vector(); try { //陈述对象 con=getConnection();//得到数据库连接 stat=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);//创建语句对象 rs=stat.executeQuery("select * from contacts where padress LIKE '%"+ad+"%'"); ResultSetMetaData rm=rs.getMetaData(); //循环打印出数据库表中数据 int n=rm.getColumnCount(); while(rs.next()){ Vector ve=new Vector(); for(int i=1;i<n+1;i++){ String s=rs.getString(i); ve.add(s); } vector.add(ve);//Vector对象接收表中数据 } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{if(rs!=null){ try { rs.close();//关闭结果集 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(stat!=null){ try { stat.close();//关闭陈述对象 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(con!=null){ try { con.close();//关闭连接 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } return vector; } public static Vector<String> getPerInfo(String sql)//得到联系人信息 { Vector<String> pInfo=new Vector<String>(); try { con=getConnection();//得到数据库连接 stat=con.createStatement();//创建语句对象 rs=stat.executeQuery(sql);//执行查询 while(rs.next()) { for(int i=1;i<10;i++) { System.out.println(rs.getString(i)); pInfo.add(rs.getString(i));//将联系人信息添加到返回向量 } } } catch(Exception e) { e.printStackTrace(); } finally{DButil.closeCon();}//关闭数据库连接 return pInfo;//返回信息集合 } public static void closeCon()//关闭数据库连接的方法 { try { if(rs!=null){rs.close(); rs=null;}//如果结果集不为空关闭结果集并赋值null if(stat!=null){stat.close(); stat=null;}//如果语句对象不为空关闭语句对象并赋值null if(con!=null){con.close(); con=null;}//如果连接不为空关闭连接并赋值null } catch(Exception e){e.printStackTrace();} } public static void main(String[] args){ DButil DB=new DButil(); System.out.println(DB.getConnection()); } } }

Java中关于适配器对事件的处理问题??

import java.awt.Color; import java.awt.Font; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.border.LineBorder; public class Calculator extends JFrame{ private JTextField jf_1, jf_2; private JButton jb; private JPanel jp=new JPanel(null); private String str[] = {"MC","MR","MS","M+","M-","←","CE","C","±","√","7","8","9", "/","%","4","5","6","*","1/x","1","2","3","-","=","0",".","+"}; /** * 设置总体布局 */ public Calculator(){ super("计算器"); //this.setLayout(null); this.setSize(210, 330); //设置frame的宽和高 this.setResizable(false);//设置frame的大小无法改变 //JPanel jp=new JPanel(null);//等价于 JPanel jp=new JPanel(); jp.setLayout(null);可自行设计布局 //jp.setBounds(1000,100,20,24);//设置面板在frame的位置及自身大小 /**显示屏**/ jf_1 = new JTextField(""); jf_2 = new JTextField("0"); jf_1.setEnabled(false);//设置该组件不能再次被输入文本 jf_2.setEnabled(false); jf_1.setBounds(0, 0, 205, 30); jf_2.setBounds(0, 30, 205, 30); jf_1.setHorizontalAlignment(JLabel.RIGHT);//设置文本在组件中的显示位置 jf_2.setHorizontalAlignment(JLabel.RIGHT); /**按钮 35px*29px 28个***/ /**前24个**/ for(int i=0; i<24; i++) { jb = new JButton(str[i]); jb.setMargin(new java.awt.Insets(0,0,0,0)); //命令按钮里的文本距离图标上左下右距离 jb.setBounds(i%5*(35+5), 60+i/5*(30+5)+5, 35, 30);//设置命令按钮距离面板左,上距离。图标的长宽。 jb.addMouseListener(new MyMouseListener()); jp.add(jb); //两命令按钮间的垂直间隔为5,水平间隔为7 } jb = new JButton(str[24]); //添加"=" jb.setMargin(new java.awt.Insets(0, 0, 0, 0)); jb.setBounds((24%5)*(35+5), 60+24/5*(30+5)+5, 35, 30+30+5); jb.addMouseListener(new MyMouseListener()); jp.add(jb); jb = new JButton(str[25]); //添加"0" jb.setMargin(new java.awt.Insets(0, 0, 0, 0)); jb.setBounds((25%5)*(35+5), 60+25/5*(30+5)+5, 35+35+5, 30); jb.addMouseListener(new MyMouseListener()); jp.add(jb); // // jb = new JButton(str[26]); //添加"." // jb.setMargin(new java.awt.Insets(0, 0, 0, 0)); // jb.setBounds((27%5)*(35+5), 60+27/5*(30+5)+5, 35, 30); // jb.addMouseListener(new MyMouseListener()); // jp.add(jb); // // jb = new JButton(str[27]); //添加"+" // jb.setMargin(new java.awt.Insets(0, 0, 0, 0)); // jb.setBounds((28%5)*(35+5), 60+28/5*(30+5)+5, 35, 30); // jp.add(jb); // jp.add(jf_1); jp.add(jf_2); this.add(jp); this.setVisible(true); } /** * 内部类:事件处理 * @author * */ class MyMouseListener extends MouseAdapter{ public void mouseClicked(MouseEvent e){ JButton jbb = (JButton)e.getSource(); if(jbb.getText() == "="){ jf_2.setText("jk"); JButton j ; j = new JButton(str[26]); //添加"." j.setMargin(new java.awt.Insets(0, 0, 0, 0)); j.setBounds((27%5)*(35+5), 60+27/5*(30+5)+5, 35, 30); // j.addMouseListener(new MyMouseListener()); //Calculator.this.jp.add(j); Calculator.this.add(jp.add(j)); Calculator.this.setVisible(true); //点击“=”按钮后,“.”为什么不是添加在"0"的后面啊??? } } } public static void main(String arg[]){ new Calculator(); } }

java 编译出现找不到符号错误

//导入包 import javax.swing.JPanel; import javax.swing.JFrame; import javax.swing.JButton; import javax.swing.JTextArea; import javax.swing.JTextField; import static java.awt.BorderLayout.*; import javax.swing.JScrollPane; import java.awt.ScrollPane; import java.awt.*; import java.awt.Color.*; import javax.swing.BorderFactory; import java.awt.Label.*; import javax.swing.JSplitPane.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import javax.swing.JFileChooser.*; import javax.swing.JLabel.*; public class JieMian { //定义组件 JFrame jf = new JFrame("FTP文件传输软件"); JPanel jl=new JPanel(); JPanel jl1=new JPanel(); JPanel jl2=new JPanel(); JPanel jl3=new JPanel(); JPanel jl4=new JPanel(); JPanel jl5=new JPanel(); JPanel jl6=new JPanel(); JPanel jl7=new JPanel(); JPanel jl8=new JPanel(); JPanel jl9=new JPanel(); JPanel jl10=new JPanel(); JButton jb=new JButton("连接"); JButton jb1=new JButton("文件"); JButton jb2=new JButton("大小"); JButton jb3=new JButton("类型"); JButton jb4=new JButton("修改日期"); JButton jb5=new JButton("名称"); JButton jb6=new JButton("大小"); JButton jb7=new JButton("类型"); JButton jb8=new JButton("修改日期"); JButton jb9=new JButton("权限"); JButton jb10=new JButton("所属用户/组"); JTextField jtf=new JTextField(20); JTextField jtf1=new JTextField(10); JTextField jtf2=new JTextField(10); JTextField jtf3=new JTextField(5); JTextField jtf4=new JTextField(31); JTextField jtf5=new JTextField(31); JTextArea jta =new JTextArea(20,30); JScrollPane jsp=new JScrollPane(); public void init() { // 为按钮添加背景颜色 jb.setBackground(Color.GRAY); //设置jl面板的组建排列的方式 jl.setLayout(new BorderLayout(30,5)); //设置边框 jl1.setBorder(BorderFactory.createLoweredBevelBorder()); jl4.setBorder(BorderFactory.createRaisedBevelBorder()); jl3.setBorder(BorderFactory.createEtchedBorder()); jl3.setPreferredSize(new Dimension(400, 500)); jl4.setPreferredSize(new Dimension(400, 500)); jf.add(jl); jl.add(jl1,NORTH); jl.add(jl2,SOUTH); jl2.setLayout(new BorderLayout()); jl2.add(jl3,WEST); jl2.add(jl4,EAST); jl3.setLayout(new BorderLayout()); jl3.add(jl5,NORTH); jl5.setLayout(new FlowLayout()); jl5.add(new Label("本地")); jl5.add(jtf4); jl4.setLayout(new BorderLayout()); jl4.add(jl6,NORTH); jl6.setLayout(new FlowLayout()); jl6.add(new Label("远程")); jl6.add(jtf5); jl3.add(jl7,SOUTH); jl7.setBorder(BorderFactory.createRaisedBevelBorder()); jl7.setPreferredSize(new Dimension(400, 470)); jl7.setLayout(new BorderLayout()); jl7.add(jl8,NORTH); jl8.setLayout(new FlowLayout()); jl8.add(jb1); jl8.add(jb2); jl8.add(jb3); jl8.add(jb4); jb1.setBackground(Color.lightGray); jb2.setBackground(Color.lightGray); jb3.setBackground(Color.lightGray); jb4.setBackground(Color.lightGray); jb5.setBackground(Color.lightGray); jb6.setBackground(Color.lightGray); jb7.setBackground(Color.lightGray); jb8.setBackground(Color.lightGray); jb9.setBackground(Color.lightGray); jb10.setBackground(Color.lightGray); jb1.setPreferredSize(new Dimension(100, 25)); jb2.setPreferredSize(new Dimension(80, 25)); jb3.setPreferredSize(new Dimension(80, 25)); jb4.setPreferredSize(new Dimension(100, 25)); jb5.setPreferredSize(new Dimension(60, 25)); jb6.setPreferredSize(new Dimension(60, 25)); jb7.setPreferredSize(new Dimension(60, 25)); jb8.setPreferredSize(new Dimension(60, 25)); jb9.setPreferredSize(new Dimension(60, 25)); jb10.setPreferredSize(new Dimension(80, 25)); jl4.add(jl9,SOUTH); jl9.setPreferredSize(new Dimension(400, 470)); jl9.setLayout(new BorderLayout()); jl9.add(jl10,NORTH); jl9.add(jsp); jl9.setLayout(new FlowLayout()); jl10.add(jb5); jl10.add(jb6); jl10.add(jb7); jl10.add(jb8); jl10.add(jb9); jl10.add(jb10); jl1.setLayout(new FlowLayout()); //将组件添加到JL1面板上面 jl1.add(new Label("地址栏")); jl1.add(jtf); jl1.add(new Label("用户名")); jl1.add(jtf1); jl1.add(new Label("密码")); jl1.add(jtf2); jl1.add(new Label("端口")); jl1.add(jtf3); jl1.add(jb); jb1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JFileChooser jfc=new JFileChooser(); jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES ); jfc.showDialog(new JLabel(),"选择"); File file=jfc.getSelectedFile(); if(file.isDirectory()){ System.out.println("文件夹:"+file.getAbsolutePath()); }else if(file.isFile()){ System.out.println("文件:"+file.getAbsolutePath()); } System.out.println(jfc.getSelectedFile().getName()); } }); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.pack(); jf.setVisible(true); } public static void main(String[] args) { new JieMian().init(); } } ---------- 编译Java程序 ---------- JieMian.java:142: 错误: 找不到符号 JFileChooser jfc=new JFileChooser(); ^ 符号: 类 JFileChooser JieMian.java:142: 错误: 找不到符号 JFileChooser jfc=new JFileChooser(); ^ 符号: 类 JFileChooser JieMian.java:143: 错误: 找不到符号 jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES ); ^ 符号: 变量 JFileChooser JieMian.java:144: 错误: 找不到符号 jfc.showDialog(new JLabel(),"选择"); ^ 符号: 类 JLabel 4 个错误 输出完成 (耗时 0 秒) - 正常终止

关于swing布局问题--borderlayout+flowlayout自动撑高问题

就象2bizbox 查询列表区域(上面查询条件+分页条,下面是表格列表)那样,调整窗口大小时,那个查询条件的框会自动换行排列,并且这个查询区域的高度会自动撑高。 ![图片说明](https://img-ask.csdn.net/upload/201505/24/1432448411_859146.png) ![图片说明](https://img-ask.csdn.net/upload/201505/24/1432448442_226711.png) package com.more.mes.sysmain.action; import java.awt.BorderLayout; import java.awt.FlowLayout; import java.util.Vector; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.table.DefaultTableModel; public class TestLayout extends JFrame { /** * */ private static final long serialVersionUID = -7038258315579184604L; private JPanel jp1;// 总panel(用borderlayout) private JPanel jp2;// (放在north)查询条件区域panel(flowlayout) private JPanel jp3;// (放在center)记录集显示表格区域panel(borderlayout) public TestLayout() { this.setSize(600, 400); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jp1 = new JPanel(new BorderLayout()); jp2 = new JPanel(new FlowLayout()); jp3 = new JPanel(new BorderLayout()); this.getContentPane().add(jp1); jp1.add(jp2, java.awt.BorderLayout.NORTH); jp1.add(jp3, java.awt.BorderLayout.CENTER); JLabel jlab1 = new JLabel("物料名称1"); JLabel jlab2 = new JLabel("物料名称2"); JLabel jlab3 = new JLabel("物料名称3"); JLabel jlab4 = new JLabel("物料名称4"); JLabel jlab5 = new JLabel("物料名称5"); JLabel jlab6 = new JLabel("物料名称6"); JTextField jtext1 = new JTextField("测试文本框1"); JTextField jtext2 = new JTextField("测试文本框2"); JTextField jtext3 = new JTextField("测试文本框3"); JTextField jtext4 = new JTextField("测试文本框4"); JTextField jtext5 = new JTextField("测试文本框5"); JTextField jtext6 = new JTextField("测试文本框6"); jp2.add(jlab1); jp2.add(jtext1); jp2.add(jlab2); jp2.add(jtext2); jp2.add(jlab3); jp2.add(jtext3); jp2.add(jlab4); jp2.add(jtext4); jp2.add(jlab5); jp2.add(jtext5); jp2.add(jlab6); jp2.add(jtext6); JTable jtable = new JTable(); jtable.setModel(new javax.swing.table.DefaultTableModel(new Object[][] { { null, null, null, null, null }, { null, null, null, null, null }, { null, null, null, null, null }, { null, null, null, null, null } }, new String[] { "Title 1", "Title 2", "Title 3", "Title 4", "Title 5" })); JScrollPane jsp = new JScrollPane(); jsp.getViewport().add(jtable, null); jp3.add(jsp, BorderLayout.CENTER); jp1.updateUI(); } public static void main(String[] args) { new TestLayout(); } } ``` ```

为啥这个改字体没用,检查不出来Java简单GUI

这是一个实现改变文本字体样式的简单编辑器,用Java实现的简单GUI 改变字体的颜色没有问题,但是改变样式没有作用 检查了参数确实都正确,不知道问题在哪 求大神帮忙挑出来,感激不及 ____________________________________________________________ ``` import java.awt.*; import java.awt.event.*; import java.awt.font.*; import javax.swing.*; public class ArtFont extends JFrame implements ActionListener{ JComboBox fontType; JComboBox fontSize; JCheckBox boldBx;//粗体按钮 JCheckBox italicBx;//斜体按钮 JButton colorBtn; //颜色按钮 String[] fontNames;//字体名称 String[] fontSizes;//字体尺寸 JLabel label;//输入提示标签 JTextField inputText;//文字输入框 JTextArea txtArea;//文字显示区 JPanel fontPanel;//字体设置 JPanel showPanel;//显示效果区 Font font; int boldStyle,italicStyle,underlineStyle; int fontSizeStyle; String fontNameStyle; Color colorStyle = Color.black;//设置字体的默认颜色为黑色; public ArtFont(){ super("字体设置"); //设置默认字体 boldStyle = 0; italicStyle = 0; underlineStyle = 0; fontSizeStyle = 10; fontNameStyle = "宋体"; fontPanel = new JPanel(); fontPanel.setLayout(new FlowLayout()); GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); fontNames = ge.getAvailableFontFamilyNames();//获得系统中所有字体的名字 font = new Font(fontNameStyle,boldStyle+italicStyle,fontSizeStyle); fontType = new JComboBox(fontNames); fontType.setEditable(false); fontType.setMaximumRowCount(10); fontType.addItemListener(new ItemListener(){ public void itemStateChanged(ItemEvent e){ fontNameStyle = fontType.getSelectedItem().toString(); //txtArea.getText().setFont(new Font((String)fontType.getSelectedItem(),Font.PLAIN,10));//实现监听字体名字改变的事件 } }); //设置字体大小 fontSizes = new String[63]; for(int i=0;i<63;i++){ fontSizes[i] = Integer.toString((i+10)); } fontSize = new JComboBox(fontSizes); fontSize.setEditable(false); fontSize.setMaximumRowCount(10); fontSize.addItemListener(new ItemListener(){ public void itemStateChanged(ItemEvent e){ fontSizeStyle = Integer.parseInt(fontSize.getSelectedItem().toString()); //txtArea.getText().setFont(new Font("宋体",Font.PLAIN,(int)fontSize.getSelectedItem()));//实现监听字体大小改变的方法 } }); //设置粗体选择按钮; boldBx = new JCheckBox("粗体"); boldBx.addItemListener(new ItemListener(){ public void itemStateChanged(ItemEvent e){ boldStyle = 1; //txtArea.getText().setFont(new Font("宋体",Font.BOLD,10));//实现监听选择粗体状态改变的方法 } }); //实现斜体选择按钮 italicBx = new JCheckBox("斜体"); italicBx.addItemListener(new ItemListener(){ public void itemStateChanged(ItemEvent e){ italicStyle = 1; //txtArea.getText().setFont(new Font("宋体",Font.ITALIC,10));//实现监听选择斜体状态改变的方法 } }); //实现颜色选择 colorBtn = new JButton("颜色"); colorBtn.addActionListener(this); //设置字体面板 fontPanel.add(fontType); fontPanel.add(fontSize); fontPanel.add(boldBx); fontPanel.add(italicBx); fontPanel.add(colorBtn); //设置输入提示标签 label = new JLabel("输入"); //设置文本输入框 inputText = new JTextField(30); inputText.addActionListener(this); //设置文本显示区 txtArea = new JTextArea(10,80); txtArea.setFont(font); //设置文本面板 showPanel = new JPanel(); showPanel.add(label); showPanel.add(inputText); showPanel.setLayout(new FlowLayout()); showPanel.add(new JScrollPane(txtArea)); //设置容器 Container container = getContentPane(); container.setLayout(new BorderLayout()); container.add(fontPanel,BorderLayout.NORTH); container.add(showPanel,BorderLayout.CENTER); setSize(500,300); setVisible(true); } public void actionPerformed(ActionEvent e){ if(e.getSource() == colorBtn){//改变颜色 colorStyle = JColorChooser.showDialog(this,"选择字体颜色",colorStyle); colorBtn.setForeground(colorStyle); txtArea.setForeground(colorStyle); } else if(e.getSource()==inputText){//将输入的文字在文字显示区表示 txtArea.setText(inputText.getText()); } } public static void main(String[] args){ ArtFont artFont = new ArtFont(); artFont.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } ```

Java如何设计画圆程序,要求在画圆区域画圆,并能设置圆的颜色及是否填充圆的内部。

求助大神!Java设计画圆程序,要求在画圆区域画圆,并能设置圆的颜色及是否填充圆的内部。我已经写了一部分了,现在可以画实心圆,但是设置颜色和是否填充一直想不出来要怎么弄,请问有人可以指点一下吗? ``` import java.awt.*; import javax.swing.*; public class C extends JFrame implements ActionListener{ PrintPanel PP; //创建画圆面板 JLabel lb1; JTextField TF; JButton button; public JRadioButton []rb1; public C() { JFrame test = new JFrame("画圆程序"); //创建框架 JPanel MyPanel1 = new JPanel(); //创建第一个面板,装有关颜色选择的组件 JPanel MyPanel2 = new JPanel(); //创建第二个面板,装是否填充有关的组件 JPanel MyPanel3 = new JPanel(); //创建第三个面板,装半径有关的组件 JPanel MyPanel4 = new JPanel(); //创建第四个面板,装画圆按钮等组件 PP = new PrintPanel(0); JPanel Right = new JPanel(new GridLayout(4, 1)); //创建右面板 JSplitPane test1 = new JSplitPane(); //创建分裂面板 test.setDefaultCloseOperation(EXIT_ON_CLOSE); test.setSize(700, 460); //设置框架大小 test.setResizable(false); Container c = test.getContentPane(); c.add(test1); c.setLayout(new GridLayout(1, 2, 0, 0)); JRadioButton []rb1 = {new JRadioButton("黑色"),new JRadioButton("红色"),new JRadioButton("绿色")}; rb1[0].setSelected(true); //“黑色”选项默认为选中 ButtonGroup buttongroup = new ButtonGroup(); for(int i=0;i<rb1.length;i++) { //for循环,将两个单选按钮加入按钮组和面板中 buttongroup.add(rb1[i]); MyPanel1.add(rb1[i]); } lb1 = new JLabel("是否填充:",JLabel.LEFT); MyPanel2.add(lb1); JRadioButton []rb = {new JRadioButton("是"),new JRadioButton("否")}; rb[0].setSelected(true); //“是”选项默认为选中 ButtonGroup buttongroup1 = new ButtonGroup(); for(int i=0;i<rb.length;i++) { //for循环,将两个单选按钮加入按钮组和面板中 buttongroup1.add(rb[i]); MyPanel2.add(rb[i]); } TF = new JTextField(8); //创建文本框,用于半径调节 JLabel lb2 = new JLabel("半径:"); MyPanel3.add(lb2); MyPanel3.add(TF); TF.getText(); button = new JButton("画圆"); //创建画圆按钮,当数据调整完毕后进行画圆 MyPanel4.add(button); button.addActionListener(this); Right.add(MyPanel1); Right.add(MyPanel2); Right.add(MyPanel3); Right.add(MyPanel4); test1.setEnabled(false); test1.setOrientation(JSplitPane.HORIZONTAL_SPLIT); //设置分割方向是水平分割 test1.setLeftComponent(PP); //插入左边面板 test1.setRightComponent(Right); //插入右边面板 test.setVisible(true); test1.setDividerLocation(0.55); } public void actionPerformed(ActionEvent e) { //if(e.getSource() == rb1[0]) try { PP.setR(Integer.valueOf(TF.getText())); }catch(NumberFormatException a) { System.out.println("please input a number!"); } PP.repaint(); } class printp extends Panel{ //内部类,用于画圆的画板 public int r; public printp(int r){ this.r = r; } public void paint(Graphics g){ super.paint(g); g.setColor(Color.red); int h = this.getHeight(); int w = this.getWidth(); g.fillOval(w/2 - r, h/2 - r, 2 * r, 2 * r); } public int getR() { return r; } public void setR(int r) { this.r = r; } public void actionPerformed(ActionEvent e) { } } public static void main(String[] args) { C test = new C(); } } ``` ![图片说明](https://img-ask.csdn.net/upload/201910/04/1570177363_953858.png)

关于Jpanel, JScrollPane ,Jtable嵌套使用的问题

如题,我先建了一个继承了JPanel的 ListAddMainPanel。在这个ListAddMainPanel中,我嵌套了一个JScrollPane类的panel_1,在这个JScrollPane里,我放置了一个Jtable,Jtable 使用了DefaultTableModel。(可能看着有点晕,其实很简单,就是下面的那个图片) 使用时,我是在JFrame里的contentPane里先新建一个底层Panel,然后调用这个ListAddMainPanel的构造函数。想要给Table里加数据时,调用这个ListAddMainPanel里之前写好的fulfillTable函数 菜鸟觉得这个架构理论上应该行得通,但是问题来了,无论我使用什么样的方法,比如addRow();addColumn();setColumnIdentifiers(); 测试显示没有问题,数据也传进去了,程序也没报错,可他的界面就是没有出现表格_(:зゝ∠)_ 换了很多种方法,都没奏效,于是默默来求大佬帮助_(:зゝ∠)_ ![图片说明](https://img-ask.csdn.net/upload/2 ``` package w.teacher; import java.awt.Dimension; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JButton; import javax.swing.JTable; import javax.swing.SwingConstants; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableModel; import javax.swing.JTextField; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import javax.swing.JComboBox; public class ListAddMainPanel extends JPanel { // private JTable table1,table2,table3,table4,table5; public JLabel timeLabel; public JTable table; public DefaultTableModel tableModel; public JTextField textField; public JComboBox<String> gradeBox; public JButton addButton,importButton; /** * Create the panel. */ public ListAddMainPanel() { setLayout(null); setPreferredSize(new Dimension(856, 417)); setOpaque(false); JScrollPane panel_1 = new JScrollPane(table); panel_1.setBounds(14, 72, 493, 319); panel_1.setLayout(null); panel_1.setVisible(true); add(panel_1); //Table table = new JTable(tableModel); // tableModel = (DefaultTableModel)table.getModel(); // table.setPreferredScrollableViewportSize(new Dimension(493,319));//设置table大小 table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);//关闭表格列自动调整,此时水平滚动条可见 // table.setBounds(0, 0, 493, 319); panel_1.add(table);//原位置Table代码 table.setVisible(true); // tableModel.setColumnIdentifiers(name1111); panel_1.setViewportView(table);//原位置Table代码 } public void fulfillTable(String[] title,String[][] data) { // for(int i = 0;i<100;i++){ // for(int j = 0;j<7;j++) // System.out.println(data[i][j]); // } // tableModel = new DefaultTableModel(data, name); // table = new JTable(tableModel); if(title!=null) { for(int i = 0;i<title.length;i++) { tableModel.addColumn(title[i]); } } for(int i = 0;data[i+1][0]!=null;i++) { String[] mString = new String[data[i].length]; for(int y = 0;y<7;y++) { mString[y] = data[i][y]; System.out.println(mString[y]); } tableModel.addRow(mString); // System.out.println(mString); } } ```

MySQL 8.0.19安装教程(windows 64位)

话不多说直接开干 目录 1-先去官网下载点击的MySQL的下载​ 2-配置初始化的my.ini文件的文件 3-初始化MySQL 4-安装MySQL服务 + 启动MySQL 服务 5-连接MySQL + 修改密码 先去官网下载点击的MySQL的下载 下载完成后解压 解压完是这个样子 配置初始化的my.ini文件的文件 ...

Python+OpenCV计算机视觉

Python+OpenCV计算机视觉系统全面的介绍。

Vue.js 2.0之全家桶系列视频课程

基于新的Vue.js 2.3版本, 目前新全的Vue.js教学视频,让你少走弯路,直达技术前沿! 1. 包含Vue.js全家桶(vue.js、vue-router、axios、vuex、vue-cli、webpack、ElementUI等) 2. 采用笔记+代码案例的形式讲解,通俗易懂

navicat(内含激活码)

navicat支持mysql的可视化操作,内涵激活码,不用再忍受弹框的痛苦。

HTML期末大作业

这是我自己做的HTML期末大作业,花了很多时间,稍加修改就可以作为自己的作业了,而且也可以作为学习参考

150讲轻松搞定Python网络爬虫

【为什么学爬虫?】 &nbsp; &nbsp; &nbsp; &nbsp;1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到! &nbsp; &nbsp; &nbsp; &nbsp;2、如果是作为一个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站 【课程设计】 一个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是: 网络请求:模拟浏览器的行为从网上抓取数据。 数据解析:将请求下来的数据进行过滤,提取我们想要的数据。 数据存储:将提取到的数据存储到硬盘或者内存中。比如用mysql数据库或者redis等。 那么本课程也是按照这几个步骤循序渐进的进行讲解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序的灵活性,分别是: 爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。 Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。 通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为一个专业的爬虫框架,使用他可以快速提高我们编写爬虫程序的效率和速度。另外如果一台机器不能满足你的需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。 &nbsp; 从基础爬虫到商业化应用爬虫,本套课程满足您的所有需求! 【课程服务】 专属付费社群+每周三讨论会+1v1答疑

三个项目玩转深度学习(附1G源码)

从事大数据与人工智能开发与实践约十年,钱老师亲自见证了大数据行业的发展与人工智能的从冷到热。事实证明,计算机技术的发展,算力突破,海量数据,机器人技术等,开启了第四次工业革命的序章。深度学习图像分类一直是人工智能的经典任务,是智慧零售、安防、无人驾驶等机器视觉应用领域的核心技术之一,掌握图像分类技术是机器视觉学习的重中之重。针对现有线上学习的特点与实际需求,我们开发了人工智能案例实战系列课程。打造:以项目案例实践为驱动的课程学习方式,覆盖了智能零售,智慧交通等常见领域,通过基础学习、项目案例实践、社群答疑,三维立体的方式,打造最好的学习效果。

基于STM32的电子时钟设计

时钟功能 还有闹钟功能,温湿度功能,整点报时功能 你值得拥有

学生成绩管理系统(PHP + MYSQL)

做的是数据库课程设计,使用的php + MySQL,本来是黄金搭配也就没啥说的,推荐使用wamp服务器,里面有详细的使用说明,带有界面的啊!呵呵 不行的话,可以给我留言!

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

程序员的兼职技能课

获取讲师答疑方式: 在付费视频第一节(触摸命令_ALL)片头有二维码及加群流程介绍 限时福利 原价99元,今日仅需39元!购课添加小助手(微信号:itxy41)按提示还可领取价值800元的编程大礼包! 讲师介绍: 苏奕嘉&nbsp;前阿里UC项目工程师 脚本开发平台官方认证满级(六级)开发者。 我将如何教会你通过【定制脚本】赚到你人生的第一桶金? 零基础程序定制脚本开发课程,是完全针对零脚本开发经验的小白而设计,课程内容共分为3大阶段: ①前期将带你掌握Q开发语言和界面交互开发能力; ②中期通过实战来制作有具体需求的定制脚本; ③后期将解锁脚本的更高阶玩法,打通任督二脉; ④应用定制脚本合法赚取额外收入的完整经验分享,带你通过程序定制脚本开发这项副业,赚取到你的第一桶金!

实用主义学Python(小白也容易上手的Python实用案例)

原价169,限时立减100元! 系统掌握Python核心语法16点,轻松应对工作中80%以上的Python使用场景! 69元=72讲+源码+社群答疑+讲师社群分享会&nbsp; 【哪些人适合学习这门课程?】 1)大学生,平时只学习了Python理论,并未接触Python实战问题; 2)对Python实用技能掌握薄弱的人,自动化、爬虫、数据分析能让你快速提高工作效率; 3)想学习新技术,如:人工智能、机器学习、深度学习等,这门课程是你的必修课程; 4)想修炼更好的编程内功,优秀的工程师肯定不能只会一门语言,Python语言功能强大、使用高效、简单易学。 【超实用技能】 从零开始 自动生成工作周报 职场升级 豆瓣电影数据爬取 实用案例 奥运冠军数据分析 自动化办公:通过Python自动化分析Excel数据并自动操作Word文档,最终获得一份基于Excel表格的数据分析报告。 豆瓣电影爬虫:通过Python自动爬取豆瓣电影信息并将电影图片保存到本地。 奥运会数据分析实战 简介:通过Python分析120年间奥运会的数据,从不同角度入手分析,从而得出一些有趣的结论。 【超人气老师】 二两 中国人工智能协会高级会员 生成对抗神经网络研究者 《深入浅出生成对抗网络:原理剖析与TensorFlow实现》一书作者 阿里云大学云学院导师 前大型游戏公司后端工程师 【超丰富实用案例】 0)图片背景去除案例 1)自动生成工作周报案例 2)豆瓣电影数据爬取案例 3)奥运会数据分析案例 4)自动处理邮件案例 5)github信息爬取/更新提醒案例 6)B站百大UP信息爬取与分析案例 7)构建自己的论文网站案例

Java8零基础入门视频教程

这门课程基于主流的java8平台,由浅入深的详细讲解了java SE的开发技术,可以使java方向的入门学员,快速扎实的掌握java开发技术!

Python数据挖掘简易入门

&nbsp; &nbsp; &nbsp; &nbsp; 本课程为Python数据挖掘方向的入门课程,课程主要以真实数据为基础,详细介绍数据挖掘入门的流程和使用Python实现pandas与numpy在数据挖掘方向的运用,并深入学习如何运用scikit-learn调用常用的数据挖掘算法解决数据挖掘问题,为进一步深入学习数据挖掘打下扎实的基础。

零基础学C#编程—C#从小白到大咖

本课程从初学者角度出发,提供了C#从入门到成为程序开发高手所需要掌握的各方面知识和技术。 【课程特点】 1 由浅入深,编排合理; 2 视频讲解,精彩详尽; 3 丰富实例,轻松易学; 4 每章总结配有难点解析文档。 15大章节,228课时,1756分钟与你一同进步!

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

多功能数字钟.zip

利用数字电子计数知识设计并制作的数字电子钟(含multisim仿真),该数字钟具有显示星期、24小时制时间、闹铃、整点报时、时间校准功能

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

想学好JAVA必须要报两万的培训班吗? Java大神勿入 如果你: 零基础想学JAVA却不知道从何入手 看了一堆书和视频却还是连JAVA的环境都搭建不起来 囊中羞涩面对两万起的JAVA培训班不忍直视 在职没有每天大块的时间专门学习JAVA 那么恭喜你找到组织了,在这里有: 1. 一群志同道合立志学好JAVA的同学一起学习讨论JAVA 2. 灵活机动的学习时间完成特定学习任务+每日编程实战练习 3. 热心助人的助教和讲师及时帮你解决问题,不按时完成作业小心助教老师的家访哦 上一张图看看前辈的感悟: &nbsp; &nbsp; 大家一定迫不及待想知道什么是极简JAVA学习营了吧,下面就来给大家说道说道: 什么是极简JAVA学习营? 1. 针对Java小白或者初级Java学习者; 2. 利用9天时间,每天1个小时时间; 3.通过 每日作业 / 组队PK / 助教答疑 / 实战编程 / 项目答辩 / 社群讨论 / 趣味知识抢答等方式让学员爱上学习编程 , 最终实现能独立开发一个基于控制台的‘库存管理系统’ 的学习模式 极简JAVA学习营是怎么学习的? &nbsp; 如何报名? 只要购买了极简JAVA一:JAVA入门就算报名成功! &nbsp;本期为第四期极简JAVA学习营,我们来看看往期学员的学习状态: 作业看这里~ &nbsp; 助教的作业报告是不是很专业 不交作业打屁屁 助教答疑是不是很用心 &nbsp; 有奖抢答大家玩的很嗨啊 &nbsp; &nbsp; 项目答辩终于开始啦 &nbsp; 优秀者的获奖感言 &nbsp; 这是答辩项目的效果 &nbsp; &nbsp; 这么细致的服务,这么好的氛围,这样的学习效果,需要多少钱呢? 不要1999,不要199,不要99,只要9.9 是的你没听错,只要9.9以上所有就都属于你了 如果你: 1、&nbsp;想学JAVA没有基础 2、&nbsp;想学JAVA没有整块的时间 3、&nbsp;想学JAVA没有足够的预算 还等什么?赶紧报名吧,抓紧抢位,本期只招300人,错过只有等时间待定的下一期了 &nbsp; 报名请加小助手微信:eduxy-1 &nbsp; &nbsp;

Python可以这样学(第一季:Python内功修炼)

董付国系列教材《Python程序设计基础》、《Python程序设计(第2版)》、《Python可以这样学》配套视频,讲解Python 3.5.x和3.6.x语法、内置对象用法、选择与循环以及函数设计与使用、lambda表达式用法、字符串与正则表达式应用、面向对象编程、文本文件与二进制文件操作、目录操作与系统运维、异常处理结构。

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

机器学习实战系列套餐(必备基础+经典算法+案例实战)

机器学习实战系列套餐以实战为出发点,帮助同学们快速掌握机器学习领域必备经典算法原理并结合Python工具包进行实战应用。建议学习顺序:1.Python必备工具包:掌握实战工具 2.机器学习算法与实战应用:数学原理与应用方法都是必备技能 3.数据挖掘实战:通过真实数据集进行项目实战。按照下列课程顺序学习即可! 课程风格通俗易懂,用最接地气的方式带领大家轻松进军机器学习!提供所有课程代码,PPT与实战数据,有任何问题欢迎随时与我讨论。

Java面试题大全(2020版)

发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~ 本套Java面试题大全,全的不能再全,哈哈~ 一、Java 基础 1. JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境。 JRE:Java Runtime Environ...

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

深度学习原理+项目实战+算法详解+主流框架(套餐)

深度学习系列课程从深度学习基础知识点开始讲解一步步进入神经网络的世界再到卷积和递归神经网络,详解各大经典网络架构。实战部分选择当下最火爆深度学习框架PyTorch与Tensorflow/Keras,全程实战演示框架核心使用与建模方法。项目实战部分选择计算机视觉与自然语言处理领域经典项目,从零开始详解算法原理,debug模式逐行代码解读。适合准备就业和转行的同学们加入学习! 建议按照下列课程顺序来进行学习 (1)掌握深度学习必备经典网络架构 (2)深度框架实战方法 (3)计算机视觉与自然语言处理项目实战。(按照课程排列顺序即可)

HoloLens2开发入门教程

本课程为HoloLens2开发入门教程,讲解部署开发环境,安装VS2019,Unity版本,Windows SDK,创建Unity项目,讲解如何使用MRTK,编辑器模拟手势交互,打包VS工程并编译部署应用到HoloLens上等。

几率大的Redis面试题(含答案)

本文的面试题如下: Redis 持久化机制 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题 热点数据和冷数据是什么 Memcache与Redis的区别都有哪些? 单线程的redis为什么这么快 redis的数据类型,以及每种数据类型的使用场景,Redis 内部结构 redis的过期策略以及内存淘汰机制【~】 Redis 为什么是单线程的,优点 如何解决redis的并发竞争key问题 Red...

MFC一站式终极全套课程包

该套餐共包含从C小白到C++到MFC的全部课程,整套学下来绝对成为一名C++大牛!!!

【数据结构与算法综合实验】欢乐连连看(C++ & MFC)案例

这是武汉理工大学计算机学院数据结构与算法综合实验课程的第三次项目:欢乐连连看(C++ & MFC)迭代开发代码。运行环境:VS2017。已经实现功能:开始游戏、消子、判断胜负、提示、重排、计时、帮助。

YOLOv3目标检测实战:训练自己的数据集

YOLOv3是一种基于深度学习的端到端实时目标检测方法,以速度快见长。本课程将手把手地教大家使用labelImg标注和使用YOLOv3训练自己的数据集。课程分为三个小项目:足球目标检测(单目标检测)、梅西目标检测(单目标检测)、足球和梅西同时目标检测(两目标检测)。 本课程的YOLOv3使用Darknet,在Ubuntu系统上做项目演示。包括:安装Darknet、给自己的数据集打标签、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计(mAP计算和画出PR曲线)和先验框聚类。 Darknet是使用C语言实现的轻型开源深度学习框架,依赖少,可移植性好,值得深入探究。 除本课程《YOLOv3目标检测实战:训练自己的数据集》外,本人推出了有关YOLOv3目标检测的系列课程,请持续关注该系列的其它课程视频,包括: 《YOLOv3目标检测实战:交通标志识别》 《YOLOv3目标检测:原理与源码解析》 《YOLOv3目标检测:网络模型改进方法》 敬请关注并选择学习!

u-boot-2015.07.tar.bz2

uboot-2015-07最新代码,喜欢的朋友请拿去

相关热词 c# 开发接口 c# 中方法上面的限制 c# java 时间戳 c#单元测试入门 c# 数组转化成文本 c#实体类主外键关系设置 c# 子函数 局部 c#窗口位置设置 c# list 查询 c# 事件 执行顺序
立即提问