[英]JComponents don't appear until mouseover or I minimize the window, and JTextField problems
我是來自菲律賓的10年級學生,現在的IT是關於Java與GUI的。 只有基本的。 我們的項目是制造POS系統。 我已經寫了一個,但是有一些小問題:
除非我最小化窗口然后重新打開它(一切隨后顯示),或者用鼠標將鼠標懸停在它們上面,否則JComponents不會出現
對於我使用鍵盤輸入String的“ Amount Paid”(屏幕2)文本字段,它在第一個輸入之前首先顯示“ null”,因為此文本字段首先設置為顯示“ 0”,然后接受來自鍵盤。 但是,當程序剛運行時,我第一次輸入內容時,它首先顯示“ null”。 可以清除它,但可能會造成混亂。
請原諒我作為業余愛好者,因為我只是一個學生,這只是一個項目。 另外,這是我第一次來這里,對不起,如果我做任何奇怪的事! 我使用BlueJ BTW。 拜托,我正在尋求您的幫助。 謝謝!
這是我的源代碼:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class BalikBukid extends JFrame{
public static final int WIDTH = 1500;
public static final int HEIGHT = 750;
private JLabel BalikBukidFarmKitchen, PriceToPay, AmountPaid;
private JButton CaesarSalad, FarmSalad, Karekare, BeefTaPao, Adobo, MushroomChicken, KaningAsul, KaningDilaw, IceCreamBasket, TsokolateIsland;
private JButton Starters, Beef, Chicken, Rice, Dessert;
private JButton one, two, three, four, five, six, seven, eight, nine, zero, clear;
private JButton order, endorders;
private JTextField screen1, screen2;
private static int OrderPrice = 0, Cash, caesars = 0, farmsalds = 0, kare = 0, tapao = 0, adobs = 0, mushroom = 0, asul = 0, dilaw = 0, icecream = 0, islands = 0;;
private static String PayingScreen;
private OrderHandler ordhandler = new OrderHandler();
private MoneyHandler monhandler = new MoneyHandler();
private TransactionHandler transhandler = new TransactionHandler();
private TotalOrdersHandler tordhandler = new TotalOrdersHandler();
public BalikBukid(){
Container pane = getContentPane();
pane.setLayout(null);
setTitle("Balik Bukid POS System");
setSize(WIDTH, HEIGHT);
setVisible(true);
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
pane.setBackground(Color.green);
//Instantiate the labels and buttons
BalikBukidFarmKitchen = new JLabel("Balik Bukid Farm & Kitchen");
Starters = new JButton("STARTERS");
Beef = new JButton("BEEF");
Chicken = new JButton("CHICKEN");
Rice = new JButton("RICE");
Dessert = new JButton("DESSERT");
PriceToPay = new JLabel("Price to pay: ");
AmountPaid = new JLabel("Price paid: ");
CaesarSalad = new JButton("<html><center><b>Classic Caesar<br>Salad</b><br>Php 160</center></html>");
FarmSalad = new JButton("<html><center><b>Balik Bukid<br>Farm Salad</b><br>Php 160</center></html>");
Karekare = new JButton("<html><center><b>Ang Kare-kare</b><br>Php 210</center></html>");
BeefTaPao = new JButton("<html><center><b>Garlic Beef<br>Ta Pao</b><br>Php 180</center></html>");
Adobo = new JButton("<html><center><b>Binalot na<br>Adobong Dilaw</b><br>Php 145</center></html>");
MushroomChicken = new JButton("<html><center><b>Mushroom Chicken</b><br>Php 160</center></html>");
KaningAsul = new JButton("<html><center><b>Kaning Asul</b><br>Php 35</center></html>");
KaningDilaw = new JButton("<html><center><b>Kaning Dilaw</b><br>Php 35</center></html>");
IceCreamBasket = new JButton("<html><center><b>Ice Cream<br>Basket</b><br>Php 110</center></html>");
TsokolateIsland = new JButton("<html><center><b>Tsokolate Islands</b><br>Php 180<</center></html>");
one = new JButton("1");
two = new JButton("2");
three = new JButton("3");
four = new JButton("4");
five = new JButton("5");
six = new JButton("6");
seven = new JButton("7");
eight = new JButton("8");
nine = new JButton("9");
zero = new JButton("0");
order = new JButton("TRANSACT");
endorders = new JButton("CHECK OUT");
screen1 = new JTextField();
screen2 = new JTextField();
clear = new JButton("CLEAR");
//Set the bounds of each button and label
BalikBukidFarmKitchen.setBounds(570, 10, 300, 50);
CaesarSalad.setBounds(250, 100, 100, 70);
FarmSalad.setBounds(355, 100, 100, 70);
Starters.setBounds(90, 100, 150, 70);
Karekare.setBounds(250, 180, 100, 70);
BeefTaPao.setBounds(355, 180, 100, 70);
Beef.setBounds(90, 180, 150, 70);
Adobo.setBounds(250, 260, 100, 70);
MushroomChicken.setBounds(355, 260, 100, 70);
Chicken.setBounds(90, 260, 150, 70);
KaningAsul.setBounds(250, 340, 100, 70);
KaningDilaw.setBounds(355, 340, 100, 70);
Rice.setBounds(90, 340, 150, 70);
IceCreamBasket.setBounds(250, 420, 100, 70);
TsokolateIsland.setBounds(355, 420, 100, 70);
Dessert.setBounds(90, 420, 150, 70);
one.setBounds(950, 150, 80, 60);
two.setBounds(1030, 150, 80, 60);
three.setBounds(1110, 150, 80, 60);
four.setBounds(950, 210, 80, 60);
five.setBounds(1030, 210, 80, 60);
six.setBounds(1110, 210, 80, 60);
seven.setBounds(950, 270, 80, 60);
eight.setBounds(1030, 270, 80, 60);
nine.setBounds(1110, 270, 80, 60);
zero.setBounds(950, 330, 80, 60);
clear.setBounds(1030, 330, 160, 60);
order.setBounds(570, 500, 120, 60);
endorders.setBounds(720,500, 120, 60);
screen1.setBounds(600, 150, 200, 45);
screen2.setBounds(600, 300, 200, 45);
PriceToPay.setBounds(600, 130, 200, 20);
AmountPaid.setBounds(600, 280, 200, 20);
//Formatting
BalikBukidFarmKitchen.setFont(new Font("Trebuchet MS", Font.BOLD, 20));
BalikBukidFarmKitchen.setForeground(Color.BLUE);
PriceToPay.setFont(new Font("Trebuchet MS", Font.ITALIC, 15));
PriceToPay.setForeground(Color.BLUE);
AmountPaid.setFont(new Font("Trebuchet MS", Font.ITALIC, 15));
AmountPaid.setForeground(Color.BLUE);
Starters.setFont(new Font("Trebuchet MS", Font.BOLD, 20));
Starters.setForeground(Color.RED);
Starters.setBackground(Color.WHITE);
Beef.setFont(new Font("Trebuchet MS", Font.BOLD, 20));
Beef.setForeground(Color.RED);
Beef.setBackground(Color.ORANGE);
Chicken.setFont(new Font("Trebuchet MS", Font.BOLD, 20));
Chicken.setForeground(Color.RED);
Chicken.setBackground(Color.PINK);
Rice.setFont(new Font("Trebuchet MS", Font.BOLD, 20));
Rice.setForeground(Color.RED);
Rice.setBackground(Color.YELLOW);
Dessert.setFont(new Font("Trebuchet MS", Font.BOLD, 20));
Dessert.setForeground(Color.RED);
Dessert.setBackground(Color.MAGENTA);
screen1.setText("0");
screen2.setText("0");
screen1.setFont(new Font("Trebuchet MS", Font.BOLD, 19));
screen2.setFont(new Font("Trebuchet MS", Font.BOLD, 19));
screen1.setHorizontalAlignment(JTextField.CENTER);
screen2.setHorizontalAlignment(JTextField.CENTER);
screen1.setEditable(false);
screen2.setEditable(false);
//Add Action Listener
CaesarSalad.addActionListener(ordhandler);
FarmSalad.addActionListener(ordhandler);
Karekare.addActionListener(ordhandler);
BeefTaPao.addActionListener(ordhandler);
Adobo.addActionListener(ordhandler);
MushroomChicken.addActionListener(ordhandler);
KaningAsul.addActionListener(ordhandler);
KaningDilaw.addActionListener(ordhandler);
IceCreamBasket.addActionListener(ordhandler);
TsokolateIsland.addActionListener(ordhandler);
one.addActionListener(monhandler);
two.addActionListener(monhandler);
three.addActionListener(monhandler);
four.addActionListener(monhandler);
five.addActionListener(monhandler);
six.addActionListener(monhandler);
seven.addActionListener(monhandler);
eight.addActionListener(monhandler);
nine.addActionListener(monhandler);
zero.addActionListener(monhandler);
clear.addActionListener(monhandler);
order.addActionListener(transhandler);
endorders.addActionListener(tordhandler);
//Add to the container
pane.add(BalikBukidFarmKitchen);
pane.add(PriceToPay);
pane.add(AmountPaid);
pane.add(CaesarSalad);
pane.add(FarmSalad);
pane.add(Karekare);
pane.add(BeefTaPao);
pane.add(Adobo);
pane.add(MushroomChicken);
pane.add(KaningAsul);
pane.add(KaningDilaw);
pane.add(IceCreamBasket);
pane.add(TsokolateIsland);
pane.add(screen1);
pane.add(screen2);
pane.add(one);
pane.add(two);
pane.add(three);
pane.add(four);
pane.add(five);
pane.add(six);
pane.add(seven);
pane.add(eight);
pane.add(nine);
pane.add(zero);
pane.add(clear);
pane.add(order);
pane.add(endorders);
pane.add(Starters);
pane.add(Beef);
pane.add(Chicken);
pane.add(Rice);
pane.add(Dessert);
}
public class OrderHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
String StringOrderPrice;
if(e.getActionCommand().equals("<html><center><b>Classic Caesar<br>Salad</b><br>Php 160</center></html>")){
OrderPrice += 160;
StringOrderPrice = Integer.toString(OrderPrice);
screen1.setText(StringOrderPrice);
caesars++;
}else if(e.getActionCommand().equals("<html><center><b>Balik Bukid<br>Farm Salad</b><br>Php 160</center></html>")){
OrderPrice += 160;
StringOrderPrice = Integer.toString(OrderPrice);
screen1.setText(StringOrderPrice);
farmsalds++;
}else if(e.getActionCommand().equals("<html><center><b>Ang Kare-kare</b><br>Php 210</center></html>")){
OrderPrice += 210;
StringOrderPrice = Integer.toString(OrderPrice);
screen1.setText(StringOrderPrice);
kare++;
}else if(e.getActionCommand().equals("<html><center><b>Garlic Beef<br>Ta Pao</b><br>Php 180</center></html>")){
OrderPrice += 180;
StringOrderPrice = Integer.toString(OrderPrice);
screen1.setText(StringOrderPrice);
tapao++;
}else if(e.getActionCommand().equals("<html><center><b>Binalot na<br>Adobong Dilaw</b><br>Php 145</center></html>")){
OrderPrice += 145;
StringOrderPrice = Integer.toString(OrderPrice);
screen1.setText(StringOrderPrice);
adobs++;
}else if(e.getActionCommand().equals("<html><center><b>Mushroom Chicken</b><br>Php 160</center></html>")){
OrderPrice += 160;
StringOrderPrice = Integer.toString(OrderPrice);
screen1.setText(StringOrderPrice);
mushroom++;
}else if(e.getActionCommand().equals("<html><center><b>Kaning Asul</b><br>Php 35</center></html>")){
OrderPrice += 35;
StringOrderPrice = Integer.toString(OrderPrice);
screen1.setText(StringOrderPrice);
asul++;
}else if(e.getActionCommand().equals("<html><center><b>Kaning Dilaw</b><br>Php 35</center></html>")){
OrderPrice += 35;
StringOrderPrice = Integer.toString(OrderPrice);
screen1.setText(StringOrderPrice);
dilaw++;
}else if(e.getActionCommand().equals("<html><center><b>Ice Cream<br>Basket</b><br>Php 110</center></html>")){
OrderPrice += 110;
StringOrderPrice = Integer.toString(OrderPrice);
screen1.setText(StringOrderPrice);
icecream++;
}else if(e.getActionCommand().equals("<html><center><b>Tsokolate Islands</b><br>Php 180<</center></html>")){
OrderPrice += 180;
StringOrderPrice = Integer.toString(OrderPrice);
screen1.setText(StringOrderPrice);
islands++;
}
}
}
public class MoneyHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
if(e.getActionCommand().equals("1")){
PayingScreen += "1";
screen2.setText(PayingScreen);
}else if(e.getActionCommand().equals("2")){
PayingScreen += "2";
screen2.setText(PayingScreen);
}else if(e.getActionCommand().equals("3")){
PayingScreen += "3";
screen2.setText(PayingScreen);
}else if(e.getActionCommand().equals("4")){
PayingScreen += "4";
screen2.setText(PayingScreen);
}else if(e.getActionCommand().equals("5")){
PayingScreen += "5";
screen2.setText(PayingScreen);
}else if(e.getActionCommand().equals("6")){
PayingScreen += "6";
screen2.setText(PayingScreen);
}else if(e.getActionCommand().equals("7")){
PayingScreen += "7";
screen2.setText(PayingScreen);
}else if(e.getActionCommand().equals("8")){
PayingScreen += "8";
screen2.setText(PayingScreen);
}else if(e.getActionCommand().equals("9")){
PayingScreen += "9";
screen2.setText(PayingScreen);
}else if(e.getActionCommand().equals("0")){
PayingScreen += "0";
screen2.setText(PayingScreen);
}else if(e.getActionCommand().equals("CLEAR")){
PayingScreen = "";
screen2.setText(PayingScreen);
}
}
}
public class TransactionHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
int balance, cashinput, IntAmtPaid, change;
String Strcashinput;
IntAmtPaid = Integer.parseInt(PayingScreen);
if(IntAmtPaid < OrderPrice){
balance = OrderPrice - IntAmtPaid;
do{
Strcashinput = JOptionPane.showInputDialog(null, "Balance: " + balance +"", "Balance", JOptionPane.INFORMATION_MESSAGE);
cashinput = Integer.parseInt(Strcashinput);
balance = balance - cashinput;
}while(balance != 0);
JOptionPane.showMessageDialog(null, "Balance: 0. Total balance paid. New transaction.", "Total Balance Paid", JOptionPane.INFORMATION_MESSAGE);
PayingScreen = "";
OrderPrice = 0;
screen1.setText("0");
screen2.setText("0");
}else if(IntAmtPaid == OrderPrice){
JOptionPane.showMessageDialog(null, "Balance: 0. Exact amount paid. New transaction.", "Next transaction", JOptionPane.INFORMATION_MESSAGE);
PayingScreen = "";
OrderPrice = 0;
screen1.setText("0");
screen2.setText("0");
}else{
change = IntAmtPaid - OrderPrice;
JOptionPane.showMessageDialog(null, "Change: " + change + ". New transaction.", "Change", JOptionPane.INFORMATION_MESSAGE);
PayingScreen = "";
OrderPrice = 0;
screen1.setText("0");
screen2.setText("0");
}
}
}
public class TotalOrdersHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
JOptionPane.showMessageDialog(null, "TOTAL ORDERS TODAY:\nClassic Caesars Salad: " + caesars + " order/s\nFarm Salad: " + farmsalds + " order/s\nKare-kare: " + kare + " order/s\nBeef Ta Pao: " + tapao + " order/s\nAdobo: " + adobs + " order/s\nMushroom Chicken: " + mushroom + " order/s\nKaning Asul: " + asul + " order/s\nKaning Dilaw: " + dilaw + " order/s\nIce Cream Basket: " + icecream + " order/s\nTsokolate Islands: " + islands + "orders.\nHave a good day!", "Total Orders", JOptionPane.INFORMATION_MESSAGE);
System.exit(0);
}
}
public static void main (String[]args){
BalikBukid body = new BalikBukid();
}
}
同樣,我可能會或可能不會僅限於已經在程序中導入的程序包,但是如果我們在課堂上討論它們會更好,以便我能更好地理解它們。 抱歉,我使用評論,哈哈,我使用它們是為了避免迷路。
在使框架可見之前,應將組件添加到框架。
因此,將以下語句移到構造函數的末尾:
setVisible(true);
實際上,為什么不移動所有語句以將框架的屬性更改為構造函數的末尾,以使這些語句位於一次位置:
也:
變量名稱不應以大寫字母開頭。 一些變量名正確,而其他則不正確。 保持一致並遵循Java約定!!!
不要使用空布局。 Swing旨在與布局管理器一起使用。 因此,請擺脫所有setBounds(...)語句,並使用適當的布局管理器。
Java GUI必須在不同的語言環境中使用不同的PLAF在不同的OS,屏幕大小,屏幕分辨率等上工作。 因此,它們不利於像素的完美布局。 而是使用布局管理器,或它們的組合與布局沿填充和邊框為白色的空間 。
現在,該建議是解決問題的核心。 該實現將遵循以下原則:
pack()
頂層容器,以便觸發GUI的實際驗證,並使TLC成為顯示內容所需的最小大小。 frame.setMinimumSize(frame.getSize());
這時很不錯,但是是可選的。) frame.setVisible(true); // show the organized, sized GUI!
frame.setVisible(true); // show the organized, sized GUI!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.