schumacher76
|
分享:
▼
x0
|
[Java][求助] Java-AWT與SWING程式問題求助
我想做的成果是... 在Text A輸入數字在Text B輸入字串之後按寫入 在Text C輸入剛剛輸入的數字然後按讀出並會在Text D顯示剛剛的字串... 請問以上程序有什麼地方出錯呢? 請各位前輩們指導一下...謝謝 import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; public class AwtIo { static String datamem[]=new String; bt1.addActionListener(new ActLis()); bt2.addActionListener(new ActLis()); JLabel lb1=new JLabel("區域選擇"); JButton bt1=new JButton("寫入"); JButton bt2=new JButton("讀出"); JTextField tx1=new JTextField("1"); JTextField tx2=new JTextField("ANDY"); JTextField tx3=new JTextField(""); JTextField tx4=new JTextField(""); static int i=1; public static void main(String args[]) { bt1.addActionListener(new ActLis()); bt2.addActionListener(new ActLis()); JFrame frame = new JFrame("I/O測試"); Container c=frame.getContentPane(); c.setLayout(null); // JLabel元件 JLabel lb1=new JLabel("區域選擇"); .. 訪客只能看到部份內容,免費 加入會員 或由臉書 Google 可以看到全部內容
|
|
x0
[樓 主]
From:臺灣索尼So-net網 | Posted:2009-03-17 19:57 |
|
|
overing
|
分享:
▲
▼
參考看看~ 複製程式
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
/* 都用到swing了乾脆就都用高階元件就好了
*/
public class NewAwtIo extends JFrame implements ActionListener {
static String datamem[]=new String[10];
JLabel lb1;
JButton bt1;
JButton bt2;
JTextField tx1;
JTextField tx2;
JTextField tx3;
JTextField tx4;
static int i=1;
public NewAwtIo() {
setLayout(null);
lb1 = new JLabel("區域選擇");
lb1.setForeground(Color.red);
lb1.setSize(240,40);
lb1.setLocation(10,20);
add(lb1);
tx1 = new JTextField("");
tx1.setForeground(Color.red);
tx1.setSize(200,40);
tx1.setLocation(10,70);
add(tx1);
tx2 = new JTextField("");
tx2.setForeground(Color.red);
tx2.setSize(200,40);
tx2.setLocation(250,70);
add(tx2);
tx3 = new JTextField("");
tx3.setForeground(Color.red);
tx3.setSize(200,40);
tx3.setLocation(10,150);
add(tx3);
tx4 = new JTextField("");
tx4.setForeground(Color.black);
tx4.setSize(200,40);
tx4.setLocation(250,150);
add(tx4);
bt1=new JButton("寫入");
bt1.setSize(100,40);
bt1.setLocation(60,250);
bt1.setBorderPainted(true);
bt1.setEnabled(true);
add(bt1);
bt2=new JButton("寫出");
bt2.setSize(100,40);
bt2.setLocation(300,250);
bt2.setBorderPainted(true);
bt2.setEnabled(true);
add(bt2);
bt1.addActionListener(this);
bt2.addActionListener(this);
tx1.setEditable(true);
tx2.setEditable(true);
tx3.setEditable(true);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500,400); //設定視窗大小
setVisible(true); //顯示視窗
}
public void actionPerformed(ActionEvent e) {
int num1,num2;
if(e.getSource().equals(bt1)) {
num1 = Integer.parseInt(tx1.getText());
datamem[num1] = tx2.getText();
if((i%2) == 1)
setBackground(Color.yellow);
else
setBackground(Color.red);
i=i+1;
}
else if (e.getSource().equals(bt2)) {
num2=Integer.parseInt(tx3.getText());
tx4.setText(datamem[num2]);
if((i%2) == 1)
setBackground(Color.blue);
else
setBackground(Color.green);
i=i+1;
}
}
public static void main(String[] args) {
new NewAwtIo();
}
}
/*
class AwtIo
{
static String datamem[]=new String[10];
bt1.addActionListener(new ActLis()); //這個比較適合放在new之後
bt2.addActionListener(new ActLis()); //同上
JLabel lb1=new JLabel("區域選擇");
JButton bt1=new JButton("寫入");
JButton bt2=new JButton("讀出");
JTextField tx1=new JTextField("1");
JTextField tx2=new JTextField("ANDY");
JTextField tx3=new JTextField("");
JTextField tx4=new JTextField("");
static int i=1;
public static void main(String args[])
{
bt1.addActionListener(new ActLis()); //跟L114一樣
bt2.addActionListener(new ActLis()); //同上
JFrame frame = new JFrame("I/O測試");
Container c=frame.getContentPane();
c.setLayout(null);
// JLabel元件
JLabel lb1=new JLabel("區域選擇"); //重複到L115的動作 你是要類別的還是區域的?
lb1.setForeground(Color.red);
lb1.setSize(240,40);
lb1.setLocation(10,20);
c.add(lb1);
JTextField tx1=new JTextField(""); //重複到L119的動作
tx1.setForeground(Color.red);
tx1.setSize(200,40);
tx1.setLocation(10,70);
c.add(tx1);
JTextField tx2=new JTextField(""); //重複到L120
tx2.setForeground(Color.red);
tx2.setSize(200,40);
tx2.setLocation(250,70);
c.add(tx2);
JTextField tx3=new JTextField(""); //重複到L121
tx3.setForeground(Color.red);
tx3.setSize(200,40);
tx3.setLocation(10,150);
c.add(tx3);
JTextField tx4=new JTextField(""); //重複到L122
tx4.setForeground(Color.black);
tx4.setSize(200,40);
tx4.setLocation(250,150);
c.add(tx4);
JButton bt1=new JButton("寫入"); //重複到L116
bt1.setSize(100,40);
bt1.setLocation(60,250);
bt1.setBorderPainted(true);
bt1.setEnabled(true);
c.add(bt1);
JButton bt2=new JButton("寫出"); //重複到L117
bt2.setSize(100,40);
bt2.setLocation(300,250);
bt2.setBorderPainted(true);
bt2.setEnabled(true);
c.add(bt2);
tx1.setEditable(true); //預設JTextField就是了 可省略
tx2.setEditable(true); //同上
tx3.setEditable(true); //同上
frm.add(bt1); //跟上面c.add(...)重複 選一個就好
frm.add(bt2); //同上
frm.add(tx1); //同上
frm.add(tx2); //同上
frm.add(tx3); //同上
frm.add(tx4); //同上
frm.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500,400); //設定視窗大小
frame.setVisible(true); //顯示視窗
frm.addWindowListener(new WindowAdapter() //L118那行可以抵L191~197的動作
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
static class ActLis implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
int num1,num2;
Button bt=(Button) e.getSource();
if (bt==bt1)
{
num1=Integer.parseInt(tx1.getText());
datamem[num1]=tx2.getText();
if((i%2) == 1)
frm.setBackground(Color.yellow);
else
frm.setBackground(Color.red);
i=i+1;
}
else if (bt==bt2)
{
num2=Integer.parseInt(tx3.getText());
tx4.setText(datamem[num2]);
if((i%2) == 1)
frm.setBackground(Color.blue);
else
frm.setBackground(Color.green);
i=i+1;
}
}
}
} */
此文章被評分,最近評分記錄財富:50 (by 三仙) | 理由: 因為您的參與,讓程式設計更容易!! ^^ | |
|
|
|
Zippy G2 600W Intel C2Q Q9550 Gigabyte GA-X48-DQ6 Gigabyte GV-NX96T512H-B G-skill pi 1100MHz 2Gx4 ACARD ANS-9010 32GB (Windows7 10sec boot!!) WD 150GB(WD1500ADFD)/640GB(6400AASK)
|
x1
[1 樓]
From:未知地址 | Posted:2009-03-17 21:36 |
|
|
overing
|
分享:
▲
▼
下面是引用 schumacher76 於 2009-03-18 02:44 發表的 : 謝謝 overing 大大的更正與指導...
不過愚鈍的我用您幫我更正後的程式執行, 出現的框架全部都是白色的,加上title之後也沒顯示出來。
請問是哪邊出問題還是說還有地方要修正呢? 這就怪了~ 我這都是正常編譯正常執行的說 我是直接下指令編譯 javac NewAwtIo.java 接著 java NewAwtIo 直接附上原始檔給你好了 請右鍵另存執行時的圖順邊修正 setBackground(Color); 因為JFrame顯示再最上層的並不是這副程式能上到色的pane 要先取得content pane再對其修改顏色才看的出來 所以複寫掉 改成 getContentPane().setBackground(Color.blue);
[ 此文章被overing在2009-03-19 04:30重新編輯 ]
|
Zippy G2 600W Intel C2Q Q9550 Gigabyte GA-X48-DQ6 Gigabyte GV-NX96T512H-B G-skill pi 1100MHz 2Gx4 ACARD ANS-9010 32GB (Windows7 10sec boot!!) WD 150GB(WD1500ADFD)/640GB(6400AASK)
|
x0
[3 樓]
From:未知地址 | Posted:2009-03-19 04:25 |
|
|
overing
|
分享:
▲
▼
下面是引用 schumacher76 於 2009-03-19 10:44 發表的 : 再請問... 我程式的Title用這個指令可以嗎?
JFrame frame = new JFrame("I/O測試"); Container c=frame.getContentPane(); c.setLayout(null);
後來改成這個也不行.. JFrame frame = new JFrame(); frame.setTitle("I/O測試"); frame.setLayout(null);
還是說這2個指令都可以,不過還要在加什麼指令呢? 設定title的話兩種方式都可以 JFrame frame = new JFrame("I/O測試"); 這種是透過JFrame這類別的建構子帶入title 建構子 JFrame(String) 會將參數字串作為建構視窗的標題 setTitle("I/O測試"); 這是直接去設定標題 不過 Container c=frame.getContentPane(); setLayout(null); 這兩行就跟title無關了 還是不行的話麻煩po上你現在版本的code這樣比較好找出問題所在
[ 此文章被overing在2009-03-19 20:15重新編輯 ]
|
Zippy G2 600W Intel C2Q Q9550 Gigabyte GA-X48-DQ6 Gigabyte GV-NX96T512H-B G-skill pi 1100MHz 2Gx4 ACARD ANS-9010 32GB (Windows7 10sec boot!!) WD 150GB(WD1500ADFD)/640GB(6400AASK)
|
x0
[5 樓]
From:未知地址 | Posted:2009-03-19 20:10 |
|
|
schumacher76
|
分享:
▲
▼
複製程式
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class NewAwtIo extends JFrame implements ActionListener {
static String datamem[]=new String[10];
JLabel lb1;
JButton bt1;
JButton bt2;
JTextField tx1;
JTextField tx2;
JTextField tx3;
JTextField tx4;
JFrame frame;
static int i=1;
public NewAwtIo() {
setLayout(null);
frame = new JFrame("I/O測試");
frame.setForeground(Color.red);
lb1 = new JLabel("區域選擇");
lb1.setForeground(Color.red);
lb1.setSize(240,40);
lb1.setLocation(10,20);
add(lb1);
tx1 = new JTextField("");
tx1.setForeground(Color.red);
tx1.setSize(200,40);
tx1.setLocation(10,70);
add(tx1);
tx2 = new JTextField("");
tx2.setForeground(Color.red);
tx2.setSize(200,40);
tx2.setLocation(10,150);
add(tx2);
tx3 = new JTextField("");
tx3.setForeground(Color.red);
tx3.setSize(200,40);
tx3.setLocation(250,70);
add(tx3);
tx4 = new JTextField("");
tx4.setForeground(Color.black);
tx4.setSize(200,40);
tx4.setLocation(250,150);
add(tx4);
bt1=new JButton("寫入");
bt1.setSize(100,40);
bt1.setLocation(60,250);
bt1.setBorderPainted(true);
bt1.setEnabled(true);
add(bt1);
bt2=new JButton("寫出");
bt2.setSize(100,40);
bt2.setLocation(300,250);
bt2.setBorderPainted(true);
bt2.setEnabled(true);
add(bt2);
bt1.addActionListener(this);
bt2.addActionListener(this);
tx1.setEditable(true);
tx2.setEditable(true);
tx3.setEditable(true);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500,400); //設定視窗大小
setVisible(true); //顯示視窗
}
public void setBackground(Color c) {
getContentPane().setBackground(c);
}
public void actionPerformed(ActionEvent e) {
int num1,num2;
if(e.getSource().equals(bt1)) {
num1 = Integer.parseInt(tx1.getText());
datamem[num1] = tx2.getText();
if((i%2) == 1) setBackground(Color.yellow);
else setBackground(Color.red);
i=i+1;
} else if (e.getSource().equals(bt2)) {
num2=Integer.parseInt(tx3.getText());
tx4.setText(datamem[num2]);
if((i%2) == 1) setBackground(Color.blue);
else setBackground(Color.green);
i=i+1;
}
}
public static void main(String[] args) {
new NewAwtIo();
}
}
我是用您Compile好的.java程式去執行的... 之後再加上title那2段...好像也沒有顯示出來! 麻煩請再幫我看看哪邊有需要修正,謝謝。
[ 此文章被schumacher76在2009-03-19 22:42重新編輯 ]
|
|
x0
[6 樓]
From:臺灣 | Posted:2009-03-19 22:37 |
|
|
schumacher76
|
分享:
▲
▼
複製程式
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class NewAwtIo extends JFrame implements ActionListener {
static String datamem[]=new String[10];
JLabel lb1;
JButton bt1;
JButton bt2;
JTextField tx1;
JTextField tx2;
JTextField tx3;
JTextField tx4;
JFrame frame;
static int i=1;
public NewAwtIo() {
setLayout(null);
frame = new JFrame("");
frame.setTitle("I/O測試");
frame.setForeground(Color.red);
lb1 = new JLabel("區域選擇");
lb1.setForeground(Color.red);
lb1.setSize(240,40);
lb1.setLocation(10,20);
add(lb1);
tx1 = new JTextField("");
tx1.setForeground(Color.red);
tx1.setSize(200,40);
tx1.setLocation(10,70);
add(tx1);
tx2 = new JTextField("");
tx2.setForeground(Color.red);
tx2.setSize(200,40);
tx2.setLocation(10,150);
add(tx2);
tx3 = new JTextField("");
tx3.setForeground(Color.red);
tx3.setSize(200,40);
tx3.setLocation(250,70);
add(tx3);
tx4 = new JTextField("");
tx4.setForeground(Color.black);
tx4.setSize(200,40);
tx4.setLocation(250,150);
add(tx4);
bt1=new JButton("寫入");
bt1.setSize(100,40);
bt1.setLocation(60,250);
bt1.setBorderPainted(true);
bt1.setEnabled(true);
add(bt1);
bt2=new JButton("寫出");
bt2.setSize(100,40);
bt2.setLocation(300,250);
bt2.setBorderPainted(true);
bt2.setEnabled(true);
add(bt2);
bt1.addActionListener(this);
bt2.addActionListener(this);
tx1.setEditable(true);
tx2.setEditable(true);
tx3.setEditable(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500,400); //設定視窗大小
setVisible(true); //顯示視窗
}
public void setBackground(Color c) {
getContentPane().setBackground(c);
}
public void actionPerformed(ActionEvent e) {
int num1,num2;
if(e.getSource().equals(bt1)) {
num1 = Integer.parseInt(tx1.getText());
datamem[num1] = tx2.getText();
if((i%2) == 1) setBackground(Color.yellow);
else setBackground(Color.red);
i=i+1;
} else if (e.getSource().equals(bt2)) {
num2=Integer.parseInt(tx3.getText());
tx4.setText(datamem[num2]);
if((i%2) == 1) setBackground(Color.blue);
else setBackground(Color.green);
i=i+1;
}
}
public static void main(String[] args) {
new NewAwtIo();
}
}
補上SetTitle跟刪除多餘的那一行...
|
|
x0
[8 樓]
From:臺灣 | Posted:2009-03-20 00:44 |
|
|
overing
|
分享:
▲
大概知道問題所在了 setTitle你只要這樣呼叫即可 因為這個NewAwtIo已經繼承了JFrame 所以自己就"是一個"JFrame了 不用再去另外產生一個 而你frame.setTitle是去設定新生出來的那一個 並不是最後顯示的那一個 一般在設計JAVA視窗程式的時候有兩種方式 打個比方~今天我需要個有含JLabel的JFrame 我可以用下面兩種方式來作 一種是在主程式進入點(main)裡面產生一個視窗( JFrame frame = new JFrame(); ) 然後在上面另外加上要加的東西( JLabel label1 = new JLabel(); frame.add(label1); ) 接著將視窗顯示出來( frame.setVisible(true); ) 另一種是讓Class去繼承視窗Class( class NewFrame extends JFrame{...} ) 這樣這個新Class也變成"一種視窗" 因為是繼承視窗類別而來的 所以原有視窗Class的 屬性(變數) 跟 方法(副程式) 也能在這新的Class上面使用 ( NewFrame nFrame = new NewFrame(); nFrame.setTitle("New Frame"); ) 然後在這新的Class當中定義好 這種新視窗有的東西 ( class NewFrame extends JFrame{ JLabel label1 = new JLabel(); } ) 接著在新視窗Class的建構子當中將Label加上( public NewFrame() { add(label1); ) 雖然這種方式可能稍微蠻煩了點 但是相對於主程式來講 要做的事情就少很多了 主程式進入點(main)裡你指需要這樣寫( new NewFrame().setVisible(true); ) 因為NewFrame這個Class裡面已經把自己需要做的事都做完了 以下就這兩種方式各作一份 產生視窗再加上的方式 ( 檔名:MakeFrame.java) 複製程式
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class MakeFrame {
public static void main(String[] args) {
String[] datamem = new String[10];
JLabel lb1;
JButton bt1, bt2;
JTextField tx1, tx2, tx3, tx4;
JFrame frame = new JFrame();
frame.setLayout(null);
frame.setTitle("I/O測試");
frame.getContentPane().setForeground(Color.red);
lb1 = new JLabel("區域選擇");
lb1.setForeground(Color.red);
lb1.setSize(240,40);
lb1.setLocation(10,20);
frame.add(lb1);
tx1 = new JTextField("");
tx1.setForeground(Color.red);
tx1.setSize(200,40);
tx1.setLocation(10,70);
frame.add(tx1);
tx2 = new JTextField("");
tx2.setForeground(Color.red);
tx2.setSize(200,40);
tx2.setLocation(250,70);
frame.add(tx2);
tx3 = new JTextField("");
tx3.setForeground(Color.red);
tx3.setSize(200,40);
tx3.setLocation(10,150);
frame.add(tx3);
tx4 = new JTextField("");
tx4.setForeground(Color.black);
tx4.setSize(200,40);
tx4.setLocation(250,150);
frame.add(tx4);
bt1=new JButton("寫入");
bt1.setSize(100,40);
bt1.setLocation(60,250);
bt1.setBorderPainted(true);
//bt1.setEnabled(true); 預設new JButton()就是Enable狀態了 所以這個可以省略
frame.add(bt1);
bt2=new JButton("寫出");
bt2.setSize(100,40);
bt2.setLocation(300,250);
bt2.setBorderPainted(true);
//bt2.setEnabled(true);
frame.add(bt2);
ActLis actLis = new ActLis(tx1,tx2,tx3,tx4,bt1,bt2,datamem,frame);
bt1.addActionListener(actLis);
bt2.addActionListener(actLis);
//tx1.setEditable(true);//跟JButton一樣 預設就是Enable了 可省略
//tx2.setEditable(true);
//tx3.setEditable(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500,400); //設定視窗大小
frame.setVisible(true); //顯示視窗
}
//其實這邊也是在做類似繼承的動作 只是這邊叫做"實做(implements)"
static class ActLis implements ActionListener {
JTextField tx1, tx2, tx3, tx4;
JButton bt1, bt2;
String[] datamem;
JFrame frame;
static int i = 1;
public ActLis(JTextField t1, JTextField t2, JTextField t3, JTextField t4,
JButton b1, JButton b2, String[] d, JFrame f) {
tx1 = t1; tx2 = t2; tx3 = t3; tx4 = t4;
bt1 = b1; bt2 = b2;
datamem = d;
frame = f;
}
public void actionPerformed(ActionEvent e) {
int num1, num2;
if(e.getSource().equals(bt1)) {
num1 = Integer.parseInt(tx1.getText());
datamem[num1] = tx2.getText();
if((i%2) == 1) frame.setBackground(Color.yellow);
else frame.setBackground(Color.red);
i = i + 1;
} else if (e.getSource().equals(bt2)) {
num2 = Integer.parseInt(tx3.getText());
tx4.setText(datamem[num2]);
if((i%2) == 1) frame.setBackground(Color.blue);
else frame.setBackground(Color.green);
i = i + 1;
}
}
}
} 繼承的方式( 檔名:NewFrame.java ) 複製程式
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class NewFrame extends JFrame implements ActionListener {
static String datamem[]=new String[10];
JLabel lb1;
JButton bt1, bt2;
JTextField tx1, tx2, tx3, tx4;
static int i=1;
public NewFrame() {
setLayout(null);
setTitle("I/O測試");
setForeground(Color.red);
lb1 = new JLabel("區域選擇");
lb1.setForeground(Color.red);
lb1.setSize(240,40);
lb1.setLocation(10,20);
add(lb1);
tx1 = new JTextField("");
tx1.setForeground(Color.red);
tx1.setSize(200,40);
tx1.setLocation(10,70);
add(tx1);
tx2 = new JTextField("");
tx2.setForeground(Color.red);
tx2.setSize(200,40);
tx2.setLocation(250,70);
add(tx2);
tx3 = new JTextField("");
tx3.setForeground(Color.red);
tx3.setSize(200,40);
tx3.setLocation(10,150);
add(tx3);
tx4 = new JTextField("");
tx4.setForeground(Color.black);
tx4.setSize(200,40);
tx4.setLocation(250,150);
add(tx4);
bt1=new JButton("寫入");
bt1.setSize(100,40);
bt1.setLocation(60,250);
bt1.setBorderPainted(true);
bt1.setEnabled(true);
add(bt1);
bt2=new JButton("寫出");
bt2.setSize(100,40);
bt2.setLocation(300,250);
bt2.setBorderPainted(true);
bt2.setEnabled(true);
add(bt2);
bt1.addActionListener(this);
bt2.addActionListener(this);
tx1.setEditable(true);
tx2.setEditable(true);
tx3.setEditable(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500,400); //設定視窗大小
setVisible(true); //顯示視窗
}
public void setBackground(Color c) {
getContentPane().setBackground(c);
}
public void actionPerformed(ActionEvent e) {
int num1,num2;
if(e.getSource().equals(bt1)) {
num1 = Integer.parseInt(tx1.getText());
datamem[num1] = tx2.getText();
if((i%2) == 1) setBackground(Color.yellow);
else setBackground(Color.red);
i=i+1;
} else if (e.getSource().equals(bt2)) {
num2=Integer.parseInt(tx3.getText());
tx4.setText(datamem[num2]);
if((i%2) == 1) setBackground(Color.blue);
else setBackground(Color.green);
i=i+1;
}
}
public static void main(String[] args) {
new NewFrame();
}
}
[ 此文章被overing在2009-03-20 19:37重新編輯 ]
|
Zippy G2 600W Intel C2Q Q9550 Gigabyte GA-X48-DQ6 Gigabyte GV-NX96T512H-B G-skill pi 1100MHz 2Gx4 ACARD ANS-9010 32GB (Windows7 10sec boot!!) WD 150GB(WD1500ADFD)/640GB(6400AASK)
|
x0
[9 樓]
From:未知地址 | Posted:2009-03-20 18:11 |
|
|
|