2014-12-26 2 views
-1

저는 3 학년 컴퓨터 엔지니어 학생이며 게임 프로젝트를 수행하려고합니다. 내 JFrame에 배경 이미지를 추가했습니다. 그리고 프레임에 추가 한 다른 패널을 투명하게 만들려고했습니다. 이 경우 알파 값을 사용합니다 (예 : new Color(0,0,0,125)). 나는 내 프로그램에서 cardLayout을 사용하고 센터 패널에서 새로운 세그먼트 또는 새 페이지를 호출 할 때마다 사용합니다. alphavalue는 전체 패널 투명도를 가져와 선택한 패널에 구현하고 문제를 만듭니다. 예 : 왼쪽 패널에 7 개의 버튼이 있으며 범죄 버튼을 클릭하면 범죄 패널이 중앙 패널에오고 왼쪽 패널은 센터 패널의 안쪽에 다시 버튼으로 나타납니다 (투명하게).자바 중첩 패널 알파 값과 관련된 투명성 문제

나는 16 개의 클래스가 있으므로 메인 클래스 만 추가했습니다. 문법이 잘못되어 죄송합니다. 네가 나를 이해하고 나를 도울 수 있기를 바랍니다.

import java.util.*; 

import javax.swing.*; 
import javax.swing.border.*; 

import java.awt.*; 
import java.awt.event.*; 

public class TheMafia { 

    public static ImageIcon scale(ImageIcon i,int x,int y) { 
     Image img = i.getImage(); 
     Image newimg = img.getScaledInstance(x,y,Image.SCALE_SMOOTH); 
     i = new ImageIcon(newimg); 
     return i; 
    } 

    public static void setButton (JButton b,int x,int y) { 
     b.setPreferredSize(new Dimension(x,y)); 
     b.setBackground(Color.gray); 
     b.setForeground(Color.white); 
     b.setBorder(new LineBorder(Color.black,1)); 
     b.setFont(new Font("Serif",Font.BOLD,18)); 
    } 

