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
}
}