① JLABEL动态更新的问题
经过我N长时间的研究,终于找到答案了,不容易啊。
以下为引用:
为什么会发生这样奇怪的现象呢?
java Swing中,界面刷新是线程同步的,也就是说同一时间,只有一个线程能执行刷新界面的代码。如果要多次不断地刷新界面,必须在多线程中调用刷新的方法。
本例中,在buttonActionPerformed方法中多次调用了setText方法来试图刷新JLabel和JTextField的文本。buttonActionPerformed方法运行在主线程中,所以每次调用setText都是运行在主线程中,而且是顺序的执行的。在前面几次调用setText后,线程并没有退出,所以界面刷新线程不能获得执行刷新的机会。而当最后一次setText后,线程退出,界面才能执行刷新。所以我们只能看到最后一次setText的值。
因此,要解决这个问题,我们必须把buttonActionPerformed方法中的代码段放到一个单独的线程中执行。这样它就不会使线程阻塞,当每次setText后,界面刷新线程也能得到执行的机会,从而刷新界面。
所以,你的代码修改如下(只修改了actionPerformed):
@Override
publicvoidactionPerformed(ActionEventarg0)
{
newThread(newRunnable(){
@Override
publicvoidrun(){
//TODOAuto-generatedmethodstub
for(inti=0;i<3;i++)
{
l.setText("num:"+i);
try{
TimeUnit.SECONDS.sleep(2);
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
}).start();
}
参考:http://www.cnblogs.com/xiaoran1129/articles/2576111.html
② java的label中如何实现换行输出
swing中的大部分组件可以使用html的语法,JLabel的文本换行输入可以使用下面的回语句:
MyJLable.setText("<html><p>第一行</p></p>第二行</p></html>");
参考答资料是Sun的教程,可以看看
③ java实现:整数进制相互转换
java实现:整数进制相互转换的方法:
十进制转为二进制、八进制、十六进制, 用 Integer.toXXXString()方法
(1)十进制转为二进制: Integer.toBinaryString(int i);
public static String toBinaryString(inti):以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式。
(2)十进制转为8进制 :Integer.toOctalString(int i);
public static String toOctalString(inti):以八进制(基数 8)无符号整数形式返回一个整数参数的字符串表示形式。
(3)十进制转为16进制: Integer.toHexString(int i);
public static String toHexString(inti):以十六进制(基数 16)无符号整数形式返回一个整数参数的字符串表示形式。
举例:
Stringbin=Integer.toBinaryString(10);
Stringoct=Integer.toOctalString(10);
Stringhex=Integer.toHexString(10);
2.十六进制、八进制、二进制转为十进制(有两种方法):parseInt() 和valueOf()。
Integer.parseInt(String s,int radix);
public static int parseInt(String s,int radix) throws NumberFormatException{}使用第二个参数作为指定的基数,将字符串参数解析为有符号的整数;
Integer.valueOf(String s,int radix);
public static Integer valueOf(Strings, intradix) throws NumberFormatException{}返回一个 Integer 对象,该对象中保存了用第二个参数提供的基数进行解析时从指定的 String 中提取的值。
举例:
try{
inti=Integer.parseInt("a",16);
//输出为10进制数10
System.out.println(i);
}catch(Exceptione){
e.printStackTrace();
}
try{
//十六进制转成十进制
Stringhex=Integer.valueOf("FFFF",16).toString();
System.out.println(hex);
//八进制转成十进制
Stringoct=Integer.valueOf("12",8).toString();
System.out.println(oct);
//二进制转十进制
Stringbin=Integer.valueOf("0101",2).toString();
System.out.println(bin);
}catch(Exceptione){
e.printStackTrace();
}
④ java程序限制文本框只能输入浮点数的方法以及非浮点数清空文本框
效果图
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
{
=1L;
JTextFieldjtf;
publicInputFrame(){
JLabeljl=newJLabel("请输入浮点数");
jtf=newJTextField(10);
jtf.addActionListener(this);
add(jl);
add(jtf);
setLayout(newFlowLayout());
setTitle("窗口");
setSize(200,130);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
publicvoidactionPerformed(ActionEvente){
//方法一:用证正则表达式进行匹配,如果不符合浮点数就清空对话框
// StringREG="^(-?\d+)(\.\d+)?$";
// if(jtf.getText().matches(REG)){
// doubled=Double.parseDouble(jtf.getText());
// jtf.setText(d+"");
// }else{
// jtf.setText("");//清空文本框
// }
//方法二:用异常处理来解决
try{
doubled=Double.parseDouble(jtf.getText());
jtf.setText(d+"");
}catch(Exceptionex){
jtf.setText("");//清空文本框
}
}
publicstaticvoidmain(String[]args){
newInputFrame();
}
}
⑤ java swing中 让一个JLabel组建隐藏但是 保留他的位置怎么做啊 我setVisible(false)
这个真没有办法,不过你可以使用JLabel.setText("");内容设置为空,简枝镇或者你添加一个new JLabel,通搭缓供add(comp,index)方法来代替想拦粗要隐藏的JLabel的位置
⑥ 在Java中怎么在文本域输入特定文字,实现单击一哈按钮,在另一个文本框内显示特定的内容
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.Document;
public class frame extends JFrame
{
JLabel lable1;
JTextArea text2;
JTextField text1;
JButton button;
/**
*
*/
private static final long serialVersionUID = 1L;
public void shapeSearch ( boolean b )
{
this.setTitle ("图形属性查询器");
this.setSize (400, 250);
this.setResizable (b);
this.setVisible (true);
this.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
}
public void imputDemo ()
{
JLabel lable1 = new JLabel ("图形名称:");
text2 = new JTextArea ();
text2.setText (null);
text2.setLineWrap (true);
text2.setBounds (20, 20, 300, 200);
text1 = new JTextField (10);
JButton button = new JButton ("查询");
JScrollPane scroll = new JScrollPane (text2);
FlowLayout seeText = new FlowLayout (FlowLayout.CENTER);
seeText.setHgap (20);
seeText.setVgap (60);
this.setLayout (seeText);
this.add (lable1);
this.add (text1);
this.add (button);
this.add (scroll);
ButtonHandle handle = new ButtonHandle ();
button.addActionListener (handle);
DocumentWriter dm = new DocumentWriter ();
Document doc = text1.getDocument ();
doc.addDocumentListener (dm);
this.setVisible (true);
}
class ButtonHandle implements ActionListener
{
public void actionPerformed ( ActionEvent event )
{
if (event.getActionCommand ().equals ("查询"))
{
if ("圆形".equals (text1.getText ()))
{
text2.setText ("该圆形的半径是3\n" + "周长是18.84\n" + "面积是28.26");
}
else if ("矩形".equals (text1.getText ()))
{
text2.setText ("该矩形的长是5,宽是4\n" + "周长是18\n" + "面积是20");
text2.setVisible (true);
}
else if ("三角形".equals (text1.getText ()))
{
text2.setText ("该三角形的底边是3,高是4,斜边是5\n" + "周长是12\n" + "面积是6");
text2.setVisible (true);
}
}
}
}
class DocumentWriter implements DocumentListener
{
public void changedUpdate ( DocumentEvent e )
{}
public void insertUpdate ( DocumentEvent e )
{}
public void removeUpdate ( DocumentEvent e )
{}
}
public static void main ( String[] args ) throws Exception
{
frame littleFrame = new frame ();
littleFrame.shapeSearch (false);
littleFrame.imputDemo ();
}
}