2017-05-04 26 views
1

我正在用GUI做一個餐廳菜單程序。setOpaque是真的,但JPanel不會改變背景色

我創建了3個JPanel並將Background(Color.white)設置爲其中之一。

但java不會顯示該背景顏色。

怎麼了?

這裏是我的代碼

請不要拿任何注意食品價格和cardLayout。沒有完成編碼。

public class MainDishPanel extends JPanel { 

JCheckBox box1 = new JCheckBox("Hamburger 5 dollars"), 
      box2 = new JCheckBox("Pizza 5 dollars"), 
      box3 = new JCheckBox("French Hot dog 5 dollars"); 
MainDishPanel(){ 
    setOpaque(true); 
    setBackground(Color.white); 
    setLayout(new GridLayout(3,1)); 
    // setBorder(); 

    add(box1);add(box2);add(box3); 
    setVisible(true); 
} 
} 

類主要方法:

import java.awt.BorderLayout; 
import javax.swing.*; 
import java.util.*; 
import java.awt.event.*; 
import java.awt.*; 
public class RestaurantMenu extends JFrame implements ActionListener{ 



/* private JPanel maindishPanel= new JPanel(), 
        dessertPanel = new JPanel(), 
        drinkPanel = new JPanel(),*/ 
    private JPanel leftPanel = new JPanel(), 
        rightPanel = new JPanel(); 
    private MainDishPanel maindish = new MainDishPanel(); 
    private DessertPanel dessert = new DessertPanel(); 
    private DrinkPanel drink = new DrinkPanel(); 
    private LinkedList<Double>price = new LinkedList<>(); 
    private JButton left = new JButton("previous"), 
        right = new JButton("next"); 
    public int page =1; 
    private JLabel pageLabel = new JLabel(String.valueOf(page)), 
        foodTypeLabel = new JLabel(); 
    CardLayout cards; 
    GridBagLayout grid; 
    RestaurantMenu(){ 
     setTitle("Main Dish"); 
     GridBagConstraints gbc = new GridBagConstraints(); 
     add(foodTypeLabel, BorderLayout.NORTH); 
     add(pageLabel, BorderLayout.SOUTH); 
     add(leftPanel, BorderLayout.WEST); 
     add(rightPanel, BorderLayout.EAST); 
     add(maindish, BorderLayout.CENTER); 

     grid = new GridBagLayout(); 
     leftPanel.setLayout(grid); leftPanel.add(left); 
     rightPanel.setLayout(grid); rightPanel.add(right); 
     right.addActionListener(this); 
     left.addActionListener(this); 
     //cards = new CardLayout(); 
     /*cards = (CardLayout)maindishPanel.getLayout(); 
     cards.show(maindishPanel,"Main Dish");*/ 
     setVisible(true); 
     setSize(500,500); 
     setResizable(false); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 

    } 
    public void actionPerformed(ActionEvent e){ 
     if(e.getSource()==right) 
      cards.next(this); 
     if(e.getSource()==left) 
      cards.previous(this); 
    } 
    public static void main (String []args){ 
     RestaurantMenu rm = new RestaurantMenu(); 

    } 
} 

我沒有得到任何錯誤。背景顏色不會變成白色。

RestaurantMenu類可以看起來像麪條代碼或一些奇怪的事情

,因爲我有很多事情要做這個類。

回答

0

裏面你MainDishPanel你需要對JCheckBox的背景顏色設置爲白色,或者你可以setOpaque爲false,您JCheckBox的

import java.awt.Color; 
import java.awt.GridLayout; 
import javax.swing.JCheckBox; 
import javax.swing.JPanel; 

public class MainDishPanel extends JPanel { 

    JCheckBox box1 = new JCheckBox("Hamburger 5 dollars"), box2 = new JCheckBox("Pizza 5 dollars"), 
     box3 = new JCheckBox("French Hot dog 5 dollars"); 

    MainDishPanel() { 
     setOpaque(true); 
     setBackground(Color.WHITE); 
     setLayout(new GridLayout(3, 1)); 

     box1.setBackground(Color.WHITE); // or box1.setOpaque(false); 
     box2.setBackground(Color.WHITE); 
     box3.setBackground(Color.WHITE); 

     add(box1); 
     add(box2); 
     add(box3); 
     setVisible(true); 
    } 
} 
+0

謝謝謝謝謝謝真多! – ProgramLover

+0

沒問題,如果我解決了你的問題,你可以將它標記爲答案:) – bhazero025

+0

是的!做到了! :) – ProgramLover