    public static void main(String[] args) { 

     ImageIcon home2 = new ImageIcon("home.jpg"); 
     home2 = scale(home2,1366,768); 
     JFrame theMafia = new JFrame(); 
     theMafia.setTitle("The Mafia Game - Best game in the world!"); 
     JPanel p1 = new JPanel(); 
     JPanel p2 = new JPanel(); 
     theMafia.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     theMafia.setContentPane(new JLabel(home2)); 
     theMafia.setLayout(new BorderLayout()); 
     //theMafia.setLayout(new FlowLayout()); 
     //theMafia.setExtendedState(JFrame.MAXIMIZED_BOTH); 
     theMafia.setSize(800,700); 
     theMafia.setLocationRelativeTo(null); 
     theMafia.setVisible(true); 


     p1.setBackground(new Color(0,0,0,35)); 
     p2.setBackground(new Color(0,0,0,65)); 
     p1.setPreferredSize(new Dimension(250,150)); 
     p2.setPreferredSize(new Dimension(250,150)); 
     //theMafia.add(p1); 
     //theMafia.add(p2); 







     // kullanıcı oluşturuldu 
     User u1 = new User(); 

     // suçlar oluşturuldu 
     Crime c1 = new Crime(); 
     c1.setName("Yaşlı Kadın"); 
     c1.setDifficulty(5); 
     c1.setStrength(1); 
     c1.setMoney(11); 

     Crime c2 = new Crime(); 
     c2.setName("Dükkan Hırsızlığı"); 
     c2.setDifficulty(10); 
     c2.setStrength(3); 
     c2.setMoney(67); 

     Crime c3 = new Crime(); 
     c3.setName("Araba Hırsızlığı"); 
     c3.setDifficulty(20); 
     c3.setStrength(6); 
     c3.setMoney(133); 










     // suçun seçilmesi 
     final JPanel crimes = new JPanel(new CardLayout()); 
     //crimes.setBackground(new Color(0,0,0,65)); 

     ImageIcon suçişle = new ImageIcon("suçişle.jpg"); 
     suçişle = scale(suçişle,50,50); 
     JButton yap = new JButton("Suçu işle!",suçişle); 
     setButton(yap,100,65); 

     JPanel crime1 = new JPanel(new GridLayout(2,1)); 
     crime1.setBackground(new Color(0,0,0,35)); 
     crime1.setForeground(Color.white); 

     JLabel crime1Info = new JLabel("Suç : "+c1.getName()+"\n Para : "+c1.getMoney()+"\n Yapabilme ihtimali : "+c1.getCapable()+"\n Güç : "+c1.getStrength()); 
     crime1Info.setFont(new Font("Serif",Font.BOLD,15)); 

     crime1.add(crime1Info); 
     crime1.add(yap); 

     JPanel crime2 = new JPanel(new GridLayout(2,1)); 
     crime2.setBackground(new Color(0,0,0,35)); 
     crime2.setForeground(Color.white); 

     JLabel crime2Info = new JLabel("Suç : "+c2.getName()+"\n Para : "+c2.getMoney()+"\n Yapabilme ihtimali : "+c2.getCapable()+"\n Güç : "+c2.getStrength()); 
     crime2Info.setFont(new Font("Serif",Font.BOLD,15)); 

     crime2.add(crime2Info); 
     crime2.add(yap); 

     JPanel crime3 = new JPanel(); 
     crime3.setBackground(new Color(0,0,0,35)); 
     crime3.setForeground(Color.white); 

     JLabel crime3Info = new JLabel("Suç : "+c3.getName()+"\n Para : "+c3.getMoney()+"\n Yapabilme ihtimali : "+c3.getCapable()+"\n Güç : "+c3.getStrength()); 
     crime2Info.setFont(new Font("Serif",Font.BOLD,15)); 

     crime3.add(crime3Info); 
     crime3.add(yap); 

     crimes.add(crime1,c1.getName()); 
     crimes.add(crime2,c2.getName()); 
     crimes.add(crime3,c3.getName()); 

     String crimesNames [] = {c1.getName(),c2.getName(),c3.getName()}; 
     JComboBox crimesbox = new JComboBox(crimesNames); 
     crimesbox.setEditable(false); 
     crimesbox.addItemListener(new ItemListener() { 
      public void itemStateChanged(ItemEvent evt) { 
       CardLayout cl = (CardLayout) (crimes.getLayout()); 
       cl.show(crimes,(String)evt.getItem()); 
      } 
     }); 

     // menu 
     final JPanel menus = new JPanel(new CardLayout()); 
     //menus.setBackground(new Color(0,0,0,35)); 
     // crime 
     JPanel crime = new JPanel(new BorderLayout()); 
     crime.setBackground(new Color(0,0,0,35)); 
     crime.add(crimesbox,BorderLayout.PAGE_START); 
     crime.add(crimes,BorderLayout.SOUTH); 

     ImageIcon crimeimage = new ImageIcon("thief.png"); 
     crimeimage = scale(crimeimage,50,50); 

     final JButton crimeButton = new JButton("Suçlar",crimeimage); 
     setButton(crimeButton,178,76); 

     crimeButton.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       CardLayout cl = (CardLayout) (menus.getLayout()); 
       if (e.getSource() == crimeButton) { 
        cl.show(menus,"suç"); 
       } 
      } 
     }); 

     // weapon shop 
     JPanel weaponShop = new JPanel(); 
     //weaponShop.setBackground(new Color(0,0,0,125)); 

     final JButton weaponShopButton = new JButton("Silah Dükkanı"); 
     setButton(weaponShopButton,178,76); 

     // building 
     JPanel buildingPanel = new JPanel(); 
     //buildingPanel.setBackground(new Color(0,0,0,125)); 

     final JButton buildingButton = new JButton("Binalar"); 
     setButton(buildingButton,178,76); 

     // nightlife 
     JPanel nightLife = new JPanel(); 
     //nightLife.setBackground(new Color(0,0,0,35)); 

     final JButton nightLifeButton = new JButton("Gece Hayatı"); 
     setButton(nightLifeButton,178,76); 

     // treatment center 
     JPanel treatmentCenter = new JPanel(); 
     //treatmentCenter.setBackground(new Color(0,0,0,35)); 

     final JButton treatmentCenterButton = new JButton("Tedavi Merkezi"); 
     setButton(treatmentCenterButton,178,76); 

     // casino 
     JPanel casinoPanel = new JPanel(); 
     //casinoPanel.setBackground(new Color(0,0,0,35)); 

     final JButton casinoButton = new JButton("Gazino"); 
     setButton(casinoButton,178,76); 

     // home page 
     JPanel home = new JPanel(); 
     home.setBackground(new Color(0,0,0,35)); 

     ImageIcon homeimage = new ImageIcon("home.jpg"); 
     homeimage = scale(homeimage,1200,800); 

     JLabel homelabel= new JLabel(); 
     home.add(homelabel); 

     ImageIcon homeicon = new ImageIcon("home_icon.png"); 
     homeicon = scale(homeicon,50,50); 

     final JButton homeButton = new JButton("Home",homeicon); 
     setButton(homeButton,178,76); 

     homeButton.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       CardLayout cl = (CardLayout) (menus.getLayout()); 
       if (e.getSource() == homeButton) { 
        cl.show(menus,"home"); 
       } 
      } 
     }); 

     menus.add(home,"home"); 
     menus.add(crime,"suç"); 
     menus.add(weaponShop,"silahDükkanı"); 
     menus.add(buildingPanel,"bina"); 
     menus.add(nightLife,"geceHayatı"); 
     menus.add(treatmentCenter,"TedaviMerkezi"); 
     menus.add(casinoPanel,"gazino"); 

     Color grisi=new Color(13,13,13); 
     JPanel menusButton = new JPanel(new GridLayout(10,1)); 
     //menusButton.setBackground(grisi); 
     menusButton.add(homeButton); 
     menusButton.add(crimeButton); 
     menusButton.add(weaponShopButton); 
     menusButton.add(buildingButton); 
     menusButton.add(nightLifeButton); 
     menusButton.add(treatmentCenterButton); 
     menusButton.add(casinoButton); 
     menusButton.setOpaque(false); 





     theMafia.add(menusButton,BorderLayout.WEST); 
     theMafia.add(menus,BorderLayout.CENTER); 
    } 
} 
+0

무엇이 당신의 질문입니까? – KeatsPeeks

+0

http://i60.tinypic.com/21dlm4g.jpg이 문제를 어떻게 해결할 수 있습니까? Suçlar 버튼의이 스크린 샷, http://i61.tinypic.com/2w21nyb.jpg 홈 버튼의 스크린 샷. – Furkan

답변

1

스윙은 투명 배경을 올바르게 처리하지 못합니다. 스윙은 불투명하거나 불투명하지 않은 구성 요소를 기대하며 투명성은 구성 요소가 아니기 때문에 문제를 일으 킵니다.

자세한 내용과 문제 해결을위한 두 가지 해결책을 확인하려면 Background With Transparency을 확인하십시오.