A. 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
B. JAVA SWING中如何通过点击按钮来动态的更新界面里的内容 例如软件里的“下一步”功能 能出现不同的界面
使用卡片布局,这种布局允许你定义多个面板,并且给每个面板起名字,你只要通过点击事件来显示其中某一个面板就可以达到你要的效果
比如:
CardLayout crd=new CardLayout();
具体例子网上很多,而且一看就懂
C. 我在java swing,jframe窗口 中添加了菜单栏,但是运行时却什么都没有,求大神
你的Java程序我帮你改好了,你看看吧.
主要问题是你在菜单初始化之前,显示frame页面,导致菜单没有显示.把显示frame页面放到菜单初始化之后就行了.
importjava.awt.BorderLayout;
importjavax.swing.JFrame;
importjavax.swing.JMenu;
importjavax.swing.JMenuBar;
importjavax.swing.JMenuItem;
publicclassMainGui{
JFrameframe;
JMenuBarmenuBar1;
JMenumenu1,menu2,menu3,menu4,menu5,menu6,menu7,menu8;
JMenuItemmi_book_add,mi_book_update,mi_book_delete,mi_reader_add,mi_reader_update,mi_reader_delete;
JMenuItemmi_borrow,mi_return,mi_query_book,mi_query_reader,mi_update_reader,mi_exit;
publicMainGui(){
frame=newJFrame("LibraryMenageSystem");
menuBar1=newJMenuBar();
menu5=newJMenu("BasicMaintain");
menu6=newJMenu("BookMaintain");
mi_book_add=newJMenuItem("Add..");
mi_book_update=newJMenuItem("Modify..");
mi_book_delete=newJMenuItem("Delete..");
menu6.addSeparator();
menu6.add(mi_book_add);menu6.add(mi_book_update);menu6.add(mi_book_delete);
menu7=newJMenu("ReaderMaintain");
mi_reader_add=newJMenuItem("AddNewUser..");
mi_reader_update=newJMenuItem("ModifyUserinfo..");
mi_reader_delete=newJMenuItem("DeleteUser..");
menu7.add(mi_reader_add);menu7.add(mi_reader_update);menu7.add(mi_reader_delete);
menu1=newJMenu("BorrowInformationManage");
mi_borrow=newJMenuItem("Borrow");
mi_return=newJMenuItem("Return");
menu1.add(mi_borrow);menu1.add(mi_return);
menu2=newJMenu("QuerySystem");
mi_query_book=newJMenuItem("BookQuery");
mi_query_reader=newJMenuItem("UserQuery");
menu2.add(mi_query_book);menu2.add(mi_query_reader);
menu3=newJMenu("SystemManage");
mi_exit=newJMenuItem("Quit");
menu3.add(mi_exit);
menuBar1.add(menu5);
menuBar1.add(menu6);
menuBar1.add(menu7);
menuBar1.add(menu1);
menuBar1.add(menu2);
menuBar1.add(menu3);
frame.setJMenuBar(menuBar1);
frame.setLayout(newBorderLayout());
frame.setSize(640,480);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
publicstaticvoidmain(String[]args){
newMainGui();
}
}
运行结果
D. java实现简单登录界面,就是按个按钮就能从一个JFRAME跳转到另一个,基本就是按登录就能跳转
java实现的简单登录页面,从一个按钮点击后跳转的页面的jframe写法:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class jb{
public static void main(String args[]){
JFrame f=new JFrame("点我跳转");
Container contentPane=f.getContentPane();
contentPane.setLayout(new GridLayout(1,2));
Icon icon=new ImageIcon("b.jpg");
JLabel label2=new JLabel("a",icon,JLabel.CENTER);
label2.setHorizontalTextPosition(JLabel.CENTER);
contentPane.setLayout(new FlowLayout( FlowLayout.CENTER,10,10));
JButton bb=new JButton("图片");
bb.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
JFrame bf=new JFrame("新窗体");
Icon icon=new ImageIcon("enter.jpg");
JLabel label2=new JLabel(icon);
bf.getContentPane().add(label2);
bf.setSize(300,360);
bf.show();
}});
contentPane.add(label2);
contentPane.add(bb);
f.pack();
f.show();
}}
E. Java Swing关于界面刷新的问题!!
这个,你把jpanel对象声明为成全局变量,在主窗体里面去创建,然后通过按钮来改变jpanel对象即可:具体的代码我就不写了,给点关键的给你,仅作参考!
我没有编译环境,单词有可能有些错,能表达意思就好,
代码如下:
class Demo extend Jframe{
private Jpanel panel=null;//这个是你要更改的面板
private Jbutton btnA=null;
private Jbutton btnB=null;
public Demo()
{
this.setSize(800,600)
panel=new Jpane();
panel.setSize(100,100);
btnA=new Jbutton("宽度加300")
btnA.addActionListener(new actionListener(){
实现接口方法,在实现方法中填入panel.setSize(400,100);
})
btnB=new Jbutton("高度加300")
btnB.addActionListener(new actionListener(){
实现接口方法,在实现方法中填入panel.setSize(100,400);
})
this.add(panel);
this.add(btnA);
this.add(btnB);
}
main(String[] args){
new Demo();
}
}
当程序运行的时候,你分别点击按钮你就可以随时改变panel中的类容了,包括在panel中控件,文本等!!,其他的什么布局,坐标什么的,楼主应该很熟悉的,我只给个例子!!我就不啰嗦了!
F. java GUI,点击按钮弹出下一个frame界面的代码
jPanel1.setLayout(borderLayout2);把这句去掉并且在开始构造jPanel1的时候给内它容加个layoutJPanel
jPanel1
=
new
JPanel(new
BorderLayout());
G. java中怎样实现刷新Jframe,具体内容如下:
可以改变图片的背景图片啊!
给按钮一个单击事件(ActionPerformed),在事件里面用 按钮名称.setIcon(new ImageIcon("图片路径"));
H. JAVA编写程序实现这个界面
importjava.awt.Color;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JPanel;
importjavax.swing.jsplitPane;
/**
*
*@authorgyona
*/
{
JPaneljp1,jp2,jp3;
JSplitPanejsp1,jsp2;
JLabelj1,j2,j3;
publicstaticvoidmain(String[]args){
JFrameDemojf=newJFrameDemo();
jf.init();
}
privatevoidinit(){
jp1=newJPanel();
j1=newJLabel("label1");//文字标签
jp1.add(j1);
jp1.setBackground(Color.BLUE);//背景色
jp2=newJPanel();
j2=newJLabel("label2");
jp2.add(j2);
jsp1=newJSplitPane(JSplitPane.HORIZONTAL_SPLIT,jp1,jp2);//横向拆分
jsp1.setOneTouchExpandable(false);//隐藏拆分线上的小三角形
jp3=newJPanel();
jp3.setBackground(Color.RED);
j3=newJLabel("label3");
jp3.add(j3);
jsp2=newJSplitPane(JSplitPane.VERTICAL_SPLIT,jsp1,jp3);//纵向拆分
jsp2.setOneTouchExpandable(false);
this.add(jsp2);
this.setTitle("JFramewithJSplitPane");
this.setBounds(300,200,350,260);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
jsp1.setDividerLocation(0.5);//调整第一个拆分窗口的比例0.5:0.5
jsp2.setDividerLocation(0.5);//调整第二个拆分窗口的比例0.5:0.5
}
